更改一个堆叠条的字体颜色
Posted
技术标签:
【中文标题】更改一个堆叠条的字体颜色【英文标题】:Change font color of one stacked bar 【发布时间】:2021-11-04 14:50:07 【问题描述】:如何仅更改顶部堆叠条的字体颜色?
【问题讨论】:
如果您的问题是关于根据背景颜色更改标签颜色以增加对比度,请参阅例如Contrast between label and background: determine if color is light or dark 和其中的几个“链接”帖子。对于未来的问题,请考虑包含一些小玩具数据和代码,供人们尝试他们的解决方案。 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。 【参考方案1】:OP,以后尽量提供一个完整的代表性例子。不管怎样,你的情节几乎被复制了:
library(ggplot2)
df <- data.frame(
value=c(12, 17, 14, 46, 41, 66, 14, 14, 14, 27, 28, 7),
category=rep(LETTERS[1:4], each=3),
gender=rep(c("Male", "Female", "Other"), 4)
)
ggplot(df, aes(x=gender, y=value)) +
geom_col(aes(fill=category), position=position_stack(vjust=0.5, reverse = TRUE)) +
geom_text(
aes(label=paste(value,"%")), size=5,
position=position_stack(vjust=0.5)) +
scale_fill_viridis_d()
要根据标准应用不同的颜色,您只需将该标准直接指定给geom_text()
中的color=
美学。在这里,我将使用ifelse()
函数来定义何时更改颜色。这行得通,但这样做意味着我们正在动态计算,而不是将结果映射到我们的原始数据。由于选择颜色的方式不绑定到我们数据中的列,您需要在 aes()
函数之外定义此颜色。因此, geom_text()
函数相应修改:
geom_text(
aes(label=paste(value,"%")), size=5,
color=ifelse(df$category=="A", 'white', 'black'),
position=position_stack(vjust=0.5))
再次注意 - 我在 aes()
之外定义了 color=
。另一种方法是将文本的颜色映射到category
,然后使用scale_color_manual()
手动定义颜色。在aes()
之外使用ifelse()
实际上更简单。 (另外,position_stack()
在处理文本几何时非常不稳定......)。
【讨论】:
【参考方案2】:你需要从scale_fill_
中选择一个函数,这里有一个列表
[1] "scale_fill_binned" "scale_fill_brewer" "scale_fill_continuous"
[4] "scale_fill_date" "scale_fill_datetime" "scale_fill_discrete"
[7] "scale_fill_distiller" "scale_fill_fermenter" "scale_fill_gradient"
[10] "scale_fill_gradient2" "scale_fill_gradientn" "scale_fill_grey"
[13] "scale_fill_hue" "scale_fill_identity" "scale_fill_manual"
[16] "scale_fill_ordinal" "scale_fill_steps" "scale_fill_steps2"
[19] "scale_fill_stepsn" "scale_fill_viridis_b" "scale_fill_viridis_c"
[22] "scale_fill_viridis_d"
如果您想手动设置它们,请使用 scale_fill_manual
,其中包含颜色矢量,并将它们添加到您的 ggplot 代码中
示例
代码
mtcars %>%
count(cyl,gear = as.factor(gear)) %>%
ggplot(aes(cyl,n,fill = gear))+
geom_col(position = "fill")+
scale_fill_manual(values = c("red",'purple',"darkgoldenrod2"))
输出
【讨论】:
以上是关于更改一个堆叠条的字体颜色的主要内容,如果未能解决你的问题,请参考以下文章