簡體   English   中英

如何在堆積條形圖ggplot2之上組織百分比值

[英]How to organize percentage values on top of a stacked bar chart ggplot2

我在ggplot2中有一個非常傾斜的條形圖。

這是輸出文本輸出:

structure(list(Name = structure(c(1L, 3L, 4L, 5L, 6L, 2L, 1L, 
3L, 4L, 5L, 6L, 2L), .Label = c("A", "Average", "B", "C", "D", 
"E"), class = "factor"), variable = structure(c(1L, 1L, 1L, 1L, 
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Undiscounted", "Discounted"
), class = "factor"), value = c(18453601.4400001, 11941354.11, 
10748756.04, 6488253.74000001, 6078914.73000002, 2509377.50173653, 
1157538776.56, 833907589.89, 674006380.96, 574466340.26, 534854603.27, 
13191411.5509581)), row.names = c(NA, -12L), .Names = c("Name", 
"variable", "value"), class = "data.frame")

這是我用來繪制它的代碼:

library(ggplot2)
  text_size= 18
  label_bottom_size=18
  plot1<- ggplot(df1, aes(x = Name, y = value, fill = variable)) + 
    geom_bar(stat = "identity")+
    ggtitle(sprintf("Bar chart of Stuff" ))+
    theme(axis.title=element_text(size=text_size))+
    theme(plot.title=element_text(size=text_size+20))+
    theme(axis.text.x= element_text(size=label_bottom_size))+
    theme(axis.text.y= element_text(size=text_size))+
    theme(legend.text = element_text(size=text_size))+
    theme(legend.title = element_text(size=text_size))

由於某些條形圖非常小且文字不合適,我想要做的只是在每個條形圖上方(X%/ Y%)顯示百分比突破。 顯示的值以美元為單位。

謝謝!

這是一些hack使用data.table來聚合數據然后用geom_text顯示它(雖然可能有更好的方法)

library(data.table)
temp <- data.table(df1)[, per := (value/sum(value))*100, by = Name]
temp <- temp[, list(value = sum(value), 
                    per = paste(sprintf("%.02f%%", per), collapse = " / "),
                    variable = variable), by = Name]

library(ggplot2)
text_size= 18
label_bottom_size=18
ggplot(df1, aes(x = Name, y = value, fill = variable)) + 
  geom_bar(stat = "identity")+
  ggtitle(sprintf("Bar chart of Stuff" ))+
  theme(axis.title=element_text(size=text_size),
  plot.title=element_text(size=text_size+20),
  axis.text.x= element_text(size=label_bottom_size),
  axis.text.y= element_text(size=text_size),
  legend.text = element_text(size=text_size),
  legend.title = element_text(size=text_size)) +
  geom_text(data = temp, aes(x = Name, y = value, label = per), vjust=-0.3)

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM