2017-03-28 6 views
0

テーブルを積み重ね棒グラフとしてプロットし、棒グラフにパーセンテージを付けたいとします。次に例を示します。スタックされた棒グラフ、パーセンテージ値を持つラベルバー

data <- matrix(c(34, 66, 22, 78), ncol = 2) 
data <- as.table(data) 
colnames(data) <- c("shop1", "shop2") 
rownames(data) <- c("prod1", "prod2") 

library(reshape2) 
data_m <- melt(data, varnames = c("Product", "Shop"), id.vars = "Product") 

library(scales) 
library(ggplot2) 
ggplot(data_m, aes(x = Shop, y = value, fill = Product)) + 
geom_bar(position = "fill", stat = "identity") + 
scale_y_continuous(labels = percent_format()) + 
labs(x = "", y = "") 

enter image description here

私は

geom_text(data = data_m, aes(x = Shop, y = value, 
         label = paste0((value/100) * 100,"%")), size=4) 

にラベルを追加しようとしたが、これは enter image description here

EDITになり:JanLauGeの答えで、私は

を取得します

enter image description here

ここでは、パーセンテージが間違って割り当てられています。

もう1つの発言:上記の例で仮定したように、テーブルの列合計が100でなく91と同じでない場合の対処方法は?

答えて

3

この代わり

geom_text(data = data_m, 
      aes(x = Shop, 
       y = value/max(value), 
       label = paste0(value/100,"%")), 
      size = 4) 

問題を試して:ラベル位置は、プロットエリア(= max(value) 0~1、1)に対するものです。

解決策:それに応じて値を再スケールします。


EDITthisポストの 重複。

あなたが探していることは、このされています

ggplot(data = data_m, 
     aes(x = Shop, 
      y = value, 
      fill = Product, 
      cumulative = TRUE)) + 
    geom_col() + 
    geom_text(aes(label = paste0(value/100,"%")), 
      position = position_stack(vjust = 0.5)) + 
    theme_minimal() 
+0

実際、同様 '値/ 100'を試してみてください。しかし、一日の終わりには、ラベルを正確にどこにしたいかによって異なります。各チャンクの下部、中央、または上部。 – JanLauGe

+0

理想的には、ラベルはhttp://t-redactyl.io/blog/2016/01/creating-plots-in-r-using-ggplot2-part-4-stacked-bar-のように各チャンクの中央にありました。 plots.html – Joe

+0

複製、編集を参照 – JanLauGe

関連する問題