1. ホーム
  2. r

各スタックの合計が100%になるようにスケーリングされたスタックバープロットの作成

2023-11-12 17:44:08

質問

このようなdata.frameがあります。

df <- read.csv(text = "ONE,TWO,THREE
                       23,234,324
                       34,534,12
                       56,324,124
                       34,234,124
                       123,534,654")

以下のようなパーセント棒グラフを作りたいのですが(LibreOffice Calcで作りました)。

したがって、棒グラフは、すべてのスタックが同じ高さを持ち、合計が 100% になるように標準化される必要があります。今のところ、私が得ることができたのは、積み重ねられた棒グラフ (パーセントではない) だけです。

barplot(as.matrix(df))

何かお手伝いできることはありますか?

どのように解決するのですか?

以下は、それを使った解決方法です。 ggplot パッケージ (バージョン 3.x) を使用した解決策です。

を使用しています。 position の引数に geom_bar に設定された position = "fill" . また position = position_fill() の引数を使用したい場合は position_fill() ( vjustreverse ).

データは 'wide' 形式であることに注意してください。 ggplot2 では 'long' 形式である必要があることに注意してください。したがって、まず gather というデータを作成します。

library(ggplot2)
library(dplyr)
library(tidyr)

dat <- read.table(text = "    ONE TWO THREE
1   23  234 324
2   34  534 12
3   56  324 124
4   34  234 124
5   123 534 654",sep = "",header = TRUE)

# Add an id variable for the filled regions and reshape
datm <- dat %>% 
  mutate(ind = factor(row_number())) %>%  
  gather(variable, value, -ind)

ggplot(datm, aes(x = variable, y = value, fill = ind)) + 
    geom_bar(position = "fill",stat = "identity") +
    # or:
    # geom_bar(position = position_fill(), stat = "identity") 
    scale_y_continuous(labels = scales::percent_format())

<イグ