我想绘制矩阵的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行,但它是空白的。
有什么想法吗?
谢谢。
答案 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()