使scale_y_log10的标记为0.01,0.1,1

Ama*_*eur 16 r ggplot2

我编写了以下代码来制作情节

pd<- position_dodge(.2)  # # move them .05 to the left and right
pm25 <- ggplot(data, aes(x=CombSEG, y=conc,shape=A,color=A, lty=A,     group=A)) + 
geom_point() +
geom_line() +
geom_errorbar(aes(ymin=conc-se, ymax=conc+se),
              width=.1, position=pd) +
theme_bw()+
limits(c(0
scale_y_log10(breaks=c(0.01,0.1,1),labels=c(0.01,0.1,1))
Run Code Online (Sandbox Code Playgroud)

自动刻度尺为10 ^ -1.8,10 ^ -1.6,10 ^ -1.4 ... 10 ^ -0.4.我真的希望最低刻度为0.01,最高刻度为1.

谢谢您的帮助.

编辑:这是我尝试你的代码后情节的样子. 在此输入图像描述

mat*_*fee 17

使用breakslabels参数scale_y_log10(在这里阅读它们).

# make up some sample data
df <- data.frame(x=1:100,y=10^-(2*runif(100)))
ggplot(df,aes(x=x,y=y)) + geom_point() + scale_y_log10()
Run Code Online (Sandbox Code Playgroud)

好像: 在此输入图像描述

然后,要修改log10比例以在.01,.1和1处具有自定义中断,请使用以下breaks参数:

ggplot(df,aes(x=x,y=y)) + geom_point() + scale_y_log10(breaks=c(.01,.1,1))
Run Code Online (Sandbox Code Playgroud)

好像: 在此输入图像描述

最后,如果您希望标签也是0.1,.1和1,请使用以下labels参数:

ggplot(df,aes(x=x,y=y)) + geom_point() + 
          scale_y_log10(breaks=c(.01,.1,1),labels=c(.01,.1,1))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • @TranHuynh如果您的数据范围从0.1到0.7,并且您手动将中断设置为0.01,0.1和1,为什么您可能期望看到除0.1之外的任何中断?如果按照要求完成并提供了可重复的示例,我们可以从一开始就告诉您也将`limits = c(0,1)`传递给`scale_y_log10`.我们不介意读者. (2认同)

Thi*_*rry 17

使用coord_trans()而不是scale()

df <- data.frame(x=1:100,y=10^-(2*runif(100)))
ggplot(df,aes(x=x,y=y)) + geom_point() + coord_trans(y = "log10")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述