更改一个堆叠条的字体颜色

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"))

输出

【讨论】:

以上是关于更改一个堆叠条的字体颜色的主要内容,如果未能解决你的问题,请参考以下文章

VC/MFC怎么改变状态栏字体颜色和大小

placeholder的字体样式改变,滚动条的颜色改变,ios日期兼容

手机字体颜色怎么更改?

cad里怎么更改字体颜色

如何更改vim中的字体颜色

如何更改Android Studio的代码字体和颜色