В R я пытаюсь построить график столбцов и линий / точек, используя ggplot2, но у меня трудности с легендами и настройками цвета.
Прежде всего, это мои фреймы данных.
vol_reshape <- data.frame(date = c("2018-01-01", "2018-02-01", "2018-03-01", "2018-04-01"),
variable = rep("total", 4),
value = as.integer(c("8029", "8164", "9536", "9482")))
qua_reshape <- data.frame(date = rep(c("2018-01-01", "2018-02-01", "2018-03-01", "2018-04-01"), 4),
variable = c(rep("quality_1", 4), rep("quality_2", 4), rep("quality_3", 4), rep("pod", 4)),
value = as.double(c("0.26", "0.26", "0.30", "0.32", "0.27", "0.27", "0.30", "0.32", "0.45", "0.42", "0.51", "0.55", "0.05", "0.04", "0.05", "0.05")))
Я хочу построить гистограмму, используя vol_reshape
, и на этой гистограмме я хочу построить точки и линии, используя qua_reshape
.Вот мой вывод.
Вот мои проблемы:
- Легенды
Видимо, теперь у меня есть избыточные и странные легенды.То, что я хочу иметь, - это одна легенда, показывающая, что столбец - «Общая громкость», и другая легенда, показывающая, что каждая точка / линия обозначают «Détectée automatique», «Détectée autotique ou déclarée par le conducteur», «Détectée automatique, déclarée par le»conduteur ou par l'exploitant "," Rémontée POD ".
Цвета
Цвета этого сюжета действительно плохие.Я установил цветовые переменные cols
так, чтобы полоса была синей, три линии / точки (quality_1 ~ 3
) были черными, а pod
линия / точка оранжевыми.Я установил эти значения в scale_fill_manual
, но это не отражает мое желание.
Было бы здорово, если бы кто-нибудь помог мне решить эти проблемы.
Вот моя попытка.
p <- ggplot(data = vol_reshape[which(vol_reshape$value > 0),],
aes(x = date, y = value, label = value,
fill = variable
)
) +
geom_bar(stat = "identity", position = "stack", show.legend = T) +
theme(legend.title=element_blank()) +
geom_text(size = size$label, position = position_stack(vjust = 0.9), color = "#FFFFFF") +
geom_point(data = qua_reshape, mapping = aes(x = date,
y = value *max(vol_reshape$value),
color = quality
)
) +
theme(legend.title=element_blank()) +
geom_line(data = qua_reshape, mapping = aes(x = date,
y =value*max(vol_reshape$value),
color = variable),
size = size$line) +
geom_text(data = qua_reshape, mapping = aes(x = date,
y =value*max(vol_reshape$value),
label =paste0(100*value, '%'),
color = variable),
size = size$label, vjust = -0.9, hjust = 1.5
) +
theme_classic() +
scale_y_continuous(sec.axis = sec_axis(trans = ~.*(1/max(vol_reshape$value)))) +
scale_fill_manual(name = NULL, values = cols, labels = labs, drop = T) +
theme(legend.position = "right",
plot.title = element_text(hjust = 0.5, size = size$title, family="Proxima Nova"),
plot.subtitle = element_text(size = size$subtitle, family="Proxima Nova"),
axis.title.x=element_blank(),
axis.text.x = element_text(angle = 45, margin=margin(t = 8),
family="Proxima Nova"))
)
cols <- c("total" = "#3D8BDA", "quality_1" = "#000000", "quality_2" ="#000000", "quality_3" = "#000000", "pod" = "#ff8142")
labs <- c("Total", "Détectée automatique", "Détectée automatique ou déclarée par le conducteur", "Détectée automatique, déclarée par le conducteur ou par l'exploitant", "Rémontée POD")