R: как объединить ggplots на основе данных с разными именами столбцов

#r #ggplot2

#r #ggplot2

Вопрос:

Оба приведенных ниже графика gg работают отдельно, но я хотел бы объединить их в один график, где Group переменная строк df2 отображается в легенде.

 library(ggplot2) df1 lt;- data.frame(x = 1:10, y = 1:10) df2 lt;- data.frame(x = rep(1:10,2),   y = c(seq(1,2,length.out = 10),  seq(5,6,length.out = 10)),   Group = c(rep("A",10),rep("B",10))   )  p1 lt;- ggplot(data = df1, aes(x = x, y = y))    geom_point()   p2lt;- ggplot(data = df2, aes(x = x, y = y, group = Group, color = Group))    geom_line()   

2 графика, которые я хочу объединить в 1

Проблема вызвана тем фактом, что 2 фрейма данных имеют разные имена столбцов. Поэтому я не могу сгенерировать 2 графика и добавить их p1 p2 , как это делается в других решениях, которые были опубликованы здесь ранее.

Ответ №1:

Во-первых, в ggplot2 каждом слое есть свой собственный локальный data аргумент, т. Е. вы можете передавать разные наборы данных на каждый слой. Если вы не зададите data аргумент для слоя, он просто унаследует глобальный набор ggplot() данных (если таковой имеется), т. Е. вы можете объединить свои графики в один, добавив geom_line(data = df2, aes(group = Group, color = Group)) их к своему первому графику.

Во-вторых, если ваши наборы данных имеют разные имена столбцов, это тоже не имеет большого значения. Как и в случае с data аргументом, каждый слой имеет свой собственный (локальный) набор эстетики. Если не задано, слой унаследует заданную глобальную эстетику ggplot() , т. Е. С разными именами столбцов вам просто нужно указать, какие столбцы должны быть сопоставлены с эстетикой в каждом слое.

Слегка изменил данные вашего примера:

 library(ggplot2) df1 lt;- data.frame(x1 = 1:10, y1 = 1:10) df2 lt;- data.frame(x2 = rep(1:10,2),   y2 = c(seq(1,2,length.out = 10),  seq(5,6,length.out = 10)),   Group = c(rep("A",10),rep("B",10))  )  ggplot(data = df1, aes(x = x1, y = y1))     geom_point()    geom_line(data = df2, aes(x = x2, y = y2, group = Group, color = Group))