【问题标题】:Add horizontal quantile lines to scatter plot ggplot2 R添加水平分位数线到散点图ggplot2 R
【发布时间】:2019-05-15 23:59:11
【问题描述】:

我有下面的数据

eg_data <- data.frame(
period = c(sample( c("1 + 2"), 1000, replace = TRUE)),
max_sales = c(sample( c(1:10), 1000, replace = TRUE, prob = 
c(.05, .10, .15, .25, .25, .10, .05, .02, .02, .01)))

我想制作一个scatter(实际上是jitter)图并在沿y 轴的不同点添加水平线。我希望能够自定义添加行的百分位数,但现在,像 R 的摘要函数这样的东西就可以了。

summary(eg_data$max_sales)

我有下面的抖动图代码。它运行并生成图表,但我不断收到错误消息:

每组仅包含一个观察值。是否需要调整 群体审美?

jitter <-  (
(ggplot(data = eg_data, aes(x=period, y=max_sales, group = 1)) +
geom_jitter(stat = "identity", width = .15, color = "blue", alpha = .4)) +
scale_y_continuous(breaks= seq(0,12, by=1)) +
geom_line(stat = 'summary', fun.y = "quantile", fun.args=list(probs=0.1)) +
ggtitle("Distribution of Sales by Period") + xlab("Period") + ylab("Sales") +
theme(plot.title = element_text(color = "black", size = 14, face = "bold", hjust = 0.5),
      axis.title.x = element_text(color = "black", size = 12, face = "bold"), 
      axis.title.y = element_text(color = "black", size = 12, face = "bold")) +
labs(fill = "Period") )
jitter

我试着看看这个问题 -

ggplot2 line chart gives "geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?"

它建议将所有变量设为数字。我的周期变量是一个字符,我想保持这种状态,但即使我将它转换为数字,它仍然会给我错误。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: r ggplot2 scatter-plot quartile


    【解决方案1】:

    我不知道这是否是最优雅的解决方案,但您总是可以在别处计算汇总统计数据并将其放入图中。这也可以更好地控制正在发生的事情(根据我的口味)

    hline_coordinates= data.frame(Quantile_Name=names(summary(eg_data$max_sales)),
                              quantile_values=as.numeric(summary(eg_data$max_sales)))
    
    jitter <-  (
      (ggplot(data = eg_data, aes(x=period, y=max_sales)) + #removed group=1
         geom_jitter(stat = "identity", width = .15, color = "blue", alpha = .4)) +
         scale_y_continuous(breaks= seq(0,12, by=1)) +
    
         geom_hline(data=hline_coordinates,aes(yintercept=quantile_values)) +
         ggtitle("Distribution of Sales by Period") + xlab("Period") + ylab("Sales") +
         theme(plot.title = element_text(color = "black", size = 14, face = "bold", hjust = 0.5),
            axis.title.x = element_text(color = "black", size = 12, face = "bold"), 
            axis.title.y = element_text(color = "black", size = 12, face = "bold")) +
         labs(fill = "Period") )
    jitter
    

    【讨论】:

    • 哎呀。太慢了。 ;-)
    • 您的回答不是第一个,但很有帮助。谢谢!
    • 嗨 TobiO,您可以使用以下方法进行简化:geom_hline(yintercept=as.numeric(summary(eg_data$max_sales))) 或 geom_hline(yintercept=hline_coordinates$quantile_values)
    【解决方案2】:

    你想要的是geom_hline,而不是geom_line。特别是,将geom_line 替换为

    stat_summary(fun.y = "quantile", fun.args = list(probs = c(0.1, 0.2)), 
                 geom = "hline", aes(yintercept = ..y..))
    

    给予

    确实在哪里

    quantile(eg_data$max_sales, c(0.1, 0.2))
    # 10% 20% 
    #   2   3 
    

    它还消除了您收到的警告。

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2020-08-23
      相关资源
      最近更新 更多