Создание многострочной диаграммы для нескольких переменных – ggplot2 в R

У меня возникли проблемы с созданием сложной гистограммы в ggplot2. Я знаю, как сделать один с barplot (), но я хотел использовать ggplot2, потому что очень легко сделать бары одинаковой высоты (с ‘position =’ fill ”, если я не ошибаюсь).

Моя проблема в том, что у меня есть несколько переменных, которые я хочу строить друг над другом; мои данные выглядят так:

dfr <- data.frame( V1 = c(0.1, 0.2, 0.3), V2 = c(0.2, 0.3, 0.2), V3 = c(0.3, 0.6, 0.5), V4 = c(0.5, 0.1, 0.7), row.names = LETTERS[1:3] ) 

То, что я хочу, это график с категориями A, B и C по оси X, и для каждого из них значения для V1, V2, V3 и V4 укладываются друг на друга по оси Y. Большинство графиков, которые я видел, изображают только одну переменную на оси Y, но я уверен, что это можно было бы как-то сделать.

Как я могу сделать это с помощью ggplot2? Благодаря!

Во-первых, некоторые манипуляции с данными. Добавьте категорию как переменную и расплавьте данные в длинный формат.

 dfr$category <- row.names(dfr) mdfr <- melt(dfr, id.vars = "category") 

Теперь зарисуйте, используя переменную с именем variable чтобы определить цвет заливки каждого бара.

 library(scales) (p <- ggplot(mdfr, aes(category, value, fill = variable)) + geom_bar(position = "fill", stat = "identity") + scale_y_continuous(labels = percent) ) 

(EDIT: код обновлен, чтобы использовать пакеты scales , как требуется с ggplot2 v0.9.)

введите описание изображения здесь

Извините меня за инициирование нового ответа, хотя я просто хочу добавить комментарий к прекрасному решению, предоставленному @Richie. У меня нет минимальных моментов, чтобы оставлять комментарии, так что вот мой случай:

... + geom_bar(position="fill") забросил ошибку для моего построения, я использую ggplot2 версии 0.9.3.1. и измените форму 2, а не измените форму для таяния.

 error_message: *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. (Deprecated; last used in version 0.9.2) stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. Error in pmin(y, 0) : object 'y' not found* 

Поэтому я изменил его на geom_bar(stat='identity') и он работает.

  • Интеграция Java-R?
  • Как исправить файл R Markdown, например `source ('myfile.r')`?
  • Понимание дат и построение гистограммы с ggplot2 в R
  • Как вы конвертируете дату POSIX в день года в R?
  • Объединить столбец для удаления NA
  • Roxygen2 - как правильно документировать методы S3
  • Суммарная сумма до достижения максимума, затем повторите с нуля в следующей строке
  • Импорт двух функций с одинаковым именем с помощью roxygen2
  • Добавить индекс к смежным прогонам равных значений
  • Объединить строки по конкретным столбцам данных
  • R grep: есть ли оператор AND?
  • Давайте будем гением компьютера.