删除 ggplot2 geom_bar 中条形之间的 space
Remove space between bars in ggplot2 geom_bar
我正在寻找 "dodge" 条形图的条形图。以下 R 代码在条形之间留下白色 space。其他答案 like this one 展示了如何为一组的条形部分完成此操作,但这似乎不适用于 x 轴上每个因子的不同条形。
require(ggplot2)
dat <- data.frame(a=c("A", "B", "C"), b=c(0.71, 0.94, 0.85), d=c(32, 99, 18))
ggplot(dat, aes(x= a, y = b, fill=d, width = d/sum(d))) +
geom_bar(position=position_dodge(width = 0.1), stat="identity")
使用宽度变量改变了外观,但似乎不可能让条形并排放置,同时仍然保留它们有意义的宽度差异(在此图中也由填充颜色冗余表示)。
使用连续的 x 轴并重新标记它是可能的。
ggplot(dat, aes(x=cumsum(d/sum(d))) - d/sum(d)/2, y = b, fill=d, width=d/sum(d))) +
geom_bar(stat="identity", position=position_dodge()) +
scale_x_continuous(breaks=cumsum(dat$d/sum(dat$d)) - dat$d/sum(dat$d)/2, labels=dat$a)
或者这不是您要找的东西
我会先生成我的 x-positions 和宽度,然后将它们传递给美学并覆盖以制作您的因子标签:
首先,存储宽度
dat$width <-
dat$d / sum(dat$d)
然后,假设您的 data.frame 按照您希望绘制的顺序排列,您可以将位置设置为宽度的累积和。但是请注意,累积总和是您希望条形 右边缘 所在的位置,因此要获得中心,您需要减去宽度的一半:
dat$loc <-
cumsum(dat$width) - dat$width/2
然后,将其全部传递给 ggplot
调用,显式设置标签:
ggplot(dat, aes(x= loc, y = b, fill=d, width = width)) +
geom_bar(stat="identity") +
scale_x_continuous(breaks = dat$loc
, labels = dat$a)
给予
我不确定这种方法是否可取,但这应该可以完成工作。
我正在寻找 "dodge" 条形图的条形图。以下 R 代码在条形之间留下白色 space。其他答案 like this one 展示了如何为一组的条形部分完成此操作,但这似乎不适用于 x 轴上每个因子的不同条形。
require(ggplot2)
dat <- data.frame(a=c("A", "B", "C"), b=c(0.71, 0.94, 0.85), d=c(32, 99, 18))
ggplot(dat, aes(x= a, y = b, fill=d, width = d/sum(d))) +
geom_bar(position=position_dodge(width = 0.1), stat="identity")
使用宽度变量改变了外观,但似乎不可能让条形并排放置,同时仍然保留它们有意义的宽度差异(在此图中也由填充颜色冗余表示)。
使用连续的 x 轴并重新标记它是可能的。
ggplot(dat, aes(x=cumsum(d/sum(d))) - d/sum(d)/2, y = b, fill=d, width=d/sum(d))) +
geom_bar(stat="identity", position=position_dodge()) +
scale_x_continuous(breaks=cumsum(dat$d/sum(dat$d)) - dat$d/sum(dat$d)/2, labels=dat$a)
或者这不是您要找的东西
我会先生成我的 x-positions 和宽度,然后将它们传递给美学并覆盖以制作您的因子标签:
首先,存储宽度
dat$width <-
dat$d / sum(dat$d)
然后,假设您的 data.frame 按照您希望绘制的顺序排列,您可以将位置设置为宽度的累积和。但是请注意,累积总和是您希望条形 右边缘 所在的位置,因此要获得中心,您需要减去宽度的一半:
dat$loc <-
cumsum(dat$width) - dat$width/2
然后,将其全部传递给 ggplot
调用,显式设置标签:
ggplot(dat, aes(x= loc, y = b, fill=d, width = width)) +
geom_bar(stat="identity") +
scale_x_continuous(breaks = dat$loc
, labels = dat$a)
给予
我不确定这种方法是否可取,但这应该可以完成工作。