R 使用ggplot创建以零为中心的堆叠条形图
我目前正在使用R中的ggplot2处理堆叠水平条形图 这是我的R代码: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
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领域