我有一个~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比例。我不知道该怎么办?
有什么想法吗?
编辑:回应DrDom:
尝试添加scale_y_log10(breaks=c(0,10,100,1000))
。这样做的结果是:
执行以下操作的输出:
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之间的勾选也会很好?
答案 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_log10
与scale_y_continuous
包中的日志转换结合使用,而不是使用scales
。当您使用log1p
转换时,您还可以在休息时加入0
:scale_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")