【问题标题】:Add lollipop sticks for point plots为点图添加棒棒糖
【发布时间】:2017-01-22 07:17:48
【问题描述】:

我如何(如果可能)将棒棒糖棒添加到点图上?

例如,

plot(1:10, sin(1:10))

如何从十个点中的每一个到 x 轴添加一条垂直线(棒棒糖棒)?我需要编写一个绘制每根棍子的函数吗?

【问题讨论】:

  • 另一个plot(1:10, sin(1:10), type = 'h'); points(1:10, sin(1:10))

标签: r ggplot2


【解决方案1】:

您有一个ggplot2 标记,但使用了一个基本示例,所以我将同时显示两者。

数据:

df <- data.frame(x = 1:10, y = sin(1:10))

基础绘图使用'h' 作为aplot 类型,绘制“直方图”线见?plot。然后你可以在上面添加点。

plot(df$x, df$y, type = 'h')
points(df$x, df$y, pch = 20)
abline(h = 0, lty = 2)

ggplot2 允许您在geom_segment 中指定起点和终点

ggplot(df, aes(x, y)) +
     geom_point() +
     geom_segment(aes(x = x, y = 0, xend = x, yend = y)) +
     geom_hline(yintercept = 0, lty = 2) 

【讨论】:

    【解决方案2】:

    segments 函数会做你想做的事。

    plot(1:10, sin(1:10))
    abline(h=0, lty=2)
    segments(1:10, 0, 1:10, sin(1:10))
    

    【讨论】:

      【解决方案3】:

      因为我们不想使用ggalt::geom_lollipop()

       devtools::install_github("hrbrmstr/ggalt")
      
      df <- read.csv(text="category,pct
      Other,0.09
      South Asian/South Asian Americans,0.12
      Interngenerational/Generational,0.21
      S Asian/Asian Americans,0.25
      Muslim Observance,0.29
      Africa/Pan Africa/African Americans,0.34
      Gender Equity,0.34
      Disability Advocacy,0.49
      European/European Americans,0.52
      Veteran,0.54
      Pacific Islander/Pacific Islander Americans,0.59
      Non-Traditional Students,0.61
      Religious Equity,0.64
      Caribbean/Caribbean Americans,0.67
      Latino/Latina,0.69
      Middle Eastern Heritages and Traditions,0.73
      Trans-racial Adoptee/Parent,0.76
      LBGTQ/Ally,0.79
      Mixed Race,0.80
      Jewish Heritage/Observance,0.85
      International Students,0.87", stringsAsFactors=FALSE, sep=",", header=TRUE)
      
      library(ggplot2)
      library(ggalt)
      library(scales)
      
      gg <- ggplot(df, aes(y=reorder(category, pct), x=pct))
      gg <- gg + geom_lollipop(point.colour="steelblue", point.size=3, horizontal=TRUE)
      gg <- gg + scale_x_continuous(expand=c(0,0), labels=percent,
                                    breaks=seq(0, 1, by=0.2), limits=c(0, 1))
      gg <- gg + labs(x=NULL, y=NULL,
                      title="SUNY Cortland Multicultural Alumni survey results",
                      subtitle="Ranked by race, ethnicity, home land and orientation\namong the top areas of concern",
                      caption="Data from http://stephanieevergreen.com/lollipop/")
      gg <- gg + theme_minimal(base_family="Arial Narrow")
      gg <- gg + theme(panel.grid.major.y=element_blank())
      gg <- gg + theme(panel.grid.minor=element_blank())
      gg <- gg + theme(axis.line.y=element_line(color="#2b2b2b", size=0.15))
      gg <- gg + theme(axis.text.y=element_text(margin=margin(r=-5, l=0)))
      gg <- gg + theme(plot.margin=unit(rep(30, 4), "pt"))
      gg <- gg + theme(plot.title=element_text(face="bold"))
      gg <- gg + theme(plot.subtitle=element_text(margin=margin(b=10)))
      gg <- gg + theme(plot.caption=element_text(size=8, margin=margin(t=10)))
      gg
      

      【讨论】:

      • 它是否也适用于我用作示例的功能?似乎它只适用于因素
      • geom_ 使用与您标注为正确的 ggplot2 答案相同的基本原理。
      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2014-12-15
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多