R 使用ggplot创建以零为中心的堆叠条形图

R 使用ggplot创建以零为中心的堆叠条形图,r,ggplot2,R,Ggplot2,我目前正在使用R中的ggplot2处理堆叠水平条形图 这是我的R代码: ggplot(results, aes(x=Protocol, y=Time, fill=Phase)) + geom_bar(stat="identity") + coord_flip() 它生成了这个图表: 我想把这张图表居中,让第一阶段和第二阶段在左边,第三阶段和第四阶段在右边 这是我要找的东西的大致情况。但假设中心线是时间0,时间在两个方向上都为正: 我想我应该把两张图表连在一起?我的意思是: libra

我目前正在使用R中的ggplot2处理堆叠水平条形图

这是我的R代码:

ggplot(results, aes(x=Protocol, y=Time, fill=Phase)) + 
  geom_bar(stat="identity") + coord_flip()
它生成了这个图表:

我想把这张图表居中,让第一阶段和第二阶段在左边,第三阶段和第四阶段在右边

这是我要找的东西的大致情况。但假设中心线是时间0,时间在两个方向上都为正:

我想我应该把两张图表连在一起?

我的意思是:

library(scales)
dat <- read.csv("~/Downloads/bench.csv",stringsAsFactors = TRUE)
dat$Time1 <- ifelse(dat$Phase %in% c('Decode','Deserialize'),-dat$Time,dat$Time)

up <- dat[dat$Time1 >= 0,]
down <- dat[dat$Time1 < 0,]

commapos <- function(x, ...) {
    format(abs(x), big.mark = ",", trim = TRUE,
           scientific = FALSE, ...)
}

ggplot() + 
    geom_bar(data = up,aes(x = Protocol,y = Time1,fill = as.integer(Phase)),stat = "identity") + 
    geom_bar(data = down,aes(x = Protocol,y = Time1,fill = as.integer(Phase)),stat = "identity") + 
    scale_y_continuous(labels = commapos) +
    coord_flip()
库(比例)

dat这种类型的图表被大量用于likert类型的调查数据,这些数据显示了围绕中心点的积极和消极看法

我在2011年初的一篇文章中称之为“净堆积分布”,也被称为发散条形图。你会发现它在两个方面都被提及。威拉德·布林顿(Willard Brinton)在其1939年的著作《图形展示》(Graphic Presentation)中使用了这一概念。外面有很多

我的示例和说明,以及Tableau的代码:

内奥米·罗宾斯就此写了一篇论文:

几个R示例

Jason Bryer的Likert软件包中有一个相应的站点:

HH包在lattice中实现它

关于交叉验证的一个非常好的解释:

杰森·贝克尔:

伊桑·布朗:

丹尼尔·鲁德克:

这些图表上最大的争议是如何处理中性值。Naomi建议将其拆分为中心轴的任意一侧。我认为中性值既不是正的也不是负的,因此我们应该有效地将其视为零,而不是显示在图表上(它可以与不适用的值一起绘制在二次图形或图表上)


我在这些图表上做了一些可用性测试,虽然它们比许多其他价值观表现得更好,但一些简单的东西,如净数字(积极情绪-消极情绪,类似于净促销员得分的计算方式)似乎更受欢迎。

没有示例数据可供使用,我所能做的就是在注释中画出一些东西:将时间值的符号切换为负值,以使相位值低于零。然后,您需要在x轴上使用自定义标签,以便所有记号都标记为正值。IIRC,ggplot即使工作正常,也会抛出大量警告……哦,你必须将向上/向下的条分成不同的
geom_条
调用。@joran这是我使用的数据:看起来很棒!一件小事,从左到右,相位是1,2:3,4。我们能按1,2:4,3的顺序排列吗?谢谢!我不知道该怎么称呼这种类型的图形,所以我在研究时遇到了困难。好消息@鲍伯:这个问题有点边缘化,可能更多的是stats.stackexchange.com领域