首页 > 解决方案 > ggplot对单个变量的colorbrewer尺度的逆序

问题描述

library(tidyverse)
library(RColorBrewer)
mtcars %>% 
  count(cyl) %>% 
  ungroup() %>% 
  ggplot(aes(cyl, n, color = "A")) + 
  geom_line(size = 2) + 
  # scale_color_brewer(palette = "Accent", guide = "none") +  # line 8
  scale_color_brewer(palette = "Accent", direction = -1, guide = "none") + 
  NULL

我认为direction = -1ggplot 的论点会反转色标。无论我打开还是关闭这个参数,我仍然会得到下图所示的相同图。

方向1

我认为不讨论这个参数会给我上面显示的图表,因为绿色是 的第一种颜色Accent。如果我打开direction = -1参数,我希望geom_line()使用最后Accent一种颜色,即深灰色,但这不是发生的情况。

口音

如何正确反转色阶以首先显示深灰色?我知道我可以简单地使用geom_line(aes(color = "dark grey")),但我宁愿回答这个问题,而不是那种“最简单的解决方案”。

标签: rggplot2colorbrewer

解决方案


direction参数采用分配给比例的颜色并翻转它们(因此分配给比例中最后一个值的颜色分配给第一个)。它不会更改分配给比例颜色。您看不到任何效果,因为颜色只有一个可能的值,因此反转比例不会导致任何变化。比较这两个例子:

ggplot(diamonds, aes(x = price, fill = cut)) +
    geom_histogram(position = "dodge", binwidth = 1000) +
    scale_fill_brewer(palette='Accent')

在此处输入图像描述

ggplot(diamonds, aes(x = price, fill = cut)) +
    geom_histogram(position = "dodge", binwidth = 1000) +
    scale_fill_brewer(palette='Accent', direction = -1)

在此处输入图像描述

您可以看到选择的颜色是相同的,只是分配给它们的顺序发生了cut变化。

如果要更改所选颜色的顺序,可以使用scale_color_manual,使用 传入调色板brewer.pal,然后根据需要翻转和/或子集:

mtcars %>% 
    count(cyl) %>% 
    ungroup() %>% 
    ggplot(aes(cyl, n, color = "A")) + 
    geom_line(size = 2) + 
    scale_color_manual(values = rev(brewer.pal(8, 'Accent')))

在此处输入图像描述


推荐阅读