гистограмма с накоплением в r для нескольких фреймов данных

Извините, что побеспокоил вас еще раз, но я борюсь с простой задачей, и после поиска решения и просмотра Интернета я не могу с этим разобраться. вот сделка. У меня есть три массива

c1 <- data.frame(cf=rep(100,10),m=seq(1,10,1))
c1$cf[10] <- 500

c2 <- data.frame(cf=rep(50,10),m=seq(1,20,2))
c2$cf[10] <- 650

c3 <- data.frame(cf=rep(150,5),m=seq(1,20,4))
c3$cf[5] <- 450

и я хотел бы создать столбчатую диаграмму с накоплением с последовательностью от 1 до 20 по x (все возможные записи трех вторых столбцов) и (возможной) суммой трех первых столбцов по y.

Я попытался объединить три фрейма данных

m <- merge(c1,c2,by="m",all=TRUE)
m <- merge(m,c3,by="m",all=TRUE)

Я растопил это

m1 <- melt(m,id="m")
m1 <- na.exclude(m1)

и попытался использовать ggplot как

ggplot(data=m1,aes(x=m,y=value,fill=row))

но я ничего не понимаю и до сих пор не знаю, как правильно отобразить гистограмму и правильно ли это сделать то, что я хочу получить.

В случае, большое спасибо за любую помощь.


person Stefano    schedule 19.11.2015    source источник
comment
Вам нужно будет включить то, что вы пробовали, но не сработало, чтобы кто-нибудь объяснил, почему это не сработало. Кроме того, приведенный выше недопустимый код R - a ‹- data.frame (...) + c‹ - d. Под '+' вы подразумеваете ';'? Поскольку вы уже просматривали Интернет, вы можете указать, какие решения вы пробовали, и какие ресурсы вы также нашли.   -  person Alex Brown    schedule 20.11.2015


Ответы (1)


Сначала посмотрим на ваши данные:

head(m1)
#   m variable value
# 1 1     cf.x   100
# 2 2     cf.x   100
# 3 3     cf.x   100
# 4 4     cf.x   100
# 5 5     cf.x   100
# 6 6     cf.x   100

Выглядит хорошо. Теперь давайте посмотрим, какая у вас команда построения:

ggplot(data=m1,aes(x=m,y=value,fill=row))

Две проблемы: во-первых, для ссылки на ваши данные выше нет столбца с названием «строка». Я предполагаю, что вы хотите, чтобы цвет заливки был основан на столбце с названием «переменная»:

ggplot(data = m1, aes(x = m, y = value, fill = variable))
# Error: No layers in plot

Во-вторых, какой сюжет? Барный сюжет? Диаграмма рассеяния? Коробчатый сюжет? вам нужно сказать ggplot, что строить. Это то, о чем вам сообщает сообщение об ошибке - вы предоставили данные, но не указали, что строить. Это рассматривается в любом введении в ggplot2.

ggplot(data = m1, aes(x = m, y = value, fill = variable)) +
  geom_bar()

Но теперь мы получаем еще одну ошибку:

Ошибка: отображение переменной в y, а также использование stat = "bin". При stat = "bin" он попытается установить значение y равным количеству наблюдений в каждой группе. Это может привести к неожиданному поведению и не будет разрешено в будущей версии ggplot2. Если вы хотите, чтобы y представлял количество наблюдений, используйте stat = "bin" и не сопоставляйте переменную с y. Если вы хотите, чтобы y представлял значения в данных, используйте stat = "identity". См. Примеры? Geom_bar. (Несуществующий; последний раз использовался в версии 0.9.2)

Это полезная ошибка, в лучшем случае! Если вы хотите, чтобы y представлял значения в данных, используйте stat = "identity".

ggplot(data = m1, aes(x = m, y = value, fill = variable)) +
    geom_bar(stat = "identity")

И это работает.

person Gregor Thomas    schedule 19.11.2015
comment
Я вам очень благодарен !!! лучшая помощь, которую я мог получить! просто еще один вопрос. Была ли процедура лучше, чтобы получить этот результат, исходя из трех моих фреймов данных? или мне действительно приходилось раньше сливать, плавить и исключать значения NA? еще раз большое спасибо - person Stefano; 20.11.2015
comment
Это определенно хорошо. Работать с 1 фреймом данных намного проще, чем с 3, и ggplot2 всегда предпочитает данные длинного формата. Возможно, вам понравится читать the paper Это довольно быстрое чтение, и оно может быть очень полезным в том, чтобы научиться думать о подобных проблемах. - person Gregor Thomas; 23.11.2015