GGplot 2堆积条似乎随机订购

时间:2018-12-07 09:45:30

标签: r ggplot2 bar-chart

我想绘制一些虚拟数据的结果(见下文)。我想使用(堆叠的条形图和ggplot2) 该图应区分配置文件(facet_grid(Profile~.)),并按问题类别以堆积的条形图显示答案值的结果。我使用了以下代码:

  ggplot(profile_results, aes(x=Question, fill=Answer, y=Value)) + 
    geom_bar( stat="identity") + 
    scale_fill_brewer(palette = "Set1") + 
    coord_flip() + 
    facet_grid(Profile~.)

但是,结果却很奇怪。 profle_analysis_result

我还尝试将因素用于我的答案类别       my_levels = c(“完全不同意”,“不同意”,“不确定”,“同意”,“完全同意”)       profile_results $ Answer <-factor(profile_results $ Answer,level = my_levels)

,没有任何结果。 我还使用了aes()订单选项(order=Answer),但没有成功。

我想念什么?

===编辑1 重新排序结果(如@Rohit所建议的)也无济于事。

my_levels =  c("Strongly Disagree", "Disagree", "Undecided", "Agree", "Strongly Agree")
profile_results$Answer <- ordered(profile_results$Answer, my_levels)
profile_results= profile_results[order(profile_results$Answer),]

ggplot(profile_results, aes(x=Question, fill=Answer, y=Value, ordered=TRUE)) + 
  geom_bar( stat="identity") + 
  scale_fill_brewer(palette = "Set1") + 
  coord_flip() + 
  facet_grid(Profile~.)

second_try

===编辑2

请在https://pastebin.com/igFiaBTR此处找到dput

(短路)

 Profile   Question            Answer              Value
2  technical     expect Strongly Disagree  0.166666666666667
6  technical     expect    Strongly Agree  0.166666666666667
7  technical       help Strongly Disagree  0.166666666666667
11 technical       help    Strongly Agree  0.166666666666667
12 technical understand Strongly Disagree  0.166666666666667
17 technical      clear Strongly Disagree  0.333333333333333
18 technical      clear          Disagree               0.25
19 technical      clear         Undecided  0.166666666666667
20 technical      clear             Agree 0.0833333333333333
21 technical      clear    Strongly Agree  0.166666666666667
22  Tracking     expect Strongly Disagree 0.0833333333333333
23  Tracking     expect          Disagree  0.166666666666667
24  Tracking     expect         Undecided 0.0833333333333333
49  Interest       help         Undecided 0.0833333333333333
50  Interest       help             Agree  0.333333333333333
51  Interest       help    Strongly Agree 0.0833333333333333
52  Interest understand Strongly Disagree  0.166666666666667
53  Interest understand          Disagree                  0
54  Interest understand         Undecided 0.0833333333333333
55  Interest understand             Agree  0.416666666666667
56  Interest understand    Strongly Agree  0.333333333333333
57  Interest      clear Strongly Disagree  0.166666666666667
58  Interest      clear          Disagree  0.166666666666667
59  Interest      clear         Undecided               0.25
60  Interest      clear             Agree  0.333333333333333
61  Interest      clear    Strongly Agree 0.0833333333333333

2 个答案:

答案 0 :(得分:3)

这是因为您的Value变量的类型为character。首先转换为数字将使您可以使用factor级别对条形进行排序。

profile_results$Value <- as.numeric(profile_results$Value)
my_levels =  c("Strongly Disagree", "Disagree", "Undecided", "Agree", "Strongly Agree")
profile_results$Answer <- factor(profile_results$Answer, my_levels)


ggplot(profile_results, aes(x=Question, fill=Answer, y=Value)) + 
  geom_bar( stat="identity") + 
  scale_fill_brewer(palette = "Set1") + 
  coord_flip() + 
  facet_grid(Profile~.)

答案 1 :(得分:0)

这似乎可以解决您的问题:

if let ind = country.firstIndex(of: "America"){
    country[ind] = "US"
}