【问题标题】:Bar plot in ggplot2 with ordered bars and manually specified coloursggplot2中的条形图,带有有序条形和手动指定的颜色
【发布时间】:2017-05-16 20:16:47
【问题描述】:

我想用 ggplot2 生成一个简单的条形图,条形按 y 值排序,颜色手动定义。这是我尝试过的:

df <- data.frame(c("a", "b", "c"), c(2, 3, 1))
colnames(df) <- c("shop", "revenue")
ggplot(data = df, aes(x = reorder(shop, revenue), y = revenue, fill = shop)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("blue", "yellow", "black")) +
  theme_minimal()

问题是:颜色排序错误(黑色、蓝色和黄色,而不是scale_fill_manual 中所述的蓝色、黄色和黑色)。如何解决这个问题?

【问题讨论】:

  • 您可以手动将颜色映射到 scale_fill_manual 中的特定值,如下所示: scale_fill_manual(values = c("c" = "blue", "a" = "yellow", "b" = "black "))。
  • 试试scale_fill_manual(values = setNames(c("blue", "yellow", "black"), df$shop[order(df$revenue)]))
  • 重新排序 fill 以及 x
  • @Richard, Jeroen:你的建议都有效,谢谢!

标签: r ggplot2 bar-chart


【解决方案1】:

使用scale_fill_manual,您可以为数据中的级别分配颜色。 同时,您在aes 的定义中使用reorder(shop, revenue),它将数据从左到右按升序排列。颜色“蓝色”的第三个也是最后一个定义被分配给 c,它现在位于左侧,因为它是最小的。

你可以用这个时间来规避这个:

ggplot(data = df, aes(x = reorder(shop, revenue), y = revenue, fill = shop)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("yellow", "black", "blue")) +  # CHANGED
  theme_minimal()

或者正如@JeroenBoeye 建议的那样:

ggplot(data = df, aes(x = reorder(shop, revenue), y = revenue, fill = shop)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("c" = "blue", "a" = "yellow", "b" = "black")) + # Jeroen Boeye's suggestion
  theme_minimal()

请告诉我这是否能解决您的问题。

【讨论】:

  • 我认为你没有抓住重点。很明显,您可以手动重新排列颜色。更深层次的问题是您如何在重新排序后分配颜色。
  • @PierreLafortune 你是对的。鉴于此,Jeroen Boeye 的建议是一个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 2018-08-30
  • 2014-10-30
相关资源
最近更新 更多