我正在尝试使用ggplot2绘制一个直方图,该直方图对于x的不同间隔具有不同的色条。

在参考how to define fill colours in ggplot histogram?中的Hadley解决方案后,我得出以下结论:

library(ggplot2)

set.seed(1)
a <- seq(from=1, to=10000)
b <- rnorm(10000)
c <- data.frame(a,b) # Convert to DF

ggplot(c, aes(x=b, fill=cut(..x.., breaks=c(-2, -1, -0.5, 0, 0.5, 1, 2)))) +
  geom_histogram(binwidth=0.1, color="steelblue")


但是,当我尝试将断点定义为要传递给aes()的变量MyBreaks时,出现错误:“ cut.default(x,breaks = MyBreaks)错误:未找到对象'MyBreaks'。 ”

我的代码生成错误:

MyBreaks <- c(-2, -1, -0.5, 0, 0.5, 1, 2)
ggplot(c, aes(x=b, fill=cut(..x.., breaks=MyBreaks))) +
  geom_histogram(binwidth=0.1, color="steelblue")


我对其他用户遇到的类似错误进行了一些研究,但是这些解决方案似乎对我不起作用。

例如,How to use earlier declared variables within aes in ggplot with special operators (..count.., etc.)中的解决方案给出了:“错误:美学必须为长度1,或与dataProblems:MyBreaks相同的长度”。我的代码是:

ggplot(c, aes(x=b, MyBreaks1=MyBreaks, fill=cut(..x.., breaks=MyBreaks1))) +
  geom_histogram(binwidth=0.1, color="steelblue")


然后,我在Local Variables Within aes中尝试了该解决方案,但这给出了相同的结果:“ cut.default(x,breaks = MyBreaks)中的错误:找不到对象'MyBreaks'”。我的代码是:

.e <- environment()
ggplot(c, aes(x=b, fill=cut(..x.., breaks=MyBreaks)), environment = .e) +
  geom_histogram(binwidth=0.1, color="steelblue")


我之前已经做过基础编程,但是R的学习曲线实在太陡了!如果有人可以帮助,将不胜感激!

提前致谢!

最佳答案

这是来自Roland在此处How to use earlier declared variables within aes in ggplot with special operators (..count.., etc.)的评论。

ggplot(c, aes(x=b, fill=cut(..x.., breaks=get("MyBreaks", envir=.GlobalEnv)))) +
geom_histogram(binwidth=0.1, color="steelblue")

08-20 00:28