2015-08-04 2 views
0

Я могу создать график geom_point() только для y1 и y2, но я хотел бы иметь возможность создать график плотности, который позволит мне использовать многие (я используя переменную 5 г в качестве примера, но я иметь до 50 переменных у)Плотность графика для многочисленных переменных с использованием ggplot в R

Это некоторые игрушки данных я создал в качестве ссылки:

y1   y2   y3   y4   y5 
0.000000 0.000000 0.000000 0.000000 0.000000 
0.000100 0.000000 0.000100 0.000100 0.000000 
0.000100 0.000100 0.000400 0.000200 0.000000 
0.000100 0.000100 0.000400 0.000200 0.000100 
0.000300 0.000100 0.000300 0.000200 0.000100 
0.000300 0.000100 0.000000 0.000000 0.000300 
0.000300 0.000100 0.000000 0.000200 0.000600 
0.000400 0.000200 0.000100 0.000100 0.000500 
0.000500 0.000100 0.000100 0.000100 0.000400 
0.000500 0.000300 0.000100 0.000000 0.000700 
0.000700 0.000400 0.000100 0.000300 0.000700 
0.001100 0.000400 0.000100 0.000200 0.000900 

по существу, эти значения являются абсолютная величина изменения от (где ясно, что я использовал первое значение x в серии в качестве ссылки). Я хочу видеть плотность (или гистограмму с сглаживанием ядра) для изменения данных, где значения х являются категориями день 1, день 2, день 3, ... день 12.

Как я уже сказал, я думаю, что хочу что-то вроде

setwd("null") 
data <- read.table("data.csv", header=TRUE, sep=",") 
n <- 5 # number of variables 

for (i in 1:n) { 
ggplot(data,aes(x=time, y = paste0("day.", i),color="grey")) 
    +geom_density() + geom_density(aes(y = paste0("day.", i+1),color="grey")) 
} 

Если кто-то может мне помочь, я был бы очень благодарен!

ответ

0

ggplot s работает лучше всего с данными в длинном формате. Таким образом, переформатирование данных с использованием stack позволяет легко отделить кривые плотности для каждого столбца.

dat <- stack(data) 
ggplot(dat, aes(x=values, fill=ind)) + geom_density(alpha=0.5) 

enter image description here

Если вы хотите, чтобы передать имена переменных в aes как в вашем for цикле, используйте aes_string вместо этого, т.е.

p <- ggplot(data) 
for (n in names(data)) 
    p <- p + geom_density(aes_string(x=n)) 

Но это не так хорошо, так как его трудно применять эстетику, такую ​​как цвета, формы и т. д. к различным кривым.

+0

Я не понимаю, что это показывает. Не могли бы вы объяснить, пожалуйста? :) Я как бы думал, что это будет одна кривая плотности с day1, day2, day3 .. на оси x и абсолютное изменение по оси y (во всех hoensty я действительно не забочусь о том, что показывает ось y, пока i может визуально находиться под графиком) –

+0

@xionglui это кривая плотности для каждого столбца в ваших данных. Кривые плотности похожи на гистограммы, поэтому вы используете их для изучения одной переменной. Я не уверен, что вы пытаетесь сделать, у вас есть фотография с похожим графиком? – jenesaisquoi

+0

x = значения? это те, что я первый день, день 2, день 3 и т. д.? Когда я рисую это, я получаю все значения y по оси x. Id нравится видеть день 1, 2, 3 и т. Д. По оси x –

Смежные вопросы