我有一个非常大的数据集,包括200个变量(列),我正在寻找一种方法(循环函数,lapply等)在同一个图中有多个变量。如何修改以下代码以获得此类情节(而不是为每个geom_line(aes(y=))
重复每个W
?
A<-seq( 0, 9, 1 )
B<-seq( 30, 39, 1 )
W1<-seq( 0.3, 1.2, 0.1 )
r<-seq( 32, 41, 1 )
f<-seq( 33, 42, 1 )
W2<-seq( 1.3, 2.2, 0.1 )
g<-seq( 34, 43, 1 )
W3<-seq( 4.3, 5.2, 0.1 )
s<-data.frame( A, B, W1, r, f, W2, g, W3 )
ggplot( s, aes( x = A, y = B) ) + geom_point() + geom_line( aes( y = W1 ) ) +
geom_line( aes( y = W2 ) ) +
geom_line( aes( y = W3 ) ) + theme_bw()
答案 0 :(得分:1)
我建议您花一点时间熟悉一组通常称为tidyverse
的软件包。强烈推荐和易于理解的介绍是免费的在线书籍"R for datascience"。
具体来说,为了回答你的问题,我首先会将数据框投射到“长”字样中。使用基于颜色的美学映射,然后使用A
绘制每个变量:
library("tidyverse")
A<-seq(0,9,1)
B<-seq(30,39,1)
m1<-seq(0.3,1.2,0.1)
r<-seq(32,41,1)
f<-seq(33,42,1)
m2<-seq(1.3,2.2,0.1)
g<-seq(34,43,1)
m3<-seq(4.3,5.2,0.1)
s<-data.frame(A,B,m1,r,f,m2,g,m3)
data <- s %>% gather(var, value, B:m3)
ggplot(data, aes(x=A, y=value, color =var)) + geom_point()
(我修改了代码示例中的拼写错误)
这会产生以下情节:
答案 1 :(得分:1)
ggplot
最适合长格式的数据。要从宽到长重新整形,此处使用melt()
包中的data.table
。
library(data.table)
molten <- setDT(melt(s, id.vars = "A"))
head(molten, 12)
# A variable value
# 1: 0 B 30.0
# 2: 1 B 31.0
# 3: 2 B 32.0
# 4: 3 B 33.0
# 5: 4 B 34.0
# 6: 5 B 35.0
# 7: 6 B 36.0
# 8: 7 B 37.0
# 9: 8 B 38.0
#10: 9 B 39.0
#11: 0 W1 0.3
#12: 1 W1 0.4
现在,可以一次性绘制变量:
library(ggplot2)
ggplot(molten, aes(A, value, group = variable, colour = variable)) +
geom_point() + geom_line() + theme_bw()
或有选择地:
ggplot(molten[variable %in% letters], aes(A, value, group = variable, colour = variable)) +
geom_point() + geom_line() + theme_bw()
或有选择地作为点或线:
ggplot(mapping = aes(A, value, group = variable, colour = variable)) +
geom_point(data = molten[variable %in% c("B")]) +
geom_line(data = molten[variable %like% "^W"]) + theme_bw()