以对数刻度显示范围

时间:2021-03-15 13:41:31

标签: r ggplot2

我想包括 y_val 的可能值范围,其中上限和下限可用。我尝试使用 geom_errorbar ,它适用于连续刻度但不适用于对数刻度。我该如何解决这个问题?

x_val <- c(2, 3, 6, 12, 24)
y_val<-c(1,3,15,25,30) 
y_upper<- c(1.2,3.2, 16, 28,40)
y_lower <-c(0.8,2.9, 12, 22,25)

df <- data.frame(x_val=x_val,y_val=y_val,y_upper=y_upper,
                 y_lower=y_lower)

ggplot(data=df,aes(x=x_val,y=y_val))+
  geom_line()+
  geom_point()+
  geom_errorbar(ymin = y_lower, ymax = y_upper)+
  scale_y_log10()+
  scale_x_log10()

2 个答案:

答案 0 :(得分:3)

根据 this 个答案,您需要 coord_trans(y = "log10") 而不是 scale_y_log10()

library(ggplot2)

x_val <- c(2, 3, 6, 12, 24)
y_val<-c(1,3,15,25,30) 
y_upper<- c(1.2,3.2, 16, 28,40)
y_lower <-c(0.8,2.9, 12, 22,25)

df <- data.frame(x_val=x_val,
                 y_val=y_val,
                 y_upper=y_upper,
                 y_lower=y_lower)

ggplot(data=df,aes(x=x_val,y=y_val))+
  geom_line()+
  geom_point()+
  geom_errorbar(ymin = y_lower, ymax = y_upper)+
  coord_trans(y="log10", x = "log10", ylim = range(c(y_upper, y_lower)))

reprex package (v1.0.0) 于 2021 年 3 月 16 日创建

答案 1 :(得分:0)

一个技巧可能是将 geom_segmentarrow 设置结合使用,该设置由调用 arrow() 产生。

library(ggplot2)

ggplot(data=df,aes(x=x_val,y=y_val))+
  geom_line()+
  geom_point()+
  geom_segment(aes(xend = x_val, y = y_lower, yend = y_upper),
               arrow = arrow(angle = 90, ends = "both")) +
  scale_y_log10()+
  scale_x_log10()

enter image description here