';合并';使用ggplot2和R绘制两个图
给定以下数据集:';合并';使用ggplot2和R绘制两个图,r,plot,R,Plot,给定以下数据集: 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
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")
但,同样地,我得到了一个由“作者”写的带有身份和作者价值观的传奇。我如何才能得到相同的结果,但与作者和其他身份的传奇?我的基本原理是,我希望将同一数据集的两个图层叠在一起。
我不认为一个绘图可以有不同的色阶/图例。你可以一起破解一些东西(),但在这种情况下,如果你的geom之一是point,你可以只使用
fill
和其中一个填充的point选项
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)
我同意安德里夫顿的观点,即用两种方式使用颜色很难区分。您还可以尝试使用线型、点形状,甚至使用
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))
data$when.num您最好使用+geom_point(aes(shape=status))
为不同的状态使用不同的标记。我尝试过,但形状限制为六个不同的值,并且状态集更大。我试图达到同样的效果,但使用颜色。谢谢安迪的回应。问题是形状比例被限制为6个不同的值,我的作者栏更大。我也试过尺寸,但结果不是很令人满意。也许值得给我们一个更现实的数据集来使用?谢谢Gregor。我同意默认值和绘图值的结果可能不太好,但我希望通过调整线大小和点大小来解决这个问题。
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)