【问题标题】:Triple legend in ggplot2 with point shape, fill and colorggplot2中的三重图例,带有点形状,填充和颜色
【发布时间】:2015-04-21 13:12:25
【问题描述】:

我的数据框(请参阅下面的链接)包含多个模型的输出,我想根据以下内容对其进行“分类”:

  • 型号名称(9 个型号)-> 9 种形状填充颜色
  • 模型域(每个模型都有以下两个之一:“MED”或“EURO”)-> 两种空心形状类型
  • 原始分辨率(每个模型都有两个“版本”:“HR”和“LR”)-> 2 种形状轮廓颜色

此外,还包括一个单独的观测数据集,应以自己的颜色和填充形状显示。

所以总的来说,我有 9x2=18 个点类型,每个点类型还有一个“域”标签,外加一个观察点类型。

以下是最简单的开始,但根本不起作用。另外,我不想使用 scale_*_manual 为每个项目手动指定颜色和形状。

library(ggplot2)

#Sorry for the wget, I can't seem to make load() read the url directly
system("wget https://copy.com/LrEznd8QCmzVBNyz/df_pr_PDF_alps_044.Rdata?download=1") 
load("df_pr_PDF_alps_044.Rdata?download=1") #This loads df
colnames(df) #Take a look at the columns

ggplot(data=df[which(df$PDF > 0),], aes(x=x, y=PDF)) +
geom_point(aes(shape=domain, colour=nativeresolution, fill=model), alpha=0.7, size=2)+
scale_shape_manual(values=c(21,22,23))

我已经尝试了一些修复,例如此处建议的修复:

ggplot2: One legend with two visual properties derived from common variable

Combine legends for color and shape into a single legend

How to merge colour and shape?

但我似乎找不到解决这个看似简单的问题的方法。

【问题讨论】:

  • 关于“填充”和“轮廓”的形状以及“我不想使用scale_*_manual为每个项目手动指定颜色和形状”,请阅读?pch:“21:25可以着色和填充不同的颜色”。因此,我认为您需要将变量的级别映射到您定义的pch:s manually。
  • @Henrik 是的,你完全正确,21 到 25 是唯一受填充影响的,所以我应该使用这些。我忘了。我将编辑示例以使用这些形状。仍然效果不佳:所有的传说都搞砸了。

标签: r ggplot2


【解决方案1】:

您可以使用override.aes 指定参考线中的空心形状之一以进行填充和着色。此外,如果您指定 colour = NA 进行填充,您将在指南中看到“仅填充”。

library(ggplot2)

system("wget https://copy.com/LrEznd8QCmzVBNyz/df_pr_PDF_alps_044.Rdata?download=1") 
load("df_pr_PDF_alps_044.Rdata?download=1")

ggplot(data=df[which(df$PDF > 0),],
       aes(x = x, y = PDF, shape = domain, colour = nativeresolution, fill = model)) +
  geom_point(alpha=0.7, size=2) +
  scale_shape_manual(values=c(21,22,23)) +
  guides(fill = guide_legend(override.aes = list(shape = 21, colour = NA)),
         colour = guide_legend(override.aes = list(shape = 21)))

这修复了图例,但可能不容易阅读具有映射到点的三个变量的散点图...您是否考虑过使用构面代替?

【讨论】:

  • 谢谢,这是我一直在寻找的答案。 override.aes 可以解决问题。在这种情况下,如果我实施更多调整(对数刻度、更粗的点、更好的颜色、更大的箱),情节看起来会更好,但我承认这并不理想。我已经尝试过切面,它看起来非常好。再次感谢。
猜你喜欢
  • 2022-09-27
  • 2022-01-02
  • 1970-01-01
  • 2018-08-30
  • 2022-11-27
  • 2014-10-27
  • 2014-05-26
  • 2016-07-13
  • 2017-06-05
相关资源
最近更新 更多