Вопрос по ggplot2, r – барплот используя ggplot2

15

У меня есть набор данных, как это:

cars    trucks  suvs
1          2    4
3          5    4
6          4    6
4          5    6
9          12   16

Я пытаюсь нарисовать гистограмму для этих данных. В настоящее время я могу сделать это сbarplot:

barplot(as.matrix(autos_data), main="Autos", 
         ylab= "Total",beside=TRUE, col=rainbow(5))

Генерация этого графика:

Bar plot

Итак, мои вопросы: Могу ли я использовать ggplot2 для рисования такого графика? В частности - как использовать огранку или другие параметры, чтобы разбить график по дням недели? Если да, как мне это сделать? Кроме того, как я могу использовать фасет для создания другого макета?

-1 за отсутствие поиска "barplot ggplot2" в удобном окне поиска в правом верхнем углу экрана. Andrie
возможный дубликатCreate a bar graph with pre-summarized data using ggplot2 Brian Diggs
Я пытаюсь искать в Google и на этом сайте. Фактически, я могу использовать ggplot2, чтобы нарисовать гистограмму для моих исходных данных. Потому что ggplot2 может посчитать номер для вас. Проблема в том, что если вы уже получили результаты подсчета, как использовать ggplot2 для рисования гистограммы, как и в случае с обычным & quot; barplot & quot; команда? boyang
ОК, это более разумно. Теперь добавьте эту дополнительную информацию к вашему вопросу, и я изменю свое отрицательное мнение. А также добавьте пример кода, то есть покажите, что вы сделали и где застряли. Andrie

Ваш Ответ

2   ответа
0

tidyr:

Самая большая проблема здесь заключается в том, что вам нужно преобразовать ваши данные в аккуратный формат. Я настоятельно рекомендую прочитать R для Data Science (http://r4ds.had.co.nz/), чтобы вы начали работать с аккуратными данными и ggplot.

В общем, хорошее практическое правило заключается в том, что если вам нужно ввести несколько экземпляров одного и того же объекта, возможно, существует решение в формате ваших данных, которое позволит вам поместить все вaes() функция на верхнем уровнеggplot(), В этом случае вам нужно использоватьgather() организовать ваши данные соответствующим образом.

library(tidyverse)

# I had some trouble recreating your data, so I just did it myself here
data <- tibble(type = letters[1:9], 
               repeat_1 = abs(rnorm(9)), repeat_2  
               =abs(rnorm(9)), 
               repeat_3 = abs(rnorm(9)))

data_gathered <- data %>%
  gather(repeat_number, value, 2:4)

ggplot(data_gathered, aes(x = type, y = value, fill = repeat_number)) +
geom_col(position = "dodge")

enter image description here

32

что вы должны использоватьstat="identity" вgeom_bar сказать ggplot не суммировать ваши данные.

dat <- read.table(text="
cars    trucks  suvs
1   2   4
3   5   4
6   4   6
4   5   6
9   12  16", header=TRUE, as.is=TRUE)
dat$day <- factor(c("Mo", "Tu", "We", "Th", "Fr"), 
             levels=c("Mo", "Tu", "We", "Th", "Fr"))

library(reshape2)
library(ggplot2)

mdat <- melt(dat, id.vars="day")
head(mdat)
ggplot(mdat, aes(variable, value, fill=day)) + 
  geom_bar(stat="identity", position="dodge")

enter image description here

Похожие вопросы