使用ggplot2在log10比例上进行小调整

时间:2014-07-09 15:35:50

标签: r graph ggplot2

我有一个~108行数据的数据帧,共7列。我使用这个R脚本制作一个盒子图:

ggplot(expanded_results, aes(factor(hour), dynamic_nox)) +
  geom_boxplot(fill="#6699FF", outlier.size = 0.5, lwd=.1) +
  scale_y_log10() +
  stat_summary(fun.y=mean, geom="line", aes(group=1, colour="red")) +
  ylab(expression(Exposure~to~NO[x])) + 
  xlab(expression(Hour~of~the~day)) +
  ggtitle("Hourly exposure to NOx") +
  theme(axis.text=element_text(size=12, colour="black"),
        axis.title=element_text(size=12, colour="black"),
        plot.title=element_text(size=12, colour="black"),
        legend.position="none")

图表看起来像这样。它非常精细,但是在Y轴顶部有一个值会更好。我猜它应该是1000,因为Y轴是log10比例。我不知道该怎么办?

enter image description here

有什么想法吗?

编辑:回应DrDom: 尝试添加scale_y_log10(breaks=c(0,10,100,1000))。这样做的结果是:

enter image description here

执行以下操作的输出: scale_y_log10(breaks=c(0,10,100,1000), limits=c(0,1000))

错误:

Error in seq.default(dots[[1L]][[1L]], dots[[2L]][[1L]], length = dots[[3L]][[1L]]:
'from' cannot be NA, NaN or infinite

向Jaap提出以下代码:

library(ggplot2)
library(scales)

ggplot(expanded_results, aes(factor(hour), dynamic_nox)) +
  geom_boxplot(fill="#6699FF", outlier.size = 0.5, lwd=.1) +
  stat_summary(fun.y=mean, geom="line", aes(group=1, colour="red")) +
  scale_y_continuous(breaks=c(0,10,100,1000,3000), trans="log1p") +
  labs(title="Hourly exposure to NOx", x=expression(Hour~of~the~day), y=expression(Exposure~to~NO[x])) +
  theme(axis.text=element_text(size=12, colour="black"), axis.title=element_text(size=12, colour="black"),
        plot.title=element_text(size=12, colour="black"), legend.position="none")

它生成此图表。我做错了什么吗?我还缺少'1000'刻度标签?如果大多数数据是在哪里,那么10和100之间的勾选也会很好?

enter image description here

2 个答案:

答案 0 :(得分:4)

您可以通过将参数breaks=添加到scale_y_log10()来修改日志比例,只有不应该有0值,因为从这些值中也会计算日志。

df<-data.frame(x=1:10000,y=1:10000)
ggplot(df,aes(x,y))+geom_line()+
      scale_y_log10(breaks=c(1,5,10,85,300,5000))

答案 1 :(得分:3)

您也可以将scale_y_log10scale_y_continuous包中的日志转换结合使用,而不是使用scales。当您使用log1p转换时,您还可以在休息时加入0scale_y_continuous(breaks=c(0,1,3,10,30,100,300,1000,3000), trans="log1p")

您的完整代码将如下所示(请注意我还合并了labs中的标题参数):

library(ggplot2)
library(scales)

ggplot(expanded_results, aes(factor(hour), dynamic_nox)) +
  geom_boxplot(fill="#6699FF", outlier.size = 0.5, lwd=.1) +
  stat_summary(fun.y=mean, geom="line", aes(group=1, colour="red")) +
  scale_y_continuous(breaks=c(0,1,3,10,30,100,300,1000,3000), trans="log1p") +
  labs(title="Hourly exposure to NOx", x=expression(Hour~of~the~day), y=expression(Exposure~to~NO[x])) +
  theme(axis.text=element_text(size=12, colour="black"), axis.title=element_text(size=12, colour="black"),
        plot.title=element_text(size=12, colour="black"), legend.position="none")