169 похожих чатов

Вот, примерно такой датасет в широком формате я соорудил, построил

график, а на легенде завис.

Для power bi это обычная практика и там, нет проблем с легендой, если данные в широком формате.

А вот для ggplot2 их надо сначала, в любом случае, переводить в длинный формат, чтобы была легенда?

library(dplyr)
library(ggplot2)
library(lubridate)
df <- data.frame(
month = format(seq.Date(as.Date('2000-01-01'), by = 'month', len = 12), "%b"),
amount = rnorm(mean = 100, sd = 10, n = 12),
amount_mtd = rnorm(mean = 30, sd = 5, n = 12),
month_plan = rnorm(mean = 110, sd = 5, n = 12)
)
df %>%
mutate(
month = factor(
month,
levels = df$month
)
) %>%
ggplot(
aes(x = month, y = amount_mtd)
) +
geom_col(
width = 0.5, fill = '#DD1C77'
) +
geom_col(
aes(x = month, y = amount),
alpha = 0.5,
fill = '#C994C7'
) +
geom_errorbar(
aes(ymin = month_plan, ymax = month_plan),
width = 0.5
) +
scale_y_continuous(
labels = scales::label_dollar(
suffix = " млн",
prefix = '')
) +
geom_text(
aes(label = amount_mtd %>% round(1)),
vjust = 0.7,
) +
geom_text(
aes(x = month, y = month_plan, label = month_plan %>% round(1)),
vjust = -1,
size = 4
) +
ylab(label = NULL) +
xlab(label = NULL)

6 ответов

23 просмотра

формально для ggplot - это антипатерн, но на деле постоянно все этот антипаттерн используют, вот переделанный пример: library(dplyr) library(ggplot2) library(lubridate) df <- data.frame( month = format(seq.Date(as.Date('2000-01-01'), by = 'month', len = 12), "%b"), amount = rnorm(mean = 100, sd = 10, n = 12), amount_mtd = rnorm(mean = 30, sd = 5, n = 12), month_plan = rnorm(mean = 110, sd = 5, n = 12) ) df %>% mutate( month = factor( month, levels = df$month ) ) %>% ggplot( aes(x = month, y = amount_mtd) ) + geom_col( width = 0.5, aes(fill = 'единороги') ) + geom_col( aes(x = month, y = amount, fill = "феи"), alpha = 0.5, ) + geom_errorbar( aes(ymin = month_plan, ymax = month_plan), width = 0.5 ) + scale_y_continuous( labels = scales::label_dollar( suffix = " млн", prefix = '') ) + geom_text( aes(label = amount_mtd %>% round(1)), vjust = 0.7, ) + geom_text( aes(x = month, y = month_plan, label = month_plan %>% round(1)), vjust = -1, size = 4 ) + ylab(label = NULL) + xlab(label = NULL) + scale_fill_manual(values = c('единороги' = "#DD1C77", "феи" = "#C994C7"))

Марк- Автор вопроса
Dm Kb
формально для ggplot - это антипатерн, но на деле ...

о, спасибо) Но как тогда, все таки, правильно, с точки зрения ggplot?

Марк
о, спасибо) Но как тогда, все таки, правильно, с ...

правильно работать с tidy- форматом ))) т.е. с длинными данными, но по факту при 2-3 геомах можно и руками прописать

Марк- Автор вопроса
Dm Kb
правильно работать с tidy- форматом ))) т.е. с дли...

В общем, все таки вот так правильно сначала таблицу перевести в длинный и потом от нее строить ггплоты?) df %>% mutate( month = factor( month, levels = df$month ) ) %>% pivot_longer( -month, names_to = 'names', values_to = 'values' )

Марк
В общем, все таки вот так правильно сначала таблиц...

да, вроде так, но в таком подходе есть свои недостатки... например, когда определенным типам значений нужно присвоить определенный цвет

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта