Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot2在log10刻度上进行小刻度_R_Graph_Ggplot2 - Fatal编程技术网

R 使用ggplot2在log10刻度上进行小刻度

R 使用ggplot2在log10刻度上进行小刻度,r,graph,ggplot2,R,Graph,Ggplot2,我有一个约108m行数据的数据帧,共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")) +

我有一个约108m行数据的数据帧,共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轴是对数10标度。但我不知道该怎么做

有什么想法吗

编辑:响应DrDom:
尝试添加
scale\u y\u log10(breaks=c(0,101001000))
。这样做的结果是:

执行以下操作的输出:
scale\u y\u log10(断裂=c(0,101001000),极限=c(01000))

是一个错误:

Error in seq.default(dots[[1L]][[1L]], dots[[2L]][[1L]], length = dots[[3L]][[1L]]:
'from' cannot be NA, NaN or infinite
作为对Jaap的回应,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之间,那么在10和100之间打勾也不错


您可以通过将参数
breaks=
添加到
scale\u y\u 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))

df除了使用
scale_y_log10
之外,您还可以使用
scale_y_continuous
以及
scales
包中的日志转换。当您使用
log1p
转换时,您还可以在中断中包含
0
scale\u y\u continuous(中断=c(0,1,3,10,3010030010003000),trans=“log1p”)

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


尝试添加
scale_y_log10(breaks=c(0,101001000))
scale_y_log10(breaks=c(0,101001000),limits=c(01000))
Hi-DrDom。谢谢你的建议。结果被添加到我上面的帖子中。注意,数据看起来有点不同,因为再次运行图形创建大约需要20分钟,所以我只是使用了数据的一个子集进行演示。还没到那儿-(我已经编写了一个自动执行该操作的函数:我认为它应该读trans=“log10”而不是trans=“log1p”你能澄清一下吗?@TheRealJimShady你可以同时使用这两种方法。但是当你的
dynamic\u nox
的值为
0
时,这些观察结果将被排除在外。
log1p
将把
1
添加到值中,然后计算日志值。这样一来,
0
的值也将被包括在内。请参见Hi Jaap。再次感谢你的g向导。我已经在上面的问题中列出了你的建议。请看一眼好吗?我仍然缺少一些记号。不知道该怎么办?谢谢。@TheRealJimShady你能在你的问题()中包含你(部分)数据的
dput
?这将使我更容易诊断问题。我想我现在已经找到了答案。我已经做到了,而且似乎效果很好:scale_y__continuous(breaks=c(0,1010030010003000),trans=“log1p”,labels=c(0,1010030010003000))
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")