我的目的是在一个图形中增加标签的大小,这也许有点不寻常,因为。
我希望用红色来绘制零值,并使用了... ...
aes (color = mm3 == 0)) +
scale_colour_manual(values = c(
TRUE= "red",
FALSE= 'black'))
来完成这个任务。
我试过使用
这似乎没有任何效果。而且
这增加了标签的大小,但影响了图形的着色,并给图形增加了一个不需要的图例。
这就是代码。
ggplot(Rodeococha, aes(x=`Age BP`,y=mm3)) +
geom_bar(size=1,linetype=1,stat="identity", aes (color = mm3 == 0)) +
scale_colour_manual(values = c(`TRUE` = "red",`FALSE` = 'black')) +
scale_x_continuous(limits=c(0, 8000), breaks=c(0,1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000)) +
scale_x_reverse() +
ggtitle("Charcoal Abundance") +
labs(y= "Volume (mm3/cm3)", x = "Time(yrs. BP)") +
theme_ipsum()+
theme(legend.position = "none") +
coord_flip()`
首先,你可以通过分享一些数据--哪怕是一个虚数据集--来做一个最小的可重复的例子。 无论如何,这里有一个例子,希望能向你展示两种可能有效的方法。 其中一种比另一种更值得推荐(因为它使用了一些Tidy Data原则),但两者确实能得到同样的结果。
两者的数据集都是。
df <- data.frame(x=1:100, y=rnorm(100))
# basic point plot:
ggplot(df, aes(x,y)) + geom_point()
假设我们的目标是绘制相同的图,但在点上着色,使负的y值为蓝色,正的y值为红色。 我们该如何做呢?
你可以像你建议的那样,用你的代码在线评估。 它是可行的,但要得到同样的结果就比较复杂,而且有点笨拙。 但使用内联表达式确实有效(如果你使用这种方法,我建议使用 aes(color= eval(...))
),但这意味着你有更多的工作要在后端使用 scale_color_manual
. 最好是用 ifelse()
,它让你可以直接在 aes()
功能。
ggplot(df, aes(x,y)) +
geom_point(aes(color=ifelse(y<0,'Small Stuff', 'Big Stuff'))) +
scale_color_manual("Type of Stuff", values=list('Big Stuff'='red','Small Stuff'='blue'))
注意: scale_color_manual
函数用于设置图例的名称。 因为我知道我的标签名称,因为使用了 ifelse()
我知道,我也可以正确设置我的颜色。
更好的方法是围绕使用 dplyr
, tidyr
和一般所谓的 整洁数据原则. 这种方法建议你在数据集中添加一列,以便以后绘图时使用。 这样就 "安全 "多了,这样你就不会把数据准备和绘图混为一谈,以后绘图就容易多了。 这里我们先调整数据集。
df$stuff <- ifelse(df$y < 0, 'Small Stuff', 'Big Stuff')
然后绘制函数是这样的
ggplot(df, aes(x,y)) +
geom_point(aes(color=stuff)) +
scale_color_manual("Type of Stuff", values=list('Big Stuff'='red', 'Small Stuff'='blue'))
在这种情况下,两种方法的代码量是差不多的。 在比较复杂的例子中,一般来说,Tidy的方法比较好,但这里可以选择任何一种路线。
至于应用在你的系统中吗......不分享数据集和图集,很难说。 只是图例的名称吗? 你可以在你的 scale_color_...
功能或与 labs(color=...
.