【问题标题】:In ggplot2, can borders of bars be changed on only one side? (color, thickness)在ggplot2中,可以只在一侧更改条的边界吗? (颜色、厚度)
【发布时间】:2013-11-13 22:35:22
【问题描述】:

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

有没有办法做到这一点?

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

【问题讨论】:

    标签: r ggplot2 border bar-chart geom-bar


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      然后在ggplot() 调用中使用新数据框和clarity 作为x 值和V1(计数)作为y 值并添加geom_blank() - 这将使x 轴具有我们需要的级别。然后添加geom_rect() 为条形生成阴影 - 这里xminxmax 值是从clarity 生成as.numeric() 并添加常量 - 因为xmin 常量应该小于条形宽度的一半和@987654333 @ 常数大于条宽的一半。 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")
      

      【讨论】:

      • +1 寻求解决方法,但 Stephen Few 正在哭泣,我的眼睛在流血。
      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2013-07-14
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多