R ggplot堆叠没有显示行没有图表

时间:2014-03-13 20:40:18

标签: r

我想绘制矩阵的4列,并且x轴表示(1,2,3,4)。我提供了一个可以运行的简单示例。

require("reshape")
require("ggplot2")

a<-rbind(.493,.537,.50,.462)
b<-rbind(.846,-.117,-.349,-.385)
c<-rbind(-.181,.0657,.135,-.719)
d<-rbind(-.09,.51,-.77,.34)

   me<- cbind(a,b,c,d)
data<-c(me[,1], me[,2], me[,3], me[,4])
description<-rep(    c("PC1","PC2","PC3","PC4"), each=NROW(me)  )
d<- cbind(data, description)
ax <- rep(    cbind(seq(from= 1, to = 4, by =1)), NROW(me)  )
 stacked <- data.frame(d , xaxis= ax )  
stacked

ggplot(data=stacked, aes( x = xaxis,  y=data, colour=description))   +   geom_line()

问题是图表上应该显示4行,但它是空白的。

有什么想法吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您的data变量因子不是数字。

ggplot(data=stacked, aes( x = xaxis,  y=as.numeric(as.character(data)), colour=description))   +   geom_line()

您正在努力使数据框架化。我清理了一下。

a<-c(.493,.537,.50,.462)
b<-c(.846,-.117,-.349,-.385)
c<-c(-.181,.0657,.135,-.719)
d<-c(-.09,.51,-.77,.34)

data<-c(a,b,c,d)
description<-rep(c("PC1","PC2","PC3","PC4"), each=4)
ax <- rep(cbind(seq(from= 1, to = 4, by =1)), 4  )
stacked <- data.frame(data, description, xaxis= ax)  
ggplot(data=stacked, aes( x = xaxis,  y=data, colour=description))+geom_line()

答案 1 :(得分:0)

正如我在评论中提到的,当您使用cbind创建调用d的矩阵时,您正在将数值转换为字符串。你使它变得比它更难。回到你的起始矩阵me(更简单的方法是指定起始矩阵而不是创建你的步骤;使用dump("me", "")得到它)

me <-
structure(c(0.493, 0.537, 0.5, 0.462, 0.846, -0.117, -0.349, 
-0.385, -0.181, 0.0657, 0.135, -0.719, -0.09, 0.51, -0.77, 0.34
), .Dim = c(4L, 4L))

您正在使用“PC1”,“PC2”来识别列,因此直接将其包含在矩阵中

colnames(me) <- c("PC1", "PC2", "PC3", "PC4")

现在me看起来像

> me
       PC1    PC2     PC3   PC4
[1,] 0.493  0.846 -0.1810 -0.09
[2,] 0.537 -0.117  0.0657  0.51
[3,] 0.500 -0.349  0.1350 -0.77
[4,] 0.462 -0.385 -0.7190  0.34

这些行没有名称,但只是索引计数,它们后来恰好与xaxis匹配。现在就解开这个:

library("reshape2")
stacked <- melt(me)

看起来像

> stacked
   Var1 Var2   value
1     1  PC1  0.4930
2     2  PC1  0.5370
3     3  PC1  0.5000
4     4  PC1  0.4620
5     1  PC2  0.8460
6     2  PC2 -0.1170
7     3  PC2 -0.3490
8     4  PC2 -0.3850
9     1  PC3 -0.1810
10    2  PC3  0.0657
11    3  PC3  0.1350
12    4  PC3 -0.7190
13    1  PC4 -0.0900
14    2  PC4  0.5100
15    3  PC4 -0.7700
16    4  PC4  0.3400

并且列的类型为

> str(stacked)
'data.frame':   16 obs. of  3 variables:
 $ Var1 : int  1 2 3 4 1 2 3 4 1 2 ...
 $ Var2 : Factor w/ 4 levels "PC1","PC2","PC3",..: 1 1 1 1 2 2 2 2 3 3 ...
 $ value: num  0.493 0.537 0.5 0.462 0.846 -0.117 -0.349 -0.385 -0.181 0.0657 ...

列名与您stacked中的列名不同,但它们都在那里。然后,图形调用只是

ggplot(stacked, aes(x=Var1, y=value, colour=Var2)) + 
  geom_line()

enter image description here