2015-11-19 3 views
1

Извините, что беспокоите вас, ребята, еще раз, но я борюсь с простой задачей и после поиска решения и просмотра Интернета, я не могу разобраться. здесь сделка. У меня есть три массивасложенная гистограмма в 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 по й (всем возможным записям три вторых столбцов) и (возможно) сумма значений три первых столбца вдоль 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)) 

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

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

+0

Вам нужно будет указать, что вы пробовали и не работали, чтобы кто-нибудь мог объяснить * почему * это не сработало. Кроме того, вышесказанное недействительно. R-код - a <- data.frame (...) + c <- d. Под «+» вы имеете в виду «;»? Поскольку вы уже просматриваете Интернет, вы можете указать, какие решения вы попробовали и какие ресурсы вы нашли. –

ответ

3

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

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 

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

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

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

Error : Mapping a variable to y and also using stat="bin". With stat="bin", it will attempt to set the y value to the count of cases in each group. This can result in unexpected behavior and will not be allowed in a future version of ggplot2. If you want y to represent counts of cases, use stat="bin" and don't map a variable to y. If you want y to represent values in the data, use stat="identity". See ?geom_bar for examples. (Defunct; last used in version 0.9.2)

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

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

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

+0

Я действительно благодарю вас !!! лучшая помощь, которую я мог бы получить! просто еще один вопрос. Чтобы получить этот результат, начиная с моих трех кадров данных, была ли лучшая процедура? или мне действительно пришлось сливаться раньше, расплавить и исключить значения NA? спасибо много снова – Stefano

+0

Это определенно хорошо. Работа с 1 кадром данных намного проще, чем работа с 3, и долговременные данные всегда предпочтительнее ggplot2.Вам может понравиться читать [Документ «Типичная информация»] (https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwinn6uO-abJAhWU4gKHaDuBCMQFggmMAI&url=http%3A%2F % 2Fvita.had.co.nz% 2Fpapers% 2Ftidy-data.pdf & USG = AFQjCNFUAQr-w_87XpPhfEDoDYQw5-G5zg & Sig2 = WuLdOUDHPBJAmGLo-94PiA). Это довольно быстрое чтение и может быть очень полезно в обучении тому, как думать о таких проблемах. – Gregor

+0

Я не знаю, как поблагодарить вас! – Stefano

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