2011-01-31 44 views
20

Birden çok grafik oluşturmak için birden fazla sütun üzerinde döngü yapmak için ggplot kullanmak istiyorum, ancak for döngüsündeki yer tutucunun kullanılması ggplot'un davranışını değiştiriyor.ggplot içinde değişkenler üzerinde döngü

bu varsa:

t <- data.frame(w = c(1, 2, 3, 4), x = c(23,45,23, 34), 
y = c(23,34,54, 23), z = c(23,12,54, 32)) 

Bu çalışıyor:

ggplot(data=t, aes(w, x)) + geom_line() 

Ama bu değil: bir sorun

i <- 'x' 
ggplot(data=t, aes(w, i)) + geom_line() 

Ben üzerinden nihayetinde döngü istiyorsanız x, y ve z. Herhangi bir yardım?

+0

, 'yani,' m = eritmek, uzun biçim data.frames daha mutlu ggplot2'is (t, id = "w"); ggplot (alt küme (m, değişken == "x"), aes (w, değer)) + geom_line() 'veya' p <- ggplot (m, aes (w, değer)) + geom_line (aes (color = variable)) ', veya' d_ply (m,. (değişken), fonksiyon (d) p% +% d, .print = DOĞRU) ', vb – baptiste

cevap

32

Sadece böyle aes_string yerine aes, kullanmak gerekir: w sonra da bir dize olarak belirtilmesi gerekir

ggplot(data=t, aes_string(x = "w", y = i)) + geom_line() 

Not söyledi.

2

Sorun, veri çerçevesine t erişebilmenizdir. Muhtemelen bildiğiniz gibi, bunu yapmanın birkaç yolu vardır, ancak maalesef bir karakteri kullanmak ggplot numaralı telefondan bir tanesi değildir.

Çalışmanın bir yolu, örneğinizdeki sütunun sayısal konumunu kullanmaktır, örneğin, i <- 2'u deneyebilirsiniz. Ancak, bu çalışma hiç kullanmadığım ggplot üzerinde çalışıyorsa (ama Hadley tarafından başka bir iş biliyorum ve sanırım işe yarayacak)

Bunu engellemenin başka bir yolu, ggplot'u her aradığınızda yeni bir geçici veri çerçevesi oluşturmaktır. . ör .:

tmp <- data.frame(a = t[['w']], b = t[[i]]) 
ggplot(data=tmp, aes(a, b)) + geom_line() 
+0

Sayısal indisleri daha önce de kullandım. Bir veri kümesindeki her bir sütundan, her zaman t $ x'in her zaman t [, 2] olacağına inandığım zaman gerginim. –

+0

Mükemmel, teşekkürler. Eminim ki bu çalışmalara ihtiyacım var. – Tom

+0

Bu daha karmaşık ggplots (örneğin, yüzleri kullanan) için işe yaramıyor. – Gregor

0

Yapmaya çalıştığınız ne bağlı olarak, aynı temel yapıya sahip birden fazla araziler oluşturmak için iyi çalışacak şekilde facet_wrap veya facet_grid bulabilirsiniz. Böyle bir şey doğru ballpark sizi almalısınız:

Genellikle
t.m = melt(t, id="w") 
ggplot(t.m, aes(w, value)) + facet_wrap(~ variable) + geom_line()