R ggplot2: stat_count () không được sử dụng với lỗi thẩm mỹ ay trong biểu đồ thanh


89

Tôi gặp lỗi này khi vẽ biểu đồ thanh và tôi không thể loại bỏ nó, tôi đã thử cả qplot và ggplot nhưng vẫn bị lỗi như vậy.

Sau đây là mã của tôi:

 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()

Lỗi:

  stat_count() must not be used with a y aesthetic

Dữ liệu trong data_country:

    country conversion_rate
    <fctr>           <dbl>
  1   China     0.001331558
  2 Germany     0.062428188
  3      UK     0.052612025
  4      US     0.037800687

Lỗi xảy ra trong biểu đồ thanh chứ không phải trong biểu đồ chấm.

Câu trả lời:


147

Trước hết, mã của bạn hơi sai. aes()là một đối số trong ggplot(), bạn không sử dụng ggplot(...)+aes(...) + layers

Thứ hai, từ tệp trợ giúp ?geom_bar:

Theo mặc định, geom_bar sử dụng stat = "count", điều này làm cho chiều cao của thanh tỷ lệ với số trường hợp trong mỗi nhóm (hoặc nếu giá trị trọng lượng được cung cấp, tổng trọng lượng). Nếu bạn muốn chiều cao của các thanh đại diện cho các giá trị trong dữ liệu, hãy sử dụng stat = "Identity" và ánh xạ một biến cho thẩm mỹ y.

Bạn muốn trường hợp thứ hai, trong đó chiều cao của thanh bằng với conversion_rateVì vậy, những gì bạn muốn là ...

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")

Kết quả:

nhập mô tả hình ảnh ở đây


1
Có mà làm việc nhờ cho việc giải thích nó, tôi chút mới này đánh giá cao sự giúp đỡ của bạn
Uasthana

Làm rõ, aestrên thực tế là một chức năng. Đối số ggplotmapping. Chúng tôi cung cấp ánh xạ đó thông qua aeshàm, vì vậy bạn sẽ thấy mẫu ggplot(df, aes(...))rất nhiều. Nhưng mẫu ggplot (data_frame) + aes (x = X, y = Y) cũng tốt. Bên cạnh khả năng đọc có thể được cải thiện, việc gọi aesriêng có thể được sử dụng để sửa đổi tính thẩm mỹ trên một mảnh đất được tạo sẵn: p <- ggplot (iris) + aes (x = Species, y = Sepal.Length) + geom_point (); q <- p + aes (y = Petal.Length)
teofil

7

khi bạn muốn sử dụng dữ liệu hiện có trong khung dữ liệu của mình dưới dạng giá trị y, bạn phải thêm stat = "ID" trong tham số ánh xạ. Hàm geom_bar có giá trị y mặc định. Ví dụ,

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

4

Bạn có thể sử dụng trực tiếp geom_col (). Xem sự khác biệt giữa geom_bar () và geom_col () trong liên kết này https://ggplot2.tidyverse.org/reference/geom_bar.html

geom_bar () làm cho chiều cao của thanh tỷ lệ với số trường hợp trong mỗi nhóm Nếu bạn muốn chiều cao của các thanh đại diện cho các giá trị trong dữ liệu, hãy sử dụng geom_col () để thay thế.

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

0

Tôi đã tìm kiếm điều tương tự và điều này cũng có thể hoạt động

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

tên (p.Wages.all.A_MEAN) [1] "Nhóm nghề nghiệp" "Năm" "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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.