【问题标题】:How to colour box plot lines of each unique value of data?如何为每个唯一数据值的箱线图上色?
【发布时间】:2018-08-02 17:45:32
【问题描述】:

我创建了一个男性和女性寿命的箱线图,每个性别的数据点根据物种用一条线连接起来。 我的问题是,如何为每个物种分配独特的线条颜色?由于我的数据集非常大,如果我可以自动为每个物种分配 x 个随机颜色,那就太好了。 同样出于某种原因,我的 x 轴标签不会像我想要的那样出现。我希望轴用男性标记为“性别”,然后为每个箱形图标记为女性标签。

使用这些数据:

MaleFemale.max.longevity    Sex Binomial
195 Male    Agouti_paca
192 Female  Agouti_paca
196 Male    Alopex_lagopus
126 Female  Alopex_lagopus
240 Male    Amblonyx_cinereus
276 Female  Amblonyx_cinereus
254 Male    Aotus_azarai
174 Female  Aotus_azarai
310 Male    Arctictis_binturong
324 Female  Arctictis_binturong
430 Male    Cacajao_calvus
276 Female  Cacajao_calvus
314 Male    Callicebus_moloch
244 Female  Callicebus_moloch
223 Male    Callithrix_pygmaea
181 Female  Callithrix_pygmaea
164 Male    Canis_adustus
130 Female  Canis_adustus

这段代码(取自本网站上的另一个问题 - 非常有帮助):

Longevity <- log10(News$MaleFemale.max.longevity)
# Graph plots 
r <- ggplot(News, aes(x = Sex, y = Longevity, fill = Sex)) + 
scale_x_discrete(c(labels = unique("Female","Male"), each = 2))
r <- r + geom_boxplot(color="grey40", outlier.alpha=0.0) 
r <- r + stat_summary(fun.y=mean,geom="point",pch="-",color="white",size=8,
position = position_dodge(width=0.75))
r <- r + geom_point(size=2, alpha=0.6, aes(group=Sex), data=News, position =
position_dodge(width=0.75))
r <- r + geom_line(aes(group = Binomial), alpha = 0.6, colour = "black", data
= News)  
r <- r + scale_fill_manual(values=c("#969696","#74c476"))
r <- r + theme(axis.text.x = element_text(colour = "black"), 
axis.text.y = element_text(colour = "black"),
axis.title.x = element_blank(), 
axis.title.y = element_text(colour = "black"),
legend.position = "none")
r

这是我迄今为止能够制作的:

【问题讨论】:

  • 标记 x 轴:+ xlab("Sex")
  • 要自动标注行,你需要在aes中包含color,即:geom_line(aes(group = Binomial, color = Binomial))

标签: r ggplot2


【解决方案1】:

没有出现x-label的原因是因为你写了axis.title.x = element_blank()。这有效地去除了标签。为了获得彩色线条,您应该输入aes(group = Binomial, color = Binomial) 并删除colour = 'black'。但是,有了这么多颜色,您将无法看到差异。无论如何,下面是您的代码的略微清理版本,并带有建议的编辑。

# Graph plots 
r <- ggplot(News, aes(x = Sex, y = log10(MaleFemale.max.longevity), fill = Sex)) + 
  geom_boxplot(color="grey40", outlier.alpha=0.0) +
  stat_summary(fun.y=mean, geom="point", pch="-", color="white", size=8,
               position = position_dodge(width=0.75)) +
  geom_point(size=2, alpha=0.6, aes(group=Sex),
             position = position_dodge(width=0.75)) +
  geom_line(aes(colour = Binomial, group = Binomial), alpha = 0.6)  +
  scale_fill_manual(values=c("#969696","#74c476")) +
  theme(axis.text.x = element_text(colour = "black"), 
        axis.text.y = element_text(colour = "black"),
        axis.title.x = element_text(colour = 'black'), 
        axis.title.y = element_text(colour = "black"),
        legend.position = "none") +
  labs(y = 'Longevity')
print(r)

【讨论】:

  • 感谢 shadow - 你的脚本版本很棒。正如你所说,颜色对于可视化关系并不是很有帮助。有没有办法改变 x 和 y 轴的大小,使线条更加分散?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-28
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多