一种方法总是躲闪直方图?一种方法总是躲闪直方图?(A way to always dodge a h

2019-05-12 05:01发布

使用GGPLOT2我创建与横轴的因素和填充颜色的另一个因素直方图,使用躲过位置。 我的问题是填充因子有时只需要一个值水平因子的价值,并与没有躲闪栏占用了全宽。 有没有一种方法,使其躲闪没有让所有的栏宽度是一样的吗? 或者等价地绘制0的?

例如

ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) +
geom_histogram(position = "dodge")

这个答案有一对夫妇的想法。 也有人问发布新版本之前,也许什么变化? 使用方面(也显示在这里 )我不喜欢我的情况,但我想编辑数据,并使用geom_bar可以工作,但感觉不雅。 此外,当我试图磨制反正

ggplot(mtcars, aes(x = factor(carb), fill = factor(gear))) +
    geom_bar() + facet_grid(~factor(carb))

我得到的错误“在layout_base错误(数据的cols,一滴一滴=):至少一层必须包含用于磨制所有变量”

我想我可以生成计数的数据帧,然后使用geom_bar

mtcounts <- ddply(subset(mtcars, select = c("carb", "gear")),
    .fun = count, .variables = c("carb", "gear"))

填写不存在与0的水平。 有谁知道,如果将工作或是否有更好的办法?

Answer 1:

更新 geom_bar需要stat = "identity"

我不知道这是否是对你太晚了,但看到的答案,最近的文章在这里就是我会带Joran的建议预先计算的外部计数ggplot通话,并使用geom_bar 。 由于与答案等后,在两个步骤中得到的计数:第一,计数的交叉制表使用获得dcast ; 然后第二, melt的交叉制表。

library(ggplot2)
library(reshape2)

dat = dcast(mtcars, factor(carb) ~ factor(gear), fun.aggregate = length)
dat.melt = melt(dat, id.vars = "factor(carb)", measure.vars = c("3", "4", "5"))
dat.melt

(p <- ggplot(dat.melt, aes(x = `factor(carb)`, y = value, fill = variable)) + 
  geom_bar(stat = "identity", position = "dodge"))

图表:



Answer 2:

如图所示的这个答案 ,在新版本ggplot2 (版本> = 2.2.1.900)有一个简单的方法: position_dodge涨势preserve说法,如果设置为"single"将始终躲闪。

ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) +
  geom_bar(position = position_dodge(preserve = "single"))



文章来源: A way to always dodge a histogram?
标签: r ggplot2