在ggplot2(r)中定义单个颜色框图/点的图例和颜色

时间:2018-01-22 14:35:34

标签: r ggplot2

我正确情节的快照,以及对其行为的质疑。

A snapshot of my correct plot, and question on its behaviour.

我遇到的问题如下:我有两个数据集(在这种情况下,我使用高图中的口袋妖怪数据集作为源,并从中生成第二个数据集)。

我想按类型绘制一些平均值(但是在单一颜色中),然后在顶部添加相同类别的第二系列点,再次以单一颜色添加。绘制图表很简单,但显示图例已经证明不是。

以下是我对这个问题的最终解决方案,它给出了我追求的情节行为。我想知道的是为什么我不能使用scale_color_manual对我的点做同样的事情(即改变我的点的颜色,并覆盖我的图例的标题),就像我对带有scale_fill_manual的框一样?如果我从创建点的行中删除colour="orange",即使我包含我认为应将其更改为黄色的第二段代码,它们也会恢复为默认黑色。在这种情况下,scale_color_manual不会引用我的观点,如果是,为什么?

library(highcharter)
library(dplyr)

myData <- pokemon
myData <- myData %>% mutate(type_1 = factor(type_1))

myList2 <- myData %>% 
  group_by(type_1) %>%
  summarise(
    meanHeight = mean(height),
    meanWeight = mean(weight),
    meanAttack = mean(attack)
  )

ggplot(data = pokemon, aes(x=factor(type_1), y=defense)) + 
  geom_boxplot(aes(fill="")) +
  geom_point(data=myList2, aes(x=type_1, y=meanAttack, shape=""), colour = 
"orange") +
  coord_flip() +
     theme(panel.background = element_blank()) +
     labs(x = "Pokemon Main Type", y = "Defense value", title = "My pokemon 
plot", subtitle = "with a subtitle",
          fill = "Type", shape = "Mean Attack",
          caption = "data (c) the highcharter package") +
  guides(fill=guide_legend(override.aes=list(shape=""))) +
  scale_fill_manual('Pokemon types',
                    values = 'lightblue',  
                    guide = guide_legend(override.aes = list(alpha = 1)))

什么都不做的代码是:

 + scale_color_manual('mylegend', ## this does nothing
                     values = c('yellow'),
                     guide = guide_legend(title="this", override.aes = 
list(alpha = 1)))

感谢您的任何见解。

1 个答案:

答案 0 :(得分:0)

这里的主要问题是aes()scale_xx命令之间的连接。当您将数据框的一列传递给美学时,例如aes(fill = type_1),ggplot会检查该列的所有值,以确定应如何表示填充。在这种情况下,“type_1”是分类的,因此ggplot将应用其默认的分类色调比例及其默认着色。要更改这些颜色,您可以使用scale_fill_manual并指定颜色列表。

相反,如果您只想将数据片段设置为一种颜色,则应在aes()之外指定,geom_point(color = 'orange')。无需包含缩放功能。但是既然想要在你的图例中出现标签,我们需要稍微欺骗ggplot:

ggplot(data= pokemon, aes(x = factor(type_1), y = defense)) +
  geom_boxplot(fill = 'lightblue') +
  geom_point(data = myList2, aes(x = type_1, y = meanAttack, color = 'Mean Attack')) +
  coord_flip() +
  scale_color_manual(values = 'orange') +
  labs(color = NULL, x = 'Pokemon Main Type') +
  theme_bw()

在这里,我们将ggplot传递给一个具有一个值的“审美”:“平均攻击”。由于颜色现在与美学相关联,因此您可以在scale_color_manual中对其进行影响,并且它会在图例中显示,并进行适当标记。enter image description here