Признаюсь, мне потребовалось некоторое время, чтобы понять ваш немного запутанный заговор. Простите, но я позволил себе изменить способ построения и использовать (лучше?) Использование ggplot.
Форма данных меньше идеальной. ggplot очень хорошо работает с длинными данными. Чтобы изменить ваши данные, было немного догадок, и я решил go быстрый и грязный способ простого связывания строк из выбранных столбцов.
Теперь вы можете видеть, что вы можете достичь нового сюжета одним вызовом geom_point
. Остальное - "scale_aestheti c" magi c ...
Для того, чтобы объединить легенду о форме и цвете, безопаснее всего использовать override.aes
. Но будьте осторожны! Он не принимает именованные векторы, поэтому порядок значений должен быть в точном порядке, заданном вашими ключами легенды - обычно это алфавит c, если у вас не определены уровни факторов.
update re: запрос на заказ x меток
Это в значительной степени зависит от фактической структуры данных. если бы это было изначально, как вы представили, я бы first сделал бы id
фактором с упорядоченными уровнями на основе вашего var2
. Затем выполните формирование данных.
library(tidyverse)
# data reshape
wide <- data.frame(id=c("C","B","A"), var1=c(1,6,1), var2=c(2,6,5), size1=c(11,12,13), size2=c(10,12,10), flag=c(FALSE,TRUE,FALSE))
wide <- wide %>% mutate(id = reorder(id, var2))
wide1 <- wide %>% filter(!flag) %>%select(id, var = var1, size = size1)
wide2 <- wide %>% filter(!flag) %>% select(id, var = var2, size = size2)
wide3 <- wide %>% filter(flag) %>% select(id, var = flag, size = size2) %>%
mutate(var = 6)
long <- bind_rows(list(v1 = wide1, v2 = wide2, flag = wide3), .id = "var_id")
# rearrange the vectors for scales aesthetic
cols <- c(flag="green", v1 ="blue", v2="red" )
shapes <- c(flag=16, v1=16, v2 =21 )
ggplot(data = long, aes(x = id, y = var)) +
geom_point(aes(size=size, shape = var_id, color = var_id), stroke=1.5) +
scale_size_continuous(limits = c(5,15),breaks = seq(5,15,5)) +
scale_shape_manual(name = "test", values = shapes) +
scale_color_manual(values = cols, guide = FALSE) +
guides(shape = guide_legend(override.aes = list(color = cols)))
PS причина, по которой красный штрих вокруг зеленого пузыря на вашем графике, вы также наносили на график «var2» за своим флагом.
Создано в 2020-04-08 пакетом prepx (v0.3.0)