【问题标题】:Making fill colors match in ggplot在ggplot中使填充颜色匹配
【发布时间】:2019-08-07 13:36:02
【问题描述】:

我正在制作多个条形图。我正在根据因子的水平使用填充颜色代码。因子名称为 Percentile.Category,水平为 0-25、26-50、51-75、76-90、91-100。问题是并非所有图表都具有因子的全部 5 个水平,所以当我使用调色板时,因子在不同图表中的颜色并不相同。

这是我必须生成绘图的代码示例。我基本上用不同的数据框复制了相同的东西来生成多个图:

UC %>% 
  ggplot(aes(x = reorder(Provider.Name, Score), y = Score)) +
  geom_bar(stat = "identity", aes(fill = Percentile.category)) +
  coord_flip() +
  ggtitle("Urgent Care Percentiles for 'Would Recommend Facility'") +
  ylab("Would You Recommend Top Box") +
  xlab("Provider") +
  scale_fill_brewer(palette = "Spectral") +
  geom_text(aes(label = Score), size = 2.5, vjust = .4, hjust = 1.2, fontface = "bold")

现在,如果特定数据框缺少某个因子级别的任何数据,则每个因子级别的颜色都会发生变化。我想要的是因子级别的颜色在不同的图中匹配。例如,51-75 在所有颜色中都是相同的颜色。

【问题讨论】:

  • 不确定是否有其他方法可以做到这一点,但我认为您需要为您的地块设置手动比例?那会奏效的。
  • 预先设置颜色:cols <- c("0-25" = "red", "26-50," = "pink", ...),如果您用完了颜色创意,请添加scale_color_manual(values = cols):google.com/…
  • 检查scale_color_manual(values = c(...), drop=F)中的drop参数并将其设置为FALSE
  • 你能分享一个数据样本吗?

标签: r ggplot2


【解决方案1】:

确保您用作fill 的变量在所有数据框中具有相同的级别。我会使用dplyr 来提前转换变量:

library(dplyr)
library(ggplot2)
lvls <- c('0-25', '26-50', '51-75', '76-90', '91-100')
some_df %>%
  mutate(Score = factor(Score, levels = lvls)) %>%
  ggplot(<etc>) %>%
  <the rest of your code>

【讨论】:

  • 这些建议帮助我解决了这个问题!。我可以使用 mutate 函数预先设置因子的水平。当不是所有级别都在数据集中时它仍然不起作用,所以我使用了 drop 参数。现在它正在按我的需要工作。谢谢!!
  • 不客气!请考虑将我的答案标记为解决方案并对其进行投票,以便其他人受益:)
  • 我将其标记为解决方案。我刚开始讨论堆栈溢出(这是我的第一篇文章),所以在我获得至少 15 个声望点之前不会显示我的赞成票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
相关资源
最近更新 更多