#r
#r #ggplot2 #гистограмма
Вопрос:
Я получаю эту ошибку при построении гистограммы, и я не могу избавиться от нее, я пробовал как qplot, так и ggplot, но все та же ошибка.
Ниже приведен мой код:
library(dplyr)
library(ggplot2)
#Investigate data further to build a machine learning model
data_country = data %>%
group_by(country) %>%
summarise(conversion_rate = mean(converted))
#Ist method
qplot(country, conversion_rate, data = data_country,geom = "bar", stat ="identity", fill = country)
#2nd method
ggplot(data_country) aes(x=country,y = conversion_rate) geom_bar()
Ошибка:
stat_count() must not be used with a y aesthetic
Данные в data_country:
country conversion_rate
<fctr> <dbl>
1 China 0.001331558
2 Germany 0.062428188
3 UK 0.052612025
4 US 0.037800687
Ошибка появляется в гистограмме, а не в пунктирной диаграмме.
Ответ №1:
Во-первых, ваш код немного не в порядке. aes()
является аргументом в ggplot()
, вы не используете ggplot(...)
aes(...) layers
Во-вторых, из файла справки ?geom_bar
:
По умолчанию geom_bar использует stat=»count», что делает высоту столбца пропорциональной количеству обращений в каждой группе (или, если указан эстетический вес, сумме весов). Если вы хотите, чтобы высоты столбцов представляли значения в данных, используйте stat=»identity» и сопоставьте переменную с эстетикой y.
Вам нужен второй случай, когда высота строки равна conversion_rate
So, что вы хотите…
data_country <- data.frame(country = c("China", "Germany", "UK", "US"),
conversion_rate = c(0.001331558,0.062428188, 0.052612025, 0.037800687))
ggplot(data_country, aes(x=country,y = conversion_rate)) geom_bar(stat = "identity")
Результат:
Комментарии:
1. Да, это сработало, спасибо за объяснение, я немного новичок в этом, ценю вашу помощь
2. Уточнение,
aes
на самом деле это функция. Аргументggplot
равенmapping
. Мы предоставляем это отображение черезaes
функцию, поэтому вы часто видите шаблонggplot(df, aes(...))
. Но шаблон ggplot(data_frame) aes(x = X, y = Y) тоже подходит. Помимо, возможно, улучшенной читаемости,aes
для изменения эстетики на готовом графике можно использовать отдельный вызов: p <- ggplot(iris) aes(x= Species, y= Sepal. Длина) geom_point(); q <- p aes(y =Лепесток. Длина)3. С 2020 года (и задолго до этого)
ggplot(...) aes(...) layers
все в порядке.
Ответ №2:
если вы хотите использовать свои данные, существующие в вашем фрейме данных, в качестве значения y, вы должны добавить stat = «identity» в параметр сопоставления. Функция geom_bar имеет значение y по умолчанию. Например,
ggplot(data_country)
geom_bar(mapping = aes(x = country, y = conversion_rate), stat = "identity")
Ответ №3:
Вы можете использовать geom_col() напрямую. Смотрите различия между geom_bar() и geom_col() по этой ссылке https://ggplot2.tidyverse.org/reference/geom_bar.html
geom_bar() делает высоту столбца пропорциональной количеству обращений в каждой группе Если вы хотите, чтобы высоты столбцов отображали значения в данных, используйте вместо этого geom_col() .
ggplot(data_country) aes(x=country,y = conversion_rate) geom_col()
Комментарии:
1. Могу подтвердить, что у меня была эта проблема, и это было самое простое решение.
Ответ №4:
Я искал то же самое, и это также может сработать
p.Wages.all.A_MEAN <- Wages.all %>%
group_by(`Career Cluster`, Year)%>%
summarize(ANNUAL.MEAN.WAGE = mean(A_MEAN))
имена (p.Заработная плата.все.A_MEAN)
[1] «Кластер карьеры» «Год» «ГОДОВАЯ.СРЕДНЯЯ.ЗАРАБОТНАЯ ПЛАТА»
p.Wages.all.a.mean <- ggplot(p.Wages.all.A_MEAN, aes(Year, ANNUAL.MEAN.WAGE , color= `Career Cluster`))
geom_point(aes(col=`Career Cluster` ), pch=15, size=2.75, alpha=1.5/4)
theme(axis.text.x = element_text(color="#993333", size=10, angle=0)) #face="italic",
p.Wages.all.a.mean