ggplot2 中用于扩展图例标签的默认颜色

Posted

技术标签:

【中文标题】ggplot2 中用于扩展图例标签的默认颜色【英文标题】:Default colors in ggplot2 for extended legend labels 【发布时间】:2018-12-07 07:18:39 【问题描述】:

我想参考一下问题:Force ggplot legend to show all categories when no values are present

我的情况类似,但我希望颜色为默认值。

我应该怎么做?

添加:

我仔细看了看,结果不幸的是,标签被改变了。

原始数据如下所示:

> str(mj)
'data.frame':   4393 obs. of  22 variables:
 $ OS_Gatunek       : Factor w/ 5 levels "Taraxacum ancistrolobum",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ PH_CreateDate    : Factor w/ 15 levels "2016-04-06","2016-04-19",..: 2 2 2 2 2 2 2 2 2 2 ...
 $ L_Ksztalt        : Factor w/ 3 levels "lancetowaty",..: 3 2 3 3 2 2 3 3 2 3 ...
 $ L_Symetria       : Factor w/ 3 levels "duża","mała",..: 1 3 1 3 2 3 2 2 2 1 ...
 $ L_Sfaldowanie    : Factor w/ 2 levels "brak","obecne": 1 1 1 2 2 1 1 2 1 1 ...
 $ KS_Ksz           : Factor w/ 3 levels "hełmiasty","strzałkowaty",..: 2 3 1 1 3 1 1 1 1 1 ...
 $ KS_KszWierz      : Factor w/ 5 levels "spiczasty","tępo spiczasty",..: 3 1 5 2 2 1 1 2 3 4 ...
 $ KS_KszKrGor      : Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 7 7 10 1 7 10 10 10 10 10 ...
 $ KS_KszKrDol      : Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 9 7 10 7 7 9 9 10 9 9 ...
 $ KS_Zab           : Factor w/ 2 levels "brak","obecne": 1 1 1 1 1 1 1 1 1 1 ...
 $ KS_TendTworzKlap : Factor w/ 2 levels "brak","obecna": 1 1 1 1 1 1 2 1 1 2 ...
 $ KB_Ustawienie    : Factor w/ 5 levels "odchylone","odgięte",..: 1 1 1 3 1 1 1 1 1 1 ...
 $ KB_Zakonczenie   : Factor w/ 5 levels "ostro spiczaste",..: 3 3 2 3 2 2 5 5 3 2 ...
 $ KB_KsztKrawGornej: Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 10 1 10 7 7 10 10 10 10 1 ...
 $ KB_KsztKrawDolnej: Factor w/ 10 levels "esowaty","odwrotnie esowaty",..: 9 7 10 7 2 10 9 2 9 1 ...
 $ KB_ZabkKrGornej  : Factor w/ 2 levels "brak","obecne": 2 1 1 1 1 1 1 2 1 1 ...
 $ KB_ZabkKrDolnej  : Factor w/ 2 levels "brak","obecne": 1 2 1 1 1 1 1 1 1 1 ...
 $ KB_TendDoTwKlap  : Factor w/ 2 levels "brak","obecna": 1 1 1 1 1 1 1 1 1 1 ...
 $ I_Ksztalt        : Factor w/ 3 levels "całe","postrzępione",..: 1 1 1 2 1 1 1 2 1 2 ...
 $ I_Wyw            : Factor w/ 2 levels "brak","obecne": 2 2 2 2 2 2 2 2 2 2 ...
 $ I_SmolWyb        : Factor w/ 2 levels "brak","obecne": 2 2 2 1 2 1 2 1 2 2 ...
 $ N_Zabarwienie    : Factor w/ 5 levels "cały czerwonawy lub różowy",..: 5 4 5 5 1 1 5 1 5 1 ...

而示例饼图的代码如下(原为:How to create a pie chart with percentage labels using ggplot2?):

> data <- mj %>% 
+     group_by(N_Zabarwienie) %>% 
+     count() %>% 
+     ungroup() %>% 
+     mutate(per=`n`/sum(`n`)) %>% 
+     arrange(desc(N_Zabarwienie))
> data$label <- scales::percent(data$per)
> ggplot(data=data)+
+     geom_bar(aes(x="", y=per, fill=N_Zabarwienie), stat="identity", width = 1)+
+     coord_polar("y", start=0)+
+     theme_void()+
+     geom_text(aes(x=1.3, y = cumsum(per) - per/2, label=label))

图表如下所示:Pie chart 1 - first code - all species

如果我按照 Benjamin Schlegel 的建议更改代码:

> data <- mj %>% 
+     group_by(N_Zabarwienie) %>% 
+     count() %>% 
+     ungroup() %>% 
+     mutate(per=`n`/sum(`n`)) %>% 
+     arrange(desc(N_Zabarwienie))
> data$label <- scales::percent(data$per)
> ggplot(data=data)+
+     geom_bar(aes(x="", y=per, fill=N_Zabarwienie), stat="identity", width = 1)+
+     coord_polar("y", start=0)+
+     theme_void()+
+     geom_text(aes(x=1.3, y = cumsum(per) - per/2, label=label)) +
+     scale_fill_discrete(labels = c("zielony do bladego bez czerwieni", "zewnątrz blady", "w środku różowy", "cały czerwonawy lub różowy", "błyszcząco purpurowy"), drop = FALSE)

此图表如下所示:Pie chart 2 - second code - all species

在第一个图表中,最常见的是“cały czerwonawy lub różowy”,这意味着所有红色或粉红色(它是叶柄的颜色),而在第二个图表中 - “zielony do Bladego bez czerwieni”这意味着绿色到没有红色的苍白。差别是天壤之别。

第一个版本是正确的。

> summary(mj$N_Zabarwienie)
      cały czerwonawy lub różowy                na zewnątrz blady 
                            2943                                1 
           purpurowy z połyskiem                  w środku różowy 
                               1                              716 
zielony do bladego bez czerwieni 
                             732

当我更改数据范围(仅针对其中一种物种)时,它仅显示图例的一部分(当前正在使用的图例)。

以下是所选物种(蒲公英)的示例图表(第一个代码)。Pie chart 3 - first code - Taraxacum ancistrolobum

这是同一组数据,但由第二个代码生成。Pie chart 4 - second code - Taraxacum ancistrolobum

这里第一个版本也是正确的。

> summary(jta$N_Zabarwienie)
      cały czerwonawy lub różowy                na zewnątrz blady 
                             163                                0 
           purpurowy z połyskiem                  w środku różowy 
                               0                               85 
zielony do bladego bez czerwieni 
                             163

我想把为不同物种制作的图表放在一起,然后进行比较。一个统一的传说对它来说是必不可少的。

所以我重复这个问题: 如何在所有图表上制作相同的图例,尽管数据范围不同,但使用默认颜色?

【问题讨论】:

不要使用scale_fill_manual 谢谢,但我应该使用哪个命令? 【参考方案1】:

scale_fill_manual,用于您喜欢的问题,在定义颜色时使用。如果你想要默认颜色,如果你的变量是离散的,你可以使用scale_fill_discrete;如果你的变量是数字,你可以使用scale_fill_continuous

另一个问题中指定 colos 的示例是:

ggplot(data =  dat, aes(x = Row, y = Col)) +
  geom_tile(aes(fill = Y1), color = "black") +
  scale_fill_discrete(labels = c("cat1", "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8"), 
                      drop = FALSE)

【讨论】:

不客气。能否请您投票以表明它对您有用? 我是新来的,不知道发生了什么。但如果你解释:为了英雄 - 一切;-)。 啊,我明白了,你需要 15 个声望点才能投票,但你只有 8 个。 感谢您的澄清。并为答案。 我仔细查看了图表,不幸的是其中有错误。因此,我完成了关于我的示例的问题。

以上是关于ggplot2 中用于扩展图例标签的默认颜色的主要内容,如果未能解决你的问题,请参考以下文章

11.ggplot2——色阶与图例(二)

ggplot2:图例混合颜色和隐藏线用于预测图

更改 ggplot2 中条形图和图例的默认颜色

R语言ggplot2可视化自定义多个图例(legend)标签之间的距离实战(例如,改变数据点颜色和数据点大小图例之间的距离)

ggplot2:为彩色条形图和图例添加不同的纹理[重复]

R语言ggplot2可视化热力图(heatmap)自定义配置图例标签为百分比进行热力图颜色渐变显示(legend to display percentage sign)