答案here似乎应该让我到达我想要的地方,但我在尝试应用错误时无法调试错误。
这里有一些代码(工作正常)可以将两个分布一起绘制,然后放大'放大'裁剪其中一个发行版的最高栏。
data(iris)
#Round Sepal.Length for Binning
iris$Sepal.Length = round(iris$Sepal.Length)
#Drop versicolor rows so density plot comes out skewed like my data
iris <- iris[iris$Species!="versicolor",]
#Plot density plot, truncating 0.8 column at (setosa, 5)
p <-ggplot(iris, aes(x=Sepal.Length, y=..density.., fill=Species)) +
geom_histogram(binwidth=1, alpha=0.5, position = 'identity') +
coord_cartesian(ylim = c(0, 0.6))
p
到目前为止一切顺利。除非我添加下面的代码来注释裁剪条的真实高度
p + geom_text(data=as.data.frame(ggplot_build(p)$data),
aes(x=5, y=0.5, label = paste0("Bar Height: ", max(density))))
我收到错误
eval(expr,envir,enclos)中的错误:object&#39; Species&#39;找不到
这是as.data.frame(ggplot_build(p)$data)$density
0.10 0.80 0.10 0.00 0.00 0.00 0.02 0.54 0.32 0.12
答案 0 :(得分:2)
问题是您在fill
语句中将审美ggplot()
全局定义为Species。当您添加文本geom时,ggplot正在寻找&#34; Species&#34;确定第二个数据框中不存在的填充颜色。
您可以通过两种方式解决此问题:
将fill=Species
从ggplot
语句移至geom_histogram
语句:
p <-ggplot(iris, aes(x=Sepal.Length, y=..density..)) +
geom_histogram(binwidth=1, alpha=0.5, position = 'identity', aes(fill=Species)) +
coord_cartesian(ylim = c(0, 0.6))
或覆盖geom_text
来电中的填充美学:
p + geom_text(data=as.data.frame(ggplot_build(p)$data),
aes(x=5, y=0.5, fill='black', label = paste0("Bar Height: ", max(density))))
编辑:上面的图片是使用第二个选项生成的。正如你所看到的,ggplot添加了&#34; black&#34;作为传说中的第三个物种。要避免这种情况,请使用第一个选项。