我目前正在使用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,时间在任何一个方向都是积极的:

我想我应该背靠背制作两张图?
这种类型的图表用于类似于类型的调查数据,其显示围绕中心点的正面和负面感知
你想做什么我在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建议将其分割在中心轴的两侧.我认为中性值既不是正面的也不是负面的,因此我们应该将其有效地视为零,而不是在图表上显示它(它可以与次要图形或图表上的不适用值一起绘制).
我已经在这些图表上做了一些可用性测试,虽然它们比其他许多价值表现得更好,但是像净数字一样简单(正面情绪 - 负面情绪,类似于净推动者得分的计算方式)似乎是首选.
这就是我的意思:
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 会抱怨堆叠没有明确定义。如果您尝试此操作而不将数据框分为正值/负值,您就会明白原因。