Добавьте vline к существующему сюжету и появляйтесь в легенде ggplot2?
У меня есть некоторые данные, которые я использую для построения гистограммы. У меня также есть два набора пороговых значений, которые имеют некоторое значение.
Я могу построить гистограмму и vlines с соответствующими стилями. Тем не менее, я не могу заставить свои винглы появляться в легенде. Я считаю, что что-то вроде этого должно работать, однако элементы легенды никогда не отображаются.
df <- data.frame(val=rnorm(300, 75, 10))
cuts1 <- c(43, 70, 90)
cuts2 <- c(46, 79, 86)
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(xintercept=cuts1,
linetype=1,
color="red",
labels="Thresholds A",
show_guide=TRUE) +
geom_vline(xintercept=cuts2,
linetype=2,
color="green",
labels="Thresholds B",
show_guide=TRUE)
В качестве альтернативы, если я построю data.frame для своих сокращений и сделаю эстетическое сопоставление, я могу получить, что мои vlines появятся в легенде. К сожалению, легенда дает мне два экземпляра разных типов линий, наложенных друг на друга:
cuts1 <- data.frame(Thresholds="Thresholds A", vals=c(43, 70, 90))
cuts2 <- data.frame(Thresholds="Thresholds B", vals=cuts2 <- c(46, 79, 86))
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(data=cuts1, aes(xintercept=vals, shape=Thresholds),
linetype=1,
color="red",
labels="Thresholds A",
show_guide=TRUE) +
geom_vline(data=cuts2, aes(xintercept=vals, shape=Thresholds),
linetype=2,
color="green",
labels="Thresholds B",
show_guide=TRUE)
![enter image description here]()
Итак, в конце концов, то, что я ищу, является самым простым способом вручную добавить два набора строк в сюжет, а затем включить их в легенду.
Ответы
Ответ 1
Трюк состоит в том, чтобы поместить данные порога в один и тот же кадр данных, а затем отобразить эстетику, а не устанавливать их:
cuts <- rbind(cuts1,cuts2)
ggplot(data=df, aes(x=val)) +
geom_histogram() +
geom_vline(data=cuts,
aes(xintercept=vals,
linetype=Thresholds,
colour = Thresholds),
show_guide = TRUE)
![enter image description here]()