R中的ggplot图基于许多变量

时间:2013-02-19 19:29:14

标签: r ggplot2

我在csv文件中有两个数据集d1d2。每个数据有6列。我设法通过melt命令将它们组合在一起,并在ggplot中将它们组合在一起。在我添加了一个额外的列,这是图形依赖的另一个变量后,我无法获得所需的图形。提供了数据集和我的代码的样本。

使用meltreshape包后的数据集

initi A   B       C     D    E   L1
0.005 1 23.7      1.0  1.0  24.7 d2
0.005 2 31.2      2.0  2.1  31.2 d2
0.005 3 35.8      3.1  3.2  35.6 d2
 1    1 6.2       1.0  1.0  6.2  d1
 1    2 10.1      2.0  2.1  7.0  d1
 1    3 11.2      3.0  3.5  7.0  d1
 2    1 14.2      8.0 14.3  5.2  d1
 2    2 15.9      7.0 13.0  5.5  d1
 2    3 16.0      6.2 12.4  5.8  d1

我需要在AX-axis B中对Y-axis进行图表制作。 initi值将代表每个图表。换句话说,它将在传奇中。对于d1,我需要在AB之间绘制结果。对于d2,我想绘制两个图表,其中initi = 1的第一个图表和initi = 2的第二个图表。 d1d2的所有图表都在AB之间,并在图表中合并。在这种情况下总共3行组合在一个图中。 在添加d1列之前,我设法绘制了d2initi图表。现在我挣扎着。以下是我的代码:

 dlist <- list(d1 =data1 ,d2 = data2) 
 reshaped_data <- melt(dlist, id.vars = c('initi','A','B','C','D','E')) 
 graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi)) +  
     geom_point(size = 5)+
     geom_line() +
     ggtitle("DATA1 vs DATA2") 

上面的代码接近我想要的...除了线路以奇怪的方式连接。我应该将“initi”的每个模式作为一行。另外,图例没有显示'initi'的每个值

2 个答案:

答案 0 :(得分:0)

你说你想要两张图,一张是initi是1,另一张是2,但它也是值0.005。如果要省略0.005级别,则需要先对数据进行子集化。

在ggplot2中,多个图形称为“facet”,由于您的facet依赖于一个变量,因此您需要的命令为facet_wrap()。 (如果你的方面取决于2个变量,你可以使用facet_grid。)方面应该是因素,所以我们要确保initi是一个因素

reshaped_data$initi <- factor(reshaped_data$initi)

然后只需将+ facet_wrap(~ initi)添加到您的ggplot。

编辑: 如果您只想要一张图表,请尝试

graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi, group = L1)) +  
    geom_point(size = 5)+
    geom_line() +
    ggtitle("DATA1 vs DATA2")

graph_AB

将来,使用dput发布数据。例如,如果您执行dput(reshaped_data)并将其粘贴到您的问题中,则输出将为:

    structure(list(initi = c(0.005, 0.005, 0.005, 1, 1, 1, 2, 2, 
2), A = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), B = c(23.7, 31.2, 
35.8, 6.2, 10.1, 11.2, 14.2, 15.9, 16), C = c(1, 2, 3.1, 1, 2, 
3, 8, 7, 6.2), D = c(1, 2.1, 3.2, 1, 2.1, 3.5, 14.3, 13, 12.4
), E = c(24.7, 31.2, 35.6, 6.2, 7, 7, 5.2, 5.5, 5.8), L1 = structure(c(2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("d1", "d2"), class = "factor")), .Names = c("initi", 
"A", "B", "C", "D", "E", "L1"), class = "data.frame", row.names = c(NA, 
-9L))

任何人都可以粘贴到R中并轻松使用。

答案 1 :(得分:0)

dlist <- list(d1 =data1 ,d2 = data2) 
reshaped_data <- melt(dlist, id.vars = c('initi','A','B','C','D','E')) 
graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi)) +  
geom_point(size = 5)+
ggtitle("DATA1 vs DATA2") 
print(graph_AB)

我刚从原始问题中删除了geom_line!