'Merging' 使用 ggplot2 和 R 的两个图

'Merging' two plots using ggplot2 and R

给定以下数据集:

data = cbind(1:10,c('open','reopen','closed'),letters[1:3],1:10)
data = rbind(data,cbind(1:10,c('open','closed','reopen'),letters[1:3],5:10))
data = rbind(data,cbind(1:10,c('closed','open','reopen'),letters[1:3],3:10))
data = data.frame(data);
colnames(data) <- c("id","status","author","when")

我想要一个类似下面的情节:

ggplot(data, aes(when,id)) +
  geom_line(aes(group = id,colour = status)) +
  geom_point(aes(group = id,colour = author))

但是,因此我通过 'author' 获得了一个带有状态和作者值的图例。我怎样才能得到相同的结果,但带有作者图例和其他状态图例?我的理由是我想将同一数据集的两个图叠加在一起。

我认为您不能为一个 ggplot 使用不同的色标/图例。你可以一起破解一些东西(see this question for legend hacking),但在这种情况下,你的一个 geom 是点,你可以只使用 fill 和填写的点选项之一。

ggplot(data, aes(when,id)) +
  geom_line(aes(group = id,colour = status)) +
  geom_point(aes(group = id, fill = author),
             shape = 21, color = NA, size = 4)

此处使用的每种颜色都相同,但您可以单独编辑颜色或填充比例,例如添加

 scale_fill_brewer(type = "qual") +
 scale_color_brewer(type = "qual", palette = 2)

我同意 AndyClifton 的观点,即以两种方式使用颜色将很难区分。您还可以尝试使用线型、点形状,甚至使用 geom_text 使用单词、字母或数字作为标签而不是点来进行绘图。你说你有超过 6 个 author 值,但是很难区分 author 超过 6 个颜色,尤其是 当颜色也被用于状态时。

让我们获取您的数据。首先你应该知道你有一个问题,你的 whenid 列是一个字符串,所以你正在绘制 1, 10, 2, 3, ... 而不是 1,...9 ,10。我们可以解决这个问题:

data$when.num <-as.numeric(as.character(data$when))
data$id.num <-as.numeric(as.character(data$id))

然后我们将绘制它,但使用不同的形状来获得两个不同的图例:

require(ggplot2)

p <- ggplot(data, aes(x = when.num, y = id)) +
  geom_line(aes(group = id,colour = status)) +
  geom_point(aes(group = id,shape = author))

print(p)

你得到这个:

我觉得这比作者使用彩色点要清晰得多,但这是一个品味问题。