Создайте гистограмму, используя ggplot2 и dplyr в R - PullRequest
1 голос
/ 25 марта 2020

Необходимо построить графическую панель

Ошибка вывода: отображение должно быть создано с помощью aes() or aes _ () `.

Код:

cbPalette <- c("#CC79A7", "#D55E00", "#56B4E9", "#F0E442", "#009E73", "#0072B2", "#999999", "#E69F00")

mydata %>%
    group_by(workclass) %>%
    summarise(mean = mean(education.num, na.rm = TRUE)) %>% 
    ggplot(new_data,aes(workclass, education.num, fill = workclass)) +
    geom_bar(stat = "identity") +
    labs(title = "Average Education Num vs workclass",
       x = "Workclass",
       y = "Average Education Num") +
    theme(axis.text.x = element_text(size = 10, angle = 90, hjust = 1))+
    scale_fill_manual(values = cbPalette[1]) +
    theme(axis.text = element_text(size = 10),
        axis.title = element_text(size = 10), 
        legend.title = element_text(size = 10)) +
    scale_fill_manual(values = alpha(cbPalette)) 

Любые предложения

Ожидаемый результат:

enter image description here

1 Ответ

2 голосов
/ 25 марта 2020

У вас есть несколько проблем в вашем коде.

1) Когда вы используете summarise, ваш столбец education.num будет заменен на mean в вашем наборе данных, как показано ниже:

library(dplyr)

mydata %>%
  group_by(workclass) %>%
  summarise(mean = mean(education.num, na.rm = TRUE))

# A tibble: 9 x 2
  workclass         mean
  <chr>            <dbl>
1 ?                 9.26
2 Federal-gov      11.0 
3 Local-gov        11.0 
4 Never-worked      7.43
5 Private           9.88
6 Self-emp-inc     11.1 
7 Self-emp-not-inc 10.2 
8 State-gov        11.4 
9 Without-pay       9.07

2), затем в ваш ggplot, вы вызываете другой фрейм данных new_data и пытаетесь повторно использовать education.num вместо mean. Вы можете исправить это, выполнив:

library(dplyr)
library(ggplot2)

mydata %>%
  group_by(workclass) %>%
  summarise(mean = mean(education.num, na.rm = TRUE)) %>% 
  ggplot(aes(workclass, mean, fill = workclass)) +
  geom_bar(stat = "identity") +
  labs(title = "Average Education Num vs workclass",
       x = "Workclass",
       y = "Average Education Num") +
  theme(axis.text.x = element_text(size = 10, angle = 90, hjust = 1),
        axis.text = element_text(size = 10),
        axis.title = element_text(size = 10), 
        legend.title = element_text(size = 10)) 

enter image description here

3) Наконец, вы пытаетесь заменить значения заполнения на cbPalette, однако вы вы предоставляете только 8 значений, тогда как у вас есть 9 различных классов, поэтому вам нужно либо добавить новый цвет и удалить ?, например:

library(dplyr)
library(ggplot2)

mydata %>%
  group_by(workclass) %>%
  summarise(mean = mean(education.num, na.rm = TRUE)) %>% 
  filter(workclass != "?") %>%
  ggplot(aes(workclass, mean, fill = workclass)) +
  geom_bar(stat = "identity") +
  labs(title = "Average Education Num vs workclass",
       x = "Workclass",
       y = "Average Education Num") +
  theme(axis.text.x = element_text(size = 10, angle = 90, hjust = 1),
        axis.text = element_text(size = 10),
        axis.title = element_text(size = 10), 
        legend.title = element_text(size = 10)) +
  scale_fill_manual(values = cbPalette) 

enter image description here

Это отвечает на ваш вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...