5

ggplot 2 を使用して積み上げ棒グラフを作成しようとしています。ワイド形式のデータは次のようになります。各セル内の数字は、応答の頻度です。

activity                         yes    no  dontknow
Social events                     27    3   3
Academic skills workshops         23    5   8
Summer research                   22    7   7
Research fellowship               20    6   9
Travel grants                     18    8   7
Resume preparation                17    4   12
RAs                               14    11  8
Faculty preparation               13    8   11
Job interview skills              11    9   12
Preparation of manuscripts        10    8   14
Courses in other campuses          5    11  15
Teaching fellowships               4    14  16
TAs                                3    15  15
Access to labs in other campuses   3    11  18
Interdisciplinary research         2    11  18
Interdepartamental projects        1    12  19

reshape2 を使用してこのテーブルを溶かし、

 melted.data(wide.data,id.vars=c("activity"),measure.vars=c("yes","no","dontknow"),variable.name="haveused",value.name="responses")

それは私が得ることができる限りです。X 軸に活動、Y 軸に回答の頻度、各棒グラフに「はい」、「いいえ」、「わからない」の分布を示す積み上げ棒グラフを作成したいと考えています。

私はもう試した

ggplot(melted.data,aes(x=activity,y=responses))+geom_bar(aes(fill=haveused))

しかし、それは正しい解決策ではないのではないかと心配しています

どんな助けでも大歓迎です。

4

1 に答える 1

5

あなたはそれがあなたの解決策について正しくないことが何であるかを言っていません。しかし、問題として解釈される可能性のあるいくつかの問題と、それぞれに対する1つの可能な解決策は次のとおりです。

  • x軸の目盛りラベルが互いにぶつかります。解決策-目盛りラベルを回転させます。
  • ラベル(および対応するバー)が表示される順序は、元のデータフレームの順序と同じではありません。解決策-因子「活動」のレベルを並べ替えます。
  • バー内にテキストを配置するには、vjustパラメータposition_stackを0.5に設定します

以下が始まりかもしれません。

    # Load required packages
library(ggplot2)
library(reshape2)

    # Read in data
df = read.table(text = "
activity                         yes    no  dontknow
Social.events                     27    3   3
Academic.skills.workshops         23    5   8
Summer.research                   22    7   7
Research.fellowship               20    6   9
Travel.grants                     18    8   7
Resume.preparation                17    4   12
RAs                               14    11  8
Faculty.preparation               13    8   11
Job.interview.skills              11    9   12
Preparation.of.manuscripts        10    8   14
Courses.in.other.campuses          5    11  15
Teaching.fellowships               4    14  16
TAs                                3    15  15
Access.to.labs.in.other.campuses   3    11  18
Interdisciplinay.research          2    11  18
Interdepartamental.projects        1    12  19", header = TRUE, sep = "")

    # Melt the data frame
dfm = melt(df, id.vars=c("activity"), measure.vars=c("yes","no","dontknow"),
    variable.name="haveused", value.name="responses")

    # Reorder the levels of activity
dfm$activity = factor(dfm$activity, levels = df$activity)

    # Draw the plot
ggplot(dfm, aes(x = activity, y = responses, group = haveused)) + 
geom_col(aes(fill=haveused)) +
theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.25)) +
geom_text(aes(label = responses), position = position_stack(vjust = .5), size = 3)  # labels inside the bar segments
于 2012-08-13T00:12:11.167 に答える