假設我有一個資料框:
df<-data.frame(specie=c('apple','banana','orange'),total=c(1000,500,850),fresh=c(NA,250,700),processed=c(NA,250,150))
請注意,對于 Apple,只有 Total value 可用。我想創建一個條形圖,顯示每個物種的新鮮值和加工值,并僅顯示新鮮值和加工值是 NA 的 Apple 案例的總值。
我嘗試使用下面的代碼,但沒有得到我想要的情節:
p<-df %>% ggplot(aes(x=total,y=specie))
p geom_col() geom_col(aes(x=fresh,fill="fresh")) geom_col(aes(x=processed,fill="processed"))
為什么總面積超過新鮮和加工?

uj5u.com熱心網友回復:
您需要重新處理資料集,使列名稱成為變數的形式,并且所有值都在同一列中。
df<-data.frame(specie=c('apple','banana','orange'),unknow=c(1000,NA,NA),fresh=c(NA,250,700),processed=c(NA,250,150))
df <- df %>% tidyr::pivot_longer(cols = c("unknow", "fresh", "processed"),names_to = "type")
ggplot2::ggplot()
ggplot2::geom_bar(data = df,
mapping = ggplot2::aes(x = specie,
y = value,
fill = type),
stat = "identity")
uj5u.com熱心網友回復:
所以,你有三個類別。這些將條形重疊在另一個之上。所以 ggplot 繪制 NA 條,然后是頂部的新鮮條,最后是處理過的條。我想你想要堆積條形圖,把總數加起來。因此,相反,您將需要一個更長的資料框,其中包含一個水果型別列,并且您不需要總數。您在繪圖時將填充映射到型別上。像這樣:
df<-data.frame(specie=c('apple','banana','orange', 'banana','orange'),type = c(NA, "fresh", "fresh", "processed","processed"), num=c(1000, 250, 700,250,150))
df %>% ggplot(aes(x=num,y=specie, fill= type)) geom_col(position='stack')

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443273.html
