ggplot2 객체에 대한 플롯 축의 범위를 추출하려면 어떻게 해야 합니까?
나는 다음의 목표를 가지고 있습니다.ggplot2,말합니다myPlotx축과 y축의 범위를 식별하려면 어떻게 해야 합니까?
그래프의 크기를 조정하고 축의 범위를 수정하는 등의 작업을 수행할 수 있기 때문에 데이터 값 범위의 단순 배수는 아닌 것 같습니다. findFn(부터)sos)와 구글은 축의 범위를 설정하는 방법 외에는 관련 결과를 표시하지 않는 것 같습니다.
사용 중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
최신 버전의 ggplot2에서 이 정보는 다음의 출력에서 찾을 수 있습니다.ggplot_build(p),어디에pggplot 객체입니다.
이전 버전의 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
2018년 11월 업데이트
현재ggplot2 버전 3.1.0은 다음과 같습니다.
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
편의성 기능:
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)
다음 업데이트까지...
다양한 기능 제공
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년 8월 기준으로 다음과 같이 x축 및 y축 범위를 추출합니다.
ggplot_build(obj)$layout$panel_scales_x[[1]]$range$range ggplot_build(obj)$layout$panel_scales_y[[1]]$range$range
여기에 언급된 것처럼 https://gist.github.com/tomhopper/9076152#gistcomment-2624958 은 두 가지 옵션 사이에 차이가 있습니다.
#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
다음은 그림 목록을 만들고 공통 Y축 범위를 추출하여 교체하는 편의 함수 집합입니다.다음을 통해 배열된 하나의 그래프 내에서 서로 다른 데이터 세트를 사용했기 때문에 필요했습니다.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)
}
저는 이것이 다른 사람들에게도 유용할 것이라고 생각했습니다.
이것은 잠재적인 해결책입니다!그림의 레이아웃에서 축 한계를 변경하지 않으면 이 작업이 수행됩니다.기본적으로 그래프의 데이터 범위를 사용하므로 레이아웃 기능을 사용하는 것보다 데이터 필터링을 통해 축을 변경할 때 더 잘 작동합니다.
여기 암호가 있습니다!
# load ggplot2
library(ggplot2)
# A basic scatterplot
p <-ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width, color=Species)) +
geom_point(size=6)
# p$data returns the dataset used to create the plot (iris)
head(p$data)
# Choose plot variable you want range for
range(p$data[,"Sepal.Length"]) # * c(0.95, 1.05)
완벽한 솔루션은 아니지만 쉽고 빠르게 해결할 수 있습니다. 도움이 되었기를 바랍니다!
업데이트:
ggplot2버전 3.3.2는 이제 다음 코드를 사용합니다.
xmin <- ggplot_build(myPlot)$layout$panel_params[[1]]$x_range[1]
xmax <- ggplot_build(myPlot)$layout$panel_params[[1]]$x_range[2]
언급URL : https://stackoverflow.com/questions/7705345/how-can-i-extract-plot-axes-ranges-for-a-ggplot2-object
'programing' 카테고리의 다른 글
| SQL Server의 모든 데이터베이스에 있는 모든 테이블의 열 이름을 찾는 방법 (0) | 2023.06.28 |
|---|---|
| 오류: R에서 함수 ...을(를) 찾을 수 없습니다. (0) | 2023.06.28 |
| SFTP 업로드 파일 권한이 거부되었습니다. (0) | 2023.06.28 |
| 관리자 및 phpmyadmin과 관련된 UTF-8 입력 문제 (0) | 2023.06.28 |
| Electron 및 TypeScript: 'fs'을(를) 확인할 수 없습니다. (0) | 2023.06.28 |