Создание многострочной диаграммы для нескольких переменных – 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, но я уверен, что это можно было бы как-то сделать.
- Замена значений из столбца с использованием условия в R
- R, расширяющий несколько столбцов с тидиром
- Свертывание кадра данных путем выбора одной строки для каждой группы
- Найти сходство косинусов между двумя массивами
- Проблема при передаче переменной с обозначением знака доллара ($) на aes () в сочетании с facet_grid () или facet_wrap ()
Как я могу сделать это с помощью ggplot2? Благодаря!
- двойное удаление дубликатов из dataframe
- Преобразование списка кадров данных в один фрейм данных
- Заменить бары в geom_bar ggplot2
- Как преобразовать время (мм: ss) в десятичную форму в R
- Повторное изменение ширины до нескольких с несколькими столбцами значений
- Указание имен столбцов в data.frame меняет пробелы на "."
- Интеллектуальное размещение меток в R
- Может ли пакет dplyr использоваться для условного мутирования?
Во-первых, некоторые манипуляции с данными. Добавьте категорию как переменную и расплавьте данные в длинный формат.
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')
и он работает.