R ggplot geom_point наложение из 2 фреймов данных, дифференцированных по цвету, подмножество по id - PullRequest
0 голосов
/ 28 января 2020

У меня есть два фрейма данных с одинаковыми строками и столбцами, DataMaster и IMPSAVG, для которых я пытаюсь создать серию комбинированных наложенных двухмерных диаграмм рассеяния (подмножество "идентификаторов стран" и переменных столбцов) с наблюдениями из двух наборов данных, дифференцированных по цвету в ggplot. Приведенный ниже код не работает, но дает представление о том, к чему я стремлюсь (acctm - это переменная, а ARG - это страна в этом примере).

ggplot() + 
  geom_point(data=DataMaster, aes(x="Year", y="acctm"), subset = .(Country %in% c("ARG")), shape=21, color= "red") +
  geom_point(data=IMPSAVG, aes(x="Year", y="acctm"), subset = .(Country %in% c("ARG")), shape=21, color= "blue")

При получении только выше, чтобы работать было бы высоко ценится, было бы удивительно, если бы oop создать отдельные графики этой переменной для всех уникальных идентификаторов страны в столбце Country, найденном в обоих наборах данных (также определяемых вектором CountryList$Country). Спасибо!

Ответы [ 3 ]

1 голос
/ 28 января 2020

Без воспроизводимого примера набора данных трудно быть уверенным в том, что вы ищете.

Однако, используя эти поддельные наборы данных:

df1 <- data.frame(Country = c("A","A","A","B","B"),
                  Year = 2010:2014,
                  Value = sample(1:100,5))
df2 <- data.frame(Country = c("A","A","A","B","B"),
                  Year = 2010:2014,
                  Value = sample(1:100,5))

1) Построение без объединения наборов данных (не самое подходящее)

Вы не делаете Вам необходимо полностью собрать ваши кадры данных для их построения, однако это усложнит ситуацию (особенно если вы хотите настроить несколько параметров). Здесь вы можете сделать:

library(ggplot2)
ggplot()+
  geom_point(data = df1, aes(x = Year, y = Value, color = "blue"), shape = 21)+
  geom_point(data = df2, aes(x = Year, y = Value, color = "red"), shape = 21, show.legend = TRUE)+
  scale_color_manual(values = c("blue","red"), labels = c("df1","df2"), name = "")

enter image description here

2) Сборка обоих кадров данных (лучший способ сделать это)

Однако будет гораздо проще, если вы соберете оба этих кадра данных (ggplot2 предназначен для работы с кадрами данных в более длинном формате).

Итак, здесь вы можете сделать:

df1$Dataset = "DF1"
df2$Dataset = "DF2"
DF <- rbind(df1,df2)

   Country Year Value Dataset
1        A 2010    66     DF1
2        A 2011    64     DF1
3        A 2012    40     DF1
4        B 2013    58     DF1
5        B 2014    20     DF1
6        A 2010    78     DF2
7        A 2011    25     DF2
8        A 2012    71     DF2
9        B 2013    40     DF2
10       B 2014    61     DF2

Теперь, вы можете просто нарисовать это, как это, что гораздо более кратко:

library(ggplot2)
ggplot(DF, aes(x = Year, y = Value, color = Dataset))+
  geom_point(shape = 21)

enter image description here

3) Подмножество фрейм данных

Чтобы отобразить только подмножество ваших фреймов данных, начиная с собранного фрейма данных DF, вы можете просто сделать:

library(ggplot2)
ggplot(subset(DF, Country =="A"), aes(x = Year, y = Value, color = Dataset))+
  geom_point(shape = 21)

enter image description here

Это отвечает на ваш вопрос?

0 голосов
/ 29 января 2020

Просто добавьте к отличной записи dc37, вот хитрость, чтобы один фрейм данных печатался поверх другого

ggplot(subset(DF, Country =="A"), aes(x = Year, y = Value, color = Dataset)) +
  geom_point(shape = 21, na.rm = T) +
  geom_point(data = subset(DF, Dataset == DF1 & Country == "A"),
     aes(x = Year, y = compi, color = E), shape = 21, na.rm = T)

, где "DF1" - это фрейм данных, который вы хотите нанести поверх.

0 голосов
/ 28 января 2020

Я думаю, что вам нужно создать новый фрейм данных, который объединяет эти два фрейма данных и подмножества стран, которые вас интересуют. Вы можете использовать rbind для их объединения, а также вы должны добавить столбец для образцов, указывающий, какие фрейм данных, откуда они поступают, так что вы можете использовать его позже в aes(..., color = new_column).

...