Подтвердить что ты не робот

Добавьте 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

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

4b9b3361

Ответ 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