У вас есть несколько проблем в вашем коде.
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))
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)
Это отвечает на ваш вопрос?