programing

데이터를 제거하지 않고 ggplot 2 축 제한(외부 한계): 확대/축소

newsource 2023. 7. 9. 11:12

데이터를 제거하지 않고 ggplot 2 축 제한(외부 한계): 확대/축소

ggplot에서 축 한계를 지정하면 외곽 점이 제거됩니다.점에 대해서는 괜찮지만 지정된 범위와 교차하는 선을 표시할 수 있지만 ggplot의range또는xlim/ylim메소드는 이를 제거합니다.외부 데이터를 제거하지 않고 플롯 축 범위를 지정하는 다른 방법이 있습니까?

예.

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)

Hadley는 99쪽에서 이것을 설명합니다; 그의 ggplot2 책 (1판)의 133, 또는 만약 당신이 2판을 가지고 있다면 160 - 161쪽에서.

문제는 당신 말대로limits척도 또는 설정 내부에서는 데이터가 제약을 받기 때문에 데이터가 버려집니다.실제 확대/축소(모든 데이터 유지)를 수행하려면 데카르트 좌표계(또는 다른 좌표계 https://ggplot2.tidyverse.org/reference/ #섹션-좌표-시스템) 내부에서 한계를 설정해야 합니다.자세한 내용은 http://docs.ggplot2.org/current/coord_cartesian.html 를 참조하십시오.

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

enter image description here

완성도를 높이기 위해 이 동작에 대한 시각적 가이드를 보여주는 가이드입니다.

df <- data.frame(
  trt = c( 2, 3, 3.8, 5, 6),
  resp = c( 2.5, 3, 3.8, 3, 3.8),
  upper = c( 3, 3.3, 4.5, 3.3, 4.5),
  lower = c( 2, 2.4, 3.4, 2.4, 3.4)
)

p <- ggplot() +
  geom_point(data = df, 
                aes(x = trt, 
                    y = resp)) +
  geom_errorbar(data = df, 
                aes(x = trt, 
                    y = resp, 
                    ymin = lower, 
                    ymax = upper), 
                width = 0) +
  coord_flip() +
  theme_bw() +
  theme(plot.margin = margin(0.5, 3, 0.5, 0.5, "cm"))

p

enter image description here

p + 
  scale_y_continuous(limits = c(1, 4)) 

enter image description here

p + 
  coord_flip(ylim = c(1, 4))

enter image description here

p + 
  coord_flip(ylim = c(1, 4),
             clip = 'off') 

enter image description here

언급URL : https://stackoverflow.com/questions/25685185/limit-ggplot2-axes-without-removing-data-outside-limits-zoom