Как нарисовать сложенный барплот на суммированных данных - PullRequest
0 голосов
/ 04 марта 2019

Для данных, называемых df, которые гласят:

car suv pickup
 1   2   1
 2   3   4
 4   1   2
 5   4   2
 3   1   1
total =  apply(df,1,sum)
barplot(total,col= rainbow(5))

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

На данный момент он просто показывает «итого» без каких-либо строк, указывающих, добавляет ли 1 автомобиль, 2 внедорожника, 1 пикап 4"Всего".

Примечание.Это отличается от barplot(matrix(df)), потому что это просто делит мою машину, внедорожник, пикап, что не учитывает общее количество.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Вы можете легко добиться этого, используя ggplot2 и reshape2.Вам понадобится столбец идентификатора для отслеживания строк, поэтому я добавил его. Я объединяю данные в длинный тип, чтобы можно было соответствующим образом управлять различными группами и составлять их графики.Затем построите график, используя geom_bar, указав идентификаторы строк в качестве оси x и группировки (fill и colour) для стекового графика и легенды.

library(reshape2)
library(ggplot2)
df <- data.frame("ID" = c(1,2,3,4,5), "car" = c(1,2,4,5,3), "suv" = c(2,3,1,4,1), "pickup" = c(1, 4, 2, 2, 1))
long_df <- df %>% melt(id.vars = c("ID") ,value.name = "Number", variable.name = "Type")

ggplot(data = long_df, aes(x = ID, y = Number)) +
  geom_bar(aes(fill = Type, colour = Type),
           stat = "identity",
           position = "stack")

С базой R

df %>% melt(id.vars = c("ID") ,value.name = "Number", variable.name = "Type") %>% 
  dcast(Type ~ ID, value.var = "Number") %>% 
  as.matrix() %>% 
  barplot()
0 голосов
/ 04 марта 2019

Вы хотите что-то подобное?

library(tidyverse)
df %>%
    rowid_to_column("row") %>%
    gather(k, v, -row) %>%
    ggplot(aes(row, v, fill = k)) +
    geom_col()

enter image description here

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


Пример данных

df <- read.table(text =
    "car suv pickup
 1   2   1
 2   3   4
 4   1   2
 5   4   2
 3   1   1", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...