ggplot2 geom_point 用 aes 填充只显示黑色

ggplot2 geom_point with aes fill only displays black

我在使用 geom_point 显示不同的填充颜色时遇到问题,只显示黑色。我知道我可以使用 color 来显示不同的颜色,但它似乎不适用于 geom_segment。这是我得到的示例,其中点仅显示为黑色,而不是 scale_fill_manual 中指定的填充值。以其他方式显示相同的图和不同的两个图例,一种用于颜色,一种用于具有不同颜色的形状。谢谢!

ggplot(mtcars, aes(x=factor(gear), mpg)) +
  geom_segment(aes(x=factor(gear), xend=factor(gear), y = mpg, yend = mpg+1, color = factor(cyl)), size = 4) +
  geom_point(aes(fill = factor(carb))) +
  scale_color_manual(values = c('red', 'green', 'blue')) +
  scale_fill_manual(values = c('pink', 'light green', 'light blue', 'yellow', 'purple', 'orange')) +
  coord_flip()

The plot I get

geom_pointgeom_segment,这两个都需要scale_color_manual来改变颜色,这当然是不可能的。但是,如果您使用开放符号(可以填充),则可以将一个因素映射到填充,将另一个因素映射到颜色。因此,它们可以在不同的尺度上各自拥有自己的颜色。因此,对于 geom_point,我将形状指定为 pch = 21

library(ggplot2)
ggplot(mtcars, aes(x = factor(gear), mpg)) +
  geom_segment(aes(
    x = factor(gear),
    xend = factor(gear),
    y = mpg,
    yend = mpg + 1,
    color = factor(cyl)
  ),
  size = 4) +
  geom_point(aes(fill = factor(carb)), pch = 21) +
  scale_color_manual(values = c('red', 'green', 'blue')) +
  scale_fill_manual(values = c('pink', 'light green', 'light blue', 'yellow', 'purple', 'orange')) +
  coord_flip()

使用 scale_color_manual 还是 scale_fill_manual 取决于 geom 类型。根据 "Change Colors Manually":

A custom color palettes can be specified using the functions:

  • scale_fill_manual() for box plot, bar plot, violin plot, etc
  • scale_color_manual() for lines and points

但是不同的绘图符号允许您绕过这些规范。