R ggplot2 : stat_count ()는 막대 그래프에서 미적 오류와 함께 사용해서는 안됩니다.


91

막대 그래프를 그리는 동안이 오류가 발생하고 제거 할 수 없습니다. 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

오류는 점선 차트가 아니라 막대 차트에서 발생합니다.

답변:


149

먼저 코드가 약간 벗어났습니다. aes()의 인수이며 +를 ggplot()사용하지 않습니다.ggplot(...)aes(...) + layers

둘째, 도움말 파일에서 ?geom_bar:

기본적으로 geom_bar는 stat = "count"를 사용하여 각 그룹의 케이스 수에 바의 높이를 비율로 만듭니다 (또는 가중치 미학이 제공되는 경우 가중치의 합계). 막대의 높이가 데이터의 값을 나타내도록하려면 stat = "identity"를 사용하고 변수를 y 미학에 매핑합니다.

막대의 높이가 다음과 같은 두 번째 경우 conversion_rate를 원합니다 . 그래서 원하는 것은 ...

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
예 그게 설명하기위한 감사를했다, 나는이 거의 새로운 오전 당신의 도움에 감사
Uasthana

설명 aes은 사실 기능입니다. 의 인수 ggplotmapping입니다. aes함수를 통해 매핑을 제공 하므로 패턴 ggplot(df, aes(...))을 많이 볼 수 있습니다 . 그러나 ggplot (data_frame) + aes (x = X, y = Y) 패턴도 괜찮습니다. 가독성이 향상 될 수있는 것 외에도 별도로 호출 aes하여 미리 만들어진 플롯의 미학을 수정할 수 있습니다. p <-ggplot (iris) + aes (x = Species, y = Sepal.Length) + geom_point (); q <-p + aes (y = Petal.Length)
teofil

7

데이터 프레임에있는 데이터를 y 값으로 사용하려면 매핑 매개 변수에 stat = "identity"를 추가해야합니다. geom_bar 함수에는 기본 y 값이 있습니다. 예를 들면

ggplot(data_country)+
  geom_bar(mapping = aes(x = country, y = conversion_rate), stat = "identity")

6

geom_col ()을 직접 사용할 수 있습니다. 이 링크 https://ggplot2.tidyverse.org/reference/geom_bar.html 에서 geom_bar ()와 geom_col ()의 차이점을 참조하십시오.

geom_bar ()는 각 그룹의 케이스 수에 비례하는 막대의 높이를 만듭니다. 막대의 높이가 데이터의 값을 나타내도록하려면 geom_col ()을 대신 사용하십시오.

ggplot(data_country)+aes(x=country,y = conversion_rate)+geom_col()

이 문제가 있었는지 확인할 수 있으며 이것이 가장 간단한 해결책이었습니다.
Spence_p

0

나는 똑같은 것을 찾고 있었고 이것도 작동 할 수 있습니다.

p.Wages.all.A_MEAN <- Wages.all %>%
                  group_by(`Career Cluster`, Year)%>%
                  summarize(ANNUAL.MEAN.WAGE = mean(A_MEAN))

names (p.Wages.all.A_MEAN) [1] "커리어 클러스터" "연도" "ANNUAL.MEAN.WAGE"

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.