【发布时间】:2013-11-13 22:35:22
【问题描述】:
我知道,3D 条形图是一种罪过。但我被要求这样做,作为权衡,我建议只制作一个比栏顶部和右侧的栏颜色稍深的边框。像那样,条形图会有某种“阴影”(呃),但至少你仍然可以比较它们。
有没有办法做到这一点?
ggplot(diamonds, aes(clarity)) + geom_bar()
【问题讨论】:
标签: r ggplot2 border bar-chart geom-bar
我知道,3D 条形图是一种罪过。但我被要求这样做,作为权衡,我建议只制作一个比栏顶部和右侧的栏颜色稍深的边框。像那样,条形图会有某种“阴影”(呃),但至少你仍然可以比较它们。
有没有办法做到这一点?
ggplot(diamonds, aes(clarity)) + geom_bar()
【问题讨论】:
标签: r ggplot2 border bar-chart geom-bar
另一种可能性,使用两组geom_bar。第一组,绿色的,稍微高一点,向右偏移。我从@Didzis Elferts 借用数据。
ggplot(data = df2) +
geom_bar(aes(x = as.numeric(clarity) + 0.1, y = V1 + 100),
width = 0.8, fill = "green", stat = "identity") +
geom_bar(aes(x = as.numeric(clarity), y = V1),
width = 0.8, stat = "identity") +
scale_x_continuous(name = "clarity",
breaks = as.numeric(df2$clarity),
labels = levels(df2$clarity))+
ylab("count")
【讨论】:
正如您已经说过的 - 3D 条形图“不好”。您不能直接在 ggplot2 中执行此操作,但这里有一个可能的解决方法。
首先,制作包含清晰度级别和每个级别的相应计数的新数据框。
library(plyr)
df2<-ddply(diamonds,.(clarity),nrow)
然后在ggplot() 调用中使用新数据框和clarity 作为x 值和V1(计数)作为y 值并添加geom_blank() - 这将使x 轴具有我们需要的级别。然后添加geom_rect() 为条形生成阴影 - 这里xmin 和xmax 值是从clarity 生成as.numeric() 并添加常量 - 因为xmin 常量应该小于条形宽度的一半和@987654333 @ 常数大于条宽的一半。 ymin 是 0,ymax 是 V1(计数)加上一些常数。最后在此阴影上方添加geom_bar(stat="identity") 以实际绘制条形图。
ggplot(df2,aes(clarity,V1)) + geom_blank()+
geom_rect(aes(xmin=as.numeric(clarity)-0.38,
xmax=as.numeric(clarity)+.5,
ymin=0,
ymax=V1+250),fill="green")+
geom_bar(width=0.8,stat="identity")
【讨论】: