gpt4 book ai didi

r - ggplot geom_bar : stack and center

转载 作者:行者123 更新时间:2023-12-04 11:16:56 24 4
gpt4 key购买 nike

我有一个以百分比表示的数据框,代表不同项目的列,行代表受访者在不同类别中回答的各自份额。我想制作一个堆叠的条形图。

library(ggplot2)
library(reshape2)
test<-data.frame(i1=c(16,40,26,18),
i2=c(17,46,27,10),
i3=c(23,43,24,10),
i4=c(19,25,20,36))
rownames(test)<-c("very i.","i.","less i.","not i.")

test.m<-melt(test)

ggplot(test.m, aes(x=variable, y=value, fill=value)) +
geom_bar(position="stack", stat="identity")

看起来不错,但我想要
a) 将条形居中:肯定答案(非常 i. 和 i)向上,底部的两个类(较少 i. 而不是 i.)向下。
b) 每个类别(非常 i、i、较少 i、非 i)具有相同的颜色。

任何帮助将非常感激。

最佳答案

最好使用类别名称作为分隔符而不是行名称:

test$category <- factor(c(3,4,2,1), labels=c("very i.","i.","less i.","not i."))

(因子水平的排序是根据堆叠条形图(最低: not i. ,最高: very i. )完成的。
test.m <- melt(test)

回答您的问题:
  • 如果某些值高于零而其他值低于零,则堆叠条形图效果不佳。因此,创建了两个单独的条形图(一个带有负值,一个带有正值)。
  • 新栏目category用于 fill参数将每个类别映射到不同的颜色。

  • 完整代码:
    ggplot(test.m, aes(x=variable, fill=category)) + 
    geom_bar(data = subset(test.m, category %in% c("less i.","not i.")),
    aes(y = -value), position="stack", stat="identity") +
    geom_bar(data = subset(test.m, !category %in% c("less i.","not i.")),
    aes(y = value), position="stack", stat="identity")

    enter image description here

    关于r - ggplot geom_bar : stack and center,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421141/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com