【问题标题】:ggplot: Adding horizontal lines to each bar + repositioning tick labelsggplot:向每个条形添加水平线+重新定位刻度标签
【发布时间】:2014-06-06 16:54:57
【问题描述】:

在使用 ggplot 时,我在格式化的两个方面遇到了一些困难。

首先,我希望能够为每个条添加水平线,使条看起来像这样:


(来源:eurosurveillance.org)

第二个,我想改变刻度标签的位置,使它们落在每个条之间,使标签看起来像这样

到目前为止我所拥有的:

values=runif(50,0,20)
sex=rep(c("Male","Female"),25)

df=data.frame(values,sex)

label=c("","0-5","5-10","10-15","15-20")
sep=seq(0,20,5)

ggplot(df, aes(x = values,fill=sex))+geom_bar(binwidth=5,colour="black")+
scale_x_discrete(breaks=sep,labels=label,limits=sep)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    很好的描述和可重复的例子!

    如果您的 x 轴是一个因素,则以条形为中心的轴标签是默认值。既然你知道你的 binwidths,只需使用 cut 为你做 binning:

    df$cutval <- cut(values, breaks = seq(0, 20, by = 5))
    ggplot(df, aes(x = cutval, fill = sex)) +
        geom_bar(colour = "black", width = 1)
    

    要获得与示例中完全相同的标签,您可以进行一些正则表达式编辑:

    library(stringr)
    # delete open parens and closing brackets
    levels(df$cutval) <- str_replace_all(levels(df$cutval), "\\(|\\]", "")
    # replace comma with tilde
    levels(df$cutval) <- str_replace_all(levels(df$cutval), "\\,", "~")
    

    屈服

    > levels(df$cutval)
    [1] "0~5"   "5~10"  "10~15" "15~20"
    

    要获得方框(所有这些水平线),您可以使用分组变量(我们需要先重新排序)。不能说我喜欢这个外观,但它就是:

    df <- df[order(df$cutval, df$sex), ]
    df$id <- 1:nrow(df)
    ggplot(df, aes(x = cutval, fill=sex, group = id)) +
        geom_bar(colour = "black", width = 1)
    

    【讨论】:

      猜你喜欢
      • 2019-03-08
      • 2012-07-24
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 2021-12-15
      • 2021-04-01
      • 1970-01-01
      相关资源
      最近更新 更多