'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 个颜色,尤其是 当颜色也被用于状态时。
让我们获取您的数据。首先你应该知道你有一个问题,你的 when
和 id
列是一个字符串,所以你正在绘制 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)
你得到这个:
我觉得这比作者使用彩色点要清晰得多,但这是一个品味问题。
给定以下数据集:
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 个颜色,尤其是 当颜色也被用于状态时。
让我们获取您的数据。首先你应该知道你有一个问题,你的 when
和 id
列是一个字符串,所以你正在绘制 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)
你得到这个:
我觉得这比作者使用彩色点要清晰得多,但这是一个品味问题。