ggplot2 객체에 대한 플롯 축의 범위를 추출하려면 어떻게 해야 합니까?
나는 다음의 목표를 가지고 있습니다.ggplot2
,말합니다myPlot
x축과 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)
,어디에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
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 |