#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 фрейма данных имеют разные имена столбцов. Поэтому я не могу сгенерировать 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))