2013-02-19 6 views
0

У меня есть два набора данных, и d2 в файлах csv. Каждая информация имеет 6 столбцов. Мне удалось объединить их командой melt и объединить их в ggplot. После того, как я добавлю один дополнительный столбец, который является другой переменной, от графика будет зависеть, я не смог бы получить требуемый граф. Предоставлен образец набора данных и моего кода.График ggplot в R на основе многих переменных

Набор данных после использования melt и reshape пакета:

initi A B  C  D E L1 
0.005 1 23.7  1.0 1.0 24.7 d2 
0.005 2 31.2  2.0 2.1 31.2 d2 
0.005 3 35.8  3.1 3.2 35.6 d2 
1 1 6.2  1.0 1.0 6.2 d1 
1 2 10.1  2.0 2.1 7.0 d1 
1 3 11.2  3.0 3.5 7.0 d1 
2 1 14.2  8.0 14.3 5.2 d1 
2 2 15.9  7.0 13.0 5.5 d1 
2 3 16.0  6.2 12.4 5.8 d1 

Мне нужно построить график A в X-axis и B в Y-axis. Значение initi будет представлять каждый график. Другими словами, это будет в легенде. Для d1, мне нужно построить результаты между A и B. Для d2 Я хочу построить два графика, где первый график, когда initi = 1 и второй для initi = 2. Все графики для d1 и d2 находятся между A и B и объединены в граф. Всего в этом случае 3 линии объединены в один граф. Мне удалось нарисовать d1 и d2, прежде чем я добавил столбец initi. Теперь я борюсь. Ниже мой код:

dlist <- list(d1 =data1 ,d2 = data2) 
reshaped_data <- melt(dlist, id.vars = c('initi','A','B','C','D','E')) 
graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi)) + 
    geom_point(size = 5)+ 
    geom_line() + 
    ggtitle("DATA1 vs DATA2") 

Приведенный выше код близок к тому, что я хочу ... Кроме того, что линии соединены странным образом. Я должен получить каждый шаблон для «инициатора» как одну строку. Кроме того, в легенде не отображается каждое значение «инициатор»

+0

Я не совсем уверен, что это то, что вы хотите. Итак, я напишу здесь в комментарии, чтобы узнать, не до того, как я напишу как ответ: Это работает? 'ggplot (data = df, aes (x = A, y = B, color = factor (инициатор))) + geom_point() + geom_line() + facet_grid (.~ L1) ' – Arun

+0

Да, он сделал что-то близко к тому, что я хочу. Он создал два графика рядом друг с другом. Для d1 он создал один график только с результатами d1 (A VS B). На графике 2 результаты d2 !!!?. Оба графика под одним заголовком и одна легенда ??? Я хочу их комбинировать ?? – SimpleNEasy

+0

Извините, я не совсем понимаю ... Не могли бы вы объяснить еще раз (отредактировав сообщение, что вы хотите построить)? – Arun

ответ

0

Вы говорите, что хотите два графика, один для которых: initi - 1, а другой для 2, но он также принимает значение 0.005. Сначала необходимо подмножить свои данные, если вы хотите опустить уровень 0.005.

В ggplot2 несколько графов называются «гранями», и поскольку ваши грани зависят от одной переменной, команда, которую вы хотите, равна facet_wrap(). (Вы бы использовать facet_grid если ваши грани зависит от 2-х переменных.) Грани должны быть факторами, поэтому мы удостоверимся, что initi является фактором

reshaped_data$initi <- factor(reshaped_data$initi) 

затем просто добавить + facet_wrap(~ initi) к вашему ggplot.

EDIT: Если вы хотите только один график, попробуйте

graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi, group = L1)) + 
    geom_point(size = 5)+ 
    geom_line() + 
    ggtitle("DATA1 vs DATA2") 

graph_AB 

В будущем разместить данные, используя dput. Например, если вы делаете dput(reshaped_data) и вставить его в свой вопрос, то выход будет так:

structure(list(initi = c(0.005, 0.005, 0.005, 1, 1, 1, 2, 2, 
2), A = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), B = c(23.7, 31.2, 
35.8, 6.2, 10.1, 11.2, 14.2, 15.9, 16), C = c(1, 2, 3.1, 1, 2, 
3, 8, 7, 6.2), D = c(1, 2.1, 3.2, 1, 2.1, 3.5, 14.3, 13, 12.4 
), E = c(24.7, 31.2, 35.6, 6.2, 7, 7, 5.2, 5.5, 5.8), L1 = structure(c(2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("d1", "d2"), class = "factor")), .Names = c("initi", 
"A", "B", "C", "D", "E", "L1"), class = "data.frame", row.names = c(NA, 
-9L)) 

который каждый может вставить в R и легко использовать.

+0

Я думал 'инициал', так как он должен быть в легенде, должен быть' colour', а грань должна быть на 'L1' ... – Arun

+0

@ Арун Хм, может быть. На основе «Инициативное значение будет представлять каждый график». Я предполагал, что целью было сделать это на грани, но это довольно запутанно. Может быть, «будет представлять» должно быть «будет присутствовать», и в этом случае я ошибаюсь. – Gregor

+0

Да, я тоже смущен. – Arun

0
dlist <- list(d1 =data1 ,d2 = data2) 
reshaped_data <- melt(dlist, id.vars = c('initi','A','B','C','D','E')) 
graph_AB<-ggplot(reshaped_data,aes(x = A, y = B, colour = initi)) + 
geom_point(size = 5)+ 
ggtitle("DATA1 vs DATA2") 
print(graph_AB) 

Я только что удалил geom_line из оригинального вопроса!

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