ggplot2 객체에 대한 플롯 축의 범위를 어떻게 추출 할 수 있습니까?
에서 개체가 있습니다 ggplot2
. 예 myPlot
를 들어 x 및 y 축의 범위를 어떻게 식별 할 수 있습니까?
플롯 크기를 재조정하고 축 범위를 수정하는 등의 작업을 수행 할 수 있기 때문에 데이터 값 범위의 단순한 배수가 아닌 것 같습니다. findFn
(부터 sos
) 및 Google은 축 범위를 설정하는 방법 외에 관련 결과를 표시하지 않는 것 같습니다.
최신 버전의 ggplot2에서는의 출력에서이 정보를 찾을 수 있습니다 . ggplot_build(p)
여기서 p
ggplot 객체는 어디에 있습니까?
이전 버전의 ggplot (<0.8.9)의 경우 다음 솔루션이 작동합니다.
그리고 Hadley가 새 버전을 출시 할 때까지 이것은 도움이 될 수 있습니다. 플롯에서 제한을 설정하지 않으면 ggplot 객체에 정보가 없습니다. 그러나이 경우 ggplot2의 기본값을 사용하고 데이터에서 xlim 및 ylim을 가져올 수 있습니다.
> ggobj = ggplot(aes(x = speed, y = dist), data = cars) + geom_line()
> ggobj$coordinates$limits
$x
NULL
$y
NULL
제한을 설정하면 개체에서 사용할 수 있습니다.
> bla = ggobj + coord_cartesian(xlim = c(5,10))
> bla$coordinates$limits
$x
[1] 5 10
$y
NULL
ggplot2
버전 2를 사용 하고 있는데 이것이 이전 버전인지 확실하지 않습니다 plt
. 플롯을 객체 에 저장했다고 가정 합니다. 범위를 추출하는 것은 쉽습니다.
# y-range
layer_scales(plt)$y$range$range
# x-range
layer_scales(plt)$x$range$range
패싯 플롯의 경우를 사용하여 개별 패싯의 스케일에 액세스 할 수 있습니다 layer_scales(plot, row_idx, col_idx)
. 예를 들어 첫 번째 행과 두 번째 열의 패싯에 액세스하려면
# y-range
layer_scales(plt, 1, 2)$y$range$range
# x-range
layer_scales(plt, 1, 2)$x$range$range
yrange 가져 오기
ggplot_build(myPlot)$panel$ranges[[1]]$y.range
그리고 xrange
ggplot_build(myPlot)$panel$ranges[[1]]$x.range
버전 2.2.0 에서는 다음과 같이 수행해야합니다.
# y-range
ggplot_build(plot.object)$layout$panel_ranges[[1]]$y.range
# x-range
ggplot_build(plot.object)$layout$panel_ranges[[1]]$x.range
2018 년 11 월 업데이트
As of ggplot2
version 3.1.0, the following works:
obj <- qplot(mtcars$disp, bins = 5)
# x range
ggplot_build(obj)$layout$panel_params[[1]]$x.range
# y range
ggplot_build(obj)$layout$panel_params[[1]]$y.range
A convenience function:
get_plot_limits <- function(plot) {
gb = ggplot_build(plot)
xmin = gb$layout$panel_params[[1]]$x.range[1]
xmax = gb$layout$panel_params[[1]]$x.range[2]
ymin = gb$layout$panel_params[[1]]$y.range[1]
ymax = gb$layout$panel_params[[1]]$y.range[2]
list(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax)
}
get_plot_limits(p)
Until the next update...
As of Aug 2018 you extract the x and y-axes ranges with the following.
ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range
ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range
As mentioned here: https://gist.github.com/tomhopper/9076152#gistcomment-2624958 there is a difference between the two options:
#get ranges of the data
ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range
ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range
#get ranges of the plot axis
ggplot_build(obj)$layout$panel_params[[1]]$x.range
ggplot_build(obj)$layout$panel_params[[1]]$y.range
Here is a set of convenience functions to take a list of plots, extract the common y-axis range and replace it. I needed it because I used different data sets within one graph arranged via ggarange
:
require(ggplot2)
#get the visible scales from single plots
get_plot_view_ylimits <- function(plot) {
gb = ggplot_build(plot)
ymin = gb$layout$panel_params[[1]]$y.range[1]
ymax = gb$layout$panel_params[[1]]$y.range[2]
message(paste("limits are:",ymin,ymax))
list(ymin = ymin, ymax = ymax)
}
#change the limit of single plot, using list of limits
change_plot_ylimits <- function(plot, nlimits){
p <- plot + ggplot2:::limits(unlist(nlimits, use.names =FALSE),"y")
}
#adjust the scales of multiple plots
#take a list of plots, passes back adjusted list of plots
adjust_plots_shared_ylimits <- function(plotList) {
#read limits
first <- TRUE
for (plot in plotList) {
if (first) {
nlimits <- get_plot_view_ylimits(plot)
first <- FALSE
} else {
altLimits <- get_plot_view_ylimits(plot)
nlimits$ymin <- min(nlimits$ymin,altLimits$ymin)
nlimits$ymax <- max(nlimits$ymax,altLimits$ymax)
}
}
message(paste("new limits are:",nlimits$ymin,nlimits$ymax))
#adjust limits
lapply(plotList,change_plot_ylimits,nlimits)
}
I thought this might also be useful for others.
참고URL : https://stackoverflow.com/questions/7705345/how-can-i-extract-plot-axes-ranges-for-a-ggplot2-object
'programing' 카테고리의 다른 글
M_PI는 math.h에서는 작동하지만 Visual Studio의 cmath에서는 작동하지 않습니다. (0) | 2020.09.25 |
---|---|
Uri.ToString ()과 Uri.AbsoluteUri의 차이점은 무엇입니까? (0) | 2020.09.25 |
Node의 http.request ()에 시간 제한을 설정하는 방법은 무엇입니까? (0) | 2020.09.24 |
애플리케이션에 유효한 'aps-environment'자격 문자열이 없습니다. (0) | 2020.09.24 |
Eclipse에서 단일 JUnit 테스트 실행 (0) | 2020.09.24 |