ggplot log scale y轴直线

时间:2017-05-15 19:16:50

标签: logging ggplot2 scale

我遇到了一个简单的ggplot麻烦,我需要在其中加入一个对数刻度y轴。我明白ggplot是正确的,一旦我的轴有对数刻度就有弯曲线,但是我需要这些线来连接我的数据线性地指出。

这是我的代码:

forexample<-transform(example, EXP=factor(EXP, levels=unique(EXP)))
plot<-ggplot(forexample, aes(x=EXP, y=concentration, shape=sample)) 
+ stat_summary(aes(group = sample), fun.y = mean, geom = 'line', alpha=1, size=0.5) 
+ stat_summary(aes(group = sample), fun.y = mean, geom = 'point',    alpha=1, size=4) +  
theme_bw() + 
coord_trans(y = "log10") 

我的数据结构如下:

sample   concentration   EXP 
H        0.08            Ex1
H        0.07            Ex2
M        2.00            Ex1 
M        0.50            Ex2
R        0.01            Ex1

...

我在问题“yg轴的ggplot2对数刻度导致曲线”中尝试了Zoltáns的建议,但它对我没有用。 (ggplot2 log scale of y axis causing curved lines

如果有人可以帮助我,我真的很高兴! 谢谢:)

enter image description here

1 个答案:

答案 0 :(得分:3)

这是coord_trans的预期行为,与scale_y_log10不同。另见:https://stackoverflow.com/a/25257463/3330437

require(dplyr)   # for data construction
require(scales)  # for modifying the y-axis

data_frame(x = rep(letters, 3), 
           y = rexp(26*3), 
           sample = rep(c("H", "M", "R"), each = 26)) %>% 
  ggplot(aes(x, y, shape = sample))  + theme_bw() +
  geom_point() + geom_path(aes(group = sample)) + 
  scale_y_log10()

enter image description here

如果您希望y轴标签和网格线看起来更像coord_trans默认值,请使用scale_y_log10(breaks = scales::pretty_breaks())

enter image description here