4

我知道,3D 条形图是一种罪过。但我被要求这样做,作为权衡,我建议只制作一个比栏顶部和右侧的栏颜色稍深的边框。像那样,条形图会有某种“阴影”(呃),但至少你仍然可以比较它们。

有没有办法做到这一点?

ggplot(diamonds, aes(clarity)) + geom_bar() 
4

2 回答 2

3

另一种可能性,使用两组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")

在此处输入图像描述

于 2013-11-13T01:28:32.060 回答
3

正如您已经说过的 - 3D 条形图是“坏的”。您不能直接在 ggplot2 中执行此操作,但这里有一个可能的解决方法。

首先,制作包含清晰度级别和每个级别的相应计数的新数据框。

library(plyr)
df2<-ddply(diamonds,.(clarity),nrow) 

然后在ggplot()调用中使用新的数据框和clarityx 值和V1(计数)作为 y 值并添加geom_blank()- 这将使 x 轴具有我们需要的级别。然后添加geom_rect()以生成条形图的阴影 - 此处xminxmax值是由生成as.numeric()clarity并添加常量 - 因为xmin常量应小于条形宽度的一半,而常量应大于条形宽度xmax的一半。ymin是 0 并且ymaxV1(计数)加上一些常数。最后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")

在此处输入图像描述

于 2013-11-12T12:02:06.487 回答