修改代码(总结代码)

时间:2017-04-09 19:07:01

标签: r plot ggplot2

我有一个非常大的数据集,包括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()

2 个答案:

答案 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()

(我修改了代码示例中的拼写错误)

这会产生以下情节:

enter image description here

答案 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()

enter image description here

或有选择地:

ggplot(molten[variable %in% letters], aes(A, value, group = variable, colour = variable)) + 
  geom_point() + geom_line() + theme_bw()

enter image description here

或有选择地作为点或线:

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()

enter image description here