несколько наборов данных, нормализованных на диаграмме рассеяния - PullRequest
1 голос
/ 03 августа 2020

У меня есть два разных набора данных, и я хочу их нормализовать (путем вычитания индивидуальной медианы). Затем я хочу показать их в виде одного графика рассеяния, но разными цветами.

normalize <- function(y) {
  y - median(y)
}

x1  <- seq(-2, 2, 0.05)
x2  <- seq(-3, 3, 0.10)
y1 <- normalize(pnorm(x1)-3)
y2 <- normalize(pnorm(x2))

Но основная проблема заключается в том, что комбинация данных для графика

df <- data.frame(y1,y2)
ggplot(df, aes(x)) +
  geom_point(aes(y=y1), colour="red") +
  geom_point(aes(y=y2), colour="green")

дает ошибку

Error in data.frame(y1, y2) : 
  arguments imply differing number of rows: 81, 121

, и я не понимаю, почему в наборах данных должно быть точно такое же количество строк для построения. Как объединить эти два разных набора данных в один график?

1 Ответ

4 голосов
/ 03 августа 2020

Как сказано в комментариях к вопросу, ошибка возникает из-за способа создания data.frame с двумя столбцами разной длины ( @ AllanCameron ). Решение, предложенное @ user20650 , изменено на x1 и x2, даже позволяет избежать двух вызовов geom_point, достаточно одного.

set.seed(2020)

normalize <- function(y) {
  y - median(y)
}

x1  <- seq(-2, 2, 0.05)
x2  <- seq(-3, 3, 0.10)
y1 <- normalize(pnorm(x1)-3)
y2 <- normalize(pnorm(x2))
n1 <- length(y1)
n2 <- length(y2)

df1 <- data.frame(x = c(x1, x2),
                  y = c(y1, y2), 
                  id = c(rep("y1", times = n1), rep("y2", times = n2))
                  )

library(ggplot2)

ggplot(df1, aes(x, y, color = id)) +
  geom_point(alpha = 0.5) +
  scale_color_manual(values = c(y1 = "red", y2 = "green"))

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...