使用ggplot2我正在创建一个直方图,在横轴上有一个因子,另一个因素是填充颜色,使用躲闪位置.我的问题是填充因子有时只取一个值作为水平系数的值,并且没有任何东西可以躲避条占据整个宽度.有没有办法让它什么都不躲闪,所以所有的条宽都一样?或者相当于绘制0的?
例如
ggplot(data = mtcars, aes(x = factor(carb), fill = factor(gear))) +
geom_histogram(position = "dodge")
Run Code Online (Sandbox Code Playgroud)

这个答案有几个想法.在新版本发布之前也有人问过,所以也许有些事情发生了变化?使用facet(也在这里显示)我不喜欢我的情况,虽然我想编辑数据和使用geom_bar可以工作,但它感觉不优雅.而且,当我尝试使用facetting时
ggplot(mtcars, aes(x = factor(carb), fill = factor(gear))) +
geom_bar() + facet_grid(~factor(carb))
Run Code Online (Sandbox Code Playgroud)
我收到错误"layout_base中的错误(数据,cols,drop = drop):至少一个图层必须包含用于facetting的所有变量"
我想我可以生成一个计数数据框然后使用geom_bar,
mtcounts <- ddply(subset(mtcars, select = c("carb", "gear")),
.fun = count, .variables = c("carb", "gear"))
Run Code Online (Sandbox Code Playgroud)
填写0不存在的水平.有谁知道这是否有效或是否有更好的方法?
San*_*att 11
更新 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"))
Run Code Online (Sandbox Code Playgroud)
图表:

| 归档时间: |
|
| 查看次数: |
2233 次 |
| 最近记录: |