Постройте два графика на одном графике

Решение с ggplot в этом вопросе отлично работало для моих данных. Тем не менее, я пытаюсь добавить легенду, и все, что я пробовал, не работает...

Например, в примере ggplot в приведенном выше вопросе, как я могу добавить легенду, чтобы показать, что красная кривая связана с "Океан", а зеленая кривая связана с "Почвой"? Да, я хочу добавить текст, который я буду определять, и он не связан ни с какой другой переменной в моем data.frame.

Ниже приведен пример моих собственных данных...

Rate     Probability      Stats
1.0e-04    1e-04          891.15 
1.0e-05    1e-04          690
...

и т.д. (это около 400 строк). И у меня есть два кадра данных, похожие на приведенные выше. Итак, мой код

g <- ggplot(Master1MY, aes(Probability))
g <- g + geom_point(aes(y=Master1MY$Stats), colour="red", size=1)
g <- g + geom_point(aes(y=Transposon1MY$Stats), colour="blue", size=1)
g + labs(title= "10,000bp and 1MY", x = "Probability", y = "Stats")

Сюжет выглядит как this

Я просто хочу, чтобы красно-синяя легенда говорила "Мастер" и "Транспозон"

Спасибо!

Ответ 1

В ggplot обычно наиболее удобно хранить данные в "длинном" формате. Здесь я использую функцию melt из пакета reshape2 для преобразования ваших данных из широкоформатного формата. В зависимости от того, как вы укажете разные тети aes (размер, форма, цвет и с), появятся соответствующие легенды.

library(ggplot2)
library(reshape2)

# data from the example you were referring to, in a 'wide' format.
x  <- seq(-2, 2, 0.05)
ocean <- pnorm(x)
soil <- pnorm(x, 1, 1)
df <- data.frame(x, ocean, soil)

# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")

# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()

enter image description here

Изменить, установить имя и метки легенды

# Manually set name of the colour scale and labels for the different colours
ggplot(data = df2, aes(x = x, y = value, colour = variable)) +
 geom_line() +
 scale_colour_discrete(name = "Type of sample", labels = c("Sea water", "Soil"))

Edit2, следуя новым образцам данных Преобразуйте свои данные, предполагая, что ваша организация из вашего обновления, в длинный формат. Опять же, я считаю, что вы упростили свою жизнь ggplot, если будете хранить свои данные в длинном формате. Я связываю каждый шаг с простыми примерами данных, которые я использовал в своем первом ответе. Обратите внимание, что существует много альтернативных способов переупорядочения ваших данных. Это один из способов, основанный на небольших (не воспроизводимых) частях ваших данных, которые вы указали в обновлении.

# x  <- seq(-2, 2, 0.05)
# Master1MY$Probability
Probability <- 1:100

# ocean <- pnorm(x)
# Master1MY$Stats
Master1MY <- rnorm(100, mean = 600, sd = 20)

# soil <- pnorm(x,1,1)
# Transposon1MY$Stats
Transposon1MY <- rnorm(100, mean = 100, sd = 10)

# df <- data.frame(x, ocean, soil)
df <- data.frame(Probability, Master1MY, Transposon1MY)

# df2 <- melt(df, id.var = "x")
df2 <- melt(df, id.var = "Probability")

# default
ggplot(data = df2, aes(x = Probability, y = value, col = variable)) +
  geom_point()

# change legend name and labels, see previous edit using 'scale_colour_discrete'

# set manual colours scale using 'scale_colour_manual'.

ggplot(data = df2, aes(x = Probability, y = value, col = variable)) +
  geom_point() +
  scale_colour_manual(values = c("red","blue"), name = "Type of sample", labels = c("Master", "Transposon"))

enter image description here