我知道,3D 条形图是一种罪过。但我被要求这样做,作为权衡,我建议只制作一个比栏顶部和右侧的栏颜色稍深的边框。像那样,条形图会有某种“阴影”(呃),但至少你仍然可以比较它们。
有没有办法做到这一点?
ggplot(diamonds, aes(clarity)) + 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
值是由生成as.numeric()
的clarity
并添加常量 - 因为xmin
常量应小于条形宽度的一半,而常量应大于条形宽度xmax
的一半。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")