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

bob*_*bob 5 r ggplot2

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

这是我的R代码:

ggplot(results, aes(x=Protocol, y=Time, fill=Phase)) + 
  geom_bar(stat="identity") + coord_flip()
Run Code Online (Sandbox Code Playgroud)

它产生了这个图: 示例图

我想将此图表居中,以便第1阶段和第2阶段位于左侧,第3阶段和第4阶段位于右侧.

这是我正在寻找的一个粗略的想法.但是想象一下,中心线是时间0,时间在任何一个方向都是积极的: 目标示例

我想我应该背靠背制作两张图?

And*_*nCH 6

这种类型的图表用于类似于类型的调查数据,其显示围绕中心点的正面和负面感知

你想做什么我在2011年初的一篇文章中称之为"净堆积分布",也被称为分歧条形图.你会发现它以两种方式提到.威拉德·布林顿在1939年出版的"平面展示"一书中使用了它.那里有很多东西.

我的示例和解释,包含Tableau代码:http://www.organizationview.com/net-stacked-distribution-a-better-way-to-visualize-likert-data

Naomi Robbins写了一篇论文:http://www.amstat.org/membersonly/proceedings/2011/papers/300784_64164.pdf

一些R例子:

Jason Bryer有一个Likert包,有一个相应的网站:http://jason.bryer.org/likert/

HH包在格子中实现它

Cross Validated的一个非常好的解释:https://stats.stackexchange.com/questions/25109/visualizing-likert-responses-using-r-or-spss

Jason Becker:http://blog.jsonbecker.com/2012/07/ranked-likert-scale-visualization.html

Ethan Brown:http://statisfactions.com/2012/improved-net-stacked-distribution-graphs-via-ggplot2-trickery/

Daniel Luedecke:http://strengejacke.wordpress.com/2013/07/17/plotting-likert-scales-net-stacked-distributions-with-ggplot-rstats/

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

我已经在这些图表上做了一些可用性测试,虽然它们比其他许多价值表现得更好,但是像净数字一样简单(正面情绪 - 负面情绪,类似于净推动者得分的计算方式)似乎是首选.


jor*_*ran 2

这就是我的意思:

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()
Run Code Online (Sandbox Code Playgroud)

commapos实际上,当我完成类似的事情时,我只是从自己现有的代码中获取了格式化程序。您可能不想要精确的格式,但这abs(x)是关键部分。

另外,请注意,您的 Phase 变量是一个字符/因子,因此为了从原始版本中获取颜色条,我必须强制返回整数。

而且,正如我提到的,当使用小于零的值时,ggplot 会抱怨堆叠没有明确定义。如果您尝试此操作而不将数据框分为正值/负值,您就会明白原因。