#r #ggplot2 #geom-col
Вопрос:
Я пытаюсь показать простую гистограмму по производителям зерновых в разбивке по тому, использовались ли промо-акции или нет. Однако мой третий набор столбцов не в порядке с двумя другими (бары «промо» и «без промо» поменялись местами). Как вы увидите на изображении, раздел «Сообщение» перевернут по сравнению с разделами «Келлог» и «Дженерал Миллс». Меня не интересует порядок asc/desc баров.
Вот мой код, который создает эту диаграмму:
y_values <- c(0, 100, 200, 300, 400)
total_revenue <- sales_product %>%
group_by(promo, producer) %>%
summarise(revenue = sum(sell_amount)) %>%
ggplot(aes(x = producer, y = revenue, fill = promo))
geom_col_interactive(position = "dodge", aes(tooltip = paste0('Rev: ', label_dollar()(round(revenue)))))
theme_classic()
xlab("")
ylab("Total Revenue")
scale_y_continuous(labels = paste0("$", y_values, "K"),
breaks = seq(0 , 400000, by=100000))
scale_fill_manual("",
labels = c("Promo", "No Promo"),
values = c("#0655A3", "#787878"))
scale_x_discrete(labels = c("General Mills", "Kellogg's", "Post"))
y <- ggiraph(ggobj = total_revenue, height = 3/1)
y
Это набор данных, аналогичный исходному, хотя он не создаст диаграмму, идентичную моему примеру, он должен быть похожим.:
promo sell_amount producer
1 0 2.50 POST
2 0 1.00 POST
3 0 1.50 POST
4 1 5.00 POST
5 1 5.00 POST
6 0 2.50 POST
7 0 0.50 POST
8 0 3.60 POST
9 0 4.00 POST
10 0 7.00 POST
11 1 2.00 KELLOGG'S
12 1 1.00 KELLOGG'S
13 1 1.50 KELLOGG'S
14 0 1.59 KELLOGG'S
15 0 6.36 KELLOGG'S
16 0 27.55 KELLOGG'S
17 1 10.60 KELLOGG'S
18 0 14.00 KELLOGG'S
19 1 15.95 KELLOGG'S
20 0 9.03 KELLOGG'S
21 1 9.00 KELLOGG'S
22 0 5.45 KELLOGG'S
23 0 2.00 KELLOGG'S
24 0 6.54 KELLOGG'S
25 0 3.27 KELLOGG'S
26 0 5.96 KELLOGG'S
27 0 3.18 KELLOGG'S
28 1 9.90 KELLOGG'S
29 0 25.07 KELLOGG'S
30 0 14.50 KELLOGG'S
31 0 10.15 KELLOGG'S
32 0 18.00 KELLOGG'S
33 0 12.00 KELLOGG'S
34 0 2.00 KELLOGG'S
35 0 5.00 KELLOGG'S
36 1 6.00 GENERAL MILLS
37 0 10.90 GENERAL MILLS
38 0 6.54 GENERAL MILLS
39 1 24.75 GENERAL MILLS
40 0 6.54 GENERAL MILLS
41 0 3.75 GENERAL MILLS
42 0 21.84 GENERAL MILLS
43 0 7.63 GENERAL MILLS
44 0 2.58 GENERAL MILLS
45 0 6.00 GENERAL MILLS
46 0 3.18 GENERAL MILLS
47 0 6.00 GENERAL MILLS
48 0 10.90 GENERAL MILLS
49 0 2.50 GENERAL MILLS
50 0 5.00 GENERAL MILLS
Это то, что он производит в настоящее время:
EDIT from Jon Spring:
Here is a minimal reprex. Note that the dodge order is inconsistent when we use ggiraph::geom_col_interactive
. Normal geom_col
works fine, so this might be a bug with ggiraph
.
library(ggiraph)
library(ggplot2); library(scales)
plot_data <- structure(list(promo = c(0L, 0L, 0L, 1L, 1L, 1L),
producer = c("GENERAL MILLS", "KELLOGG'S", "POST", "GENERAL MILLS", "KELLOGG'S", "POST"),
revenue = c(93.36, 171.65, 22.6, 30.75, 49.95, 10)), row.names = c(NA, -6L),
class = c("tbl_df", "tbl", "data.frame"))
Это работает так, как и ожидалось:
ggplot(plot_data, aes(x = producer, y = revenue, fill = promo))
geom_col(position = "dodge2")
Но в этой версии использование ggiraph::geom_col_interactive
имеет порядок уклонения, несовместимый между категориями.
total_revenue_plot <-
ggplot(plot_data, aes(x = producer, y = revenue, fill = promo))
geom_col_interactive(position = "dodge2").
ggiraph(ggobj = total_revenue, height = 3/1)
Комментарии:
1. Не могли бы вы, пожалуйста, включить примеры данных, которые мы можем использовать для
sales_product
? Часто это проще всего сделать, включив выходные данные, которые вы получаете при запускеdput(sales_product)
, — это приведет к созданию кода R, который генерирует идентичный объект.2. Спасибо @JonSpring. Мои данные добавлены.
3. Если все, что вы хотите сделать, это изменить порядок построения полос, то этот вопрос задавался несколько раз в SO. Ответ включает в себя установку аргумента «метки» в
factor
функции. Если вы считаете, что связь между идентификаторами магазинов и расчетными высотами столбиков неверна, вам нужно сформулировать это более четко.4. Спасибо за предложение @IRTFM. Меня не волнует, строится ли мой бар в порядке asc/desc, если вы это имеете в виду. Я уточнил детали вопроса, но я думаю, что проблема довольно ясна на изображении.
5. Я вижу сюжет. «Проблема» в чем? Вы говорите
the "Post" section is flipped compared to the "Kellogg's" and "General Mills" section.
, что такое «перевернуто». Изложите это на естественном языке. Я все еще подозреваю, что ответ заключается в использованииfactor
аргумента уровней или меток. И я все еще думаю, что этот вопрос является дубликатом многих других вопросов о построении порядка расположения столбцов или порядка легенд.