Добавьте горизонтальные линии квантиля в график рассеяния ggplot2 R - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть, например, данные ниже

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 дает "geom_path: каждая группа состоит только из одногонаблюдение. Вам нужно настроить эстетику группы? "

Предлагает сделать все переменные числовыми.Моя переменная периода - это символ, я бы хотел сохранить его таким образом, но даже когда я преобразую его в числовое, он все равно выдаст мне ошибку.

Любая помощь будет оценена.Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Я не знаю, является ли это наиболее элегантным решением, но вы всегда можете рассчитать сводную статистику в другом месте и поместить ее в график.Это также дает немного больше контроля над происходящим (на мой вкус)

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

enter image description here

0 голосов
/ 14 декабря 2018

Вместо geom_line вы хотите geom_hline.В частности, замена geom_line на

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

дает

enter image description here

, где действительно

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

Это также устраняет предупреждение, которое вы получили.

...