У меня есть два фрейма данных с одинаковыми строками и столбцами, 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")
Несмотря на то, что вышеперечисленное работает, было бы очень полезно, цикл для создания отдельных графиков этой переменной для всех уникальных идентификаторов страны в столбце Country
, найденном в обоих наборах данных (также определяемых вектором CountryList$Country
) было бы удивительно Спасибо!
3 ответа
Без воспроизводимого примера вашего набора данных трудно быть уверенным в том, что вы ищете.
Однако, используя эти поддельные наборы данных:
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 = "")
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)
3) Подмножество фрейма данных
Чтобы отобразить только подмножество ваших фреймов данных, начиная с собранного фрейма данных DF
, вы можете просто сделать:
library(ggplot2)
ggplot(subset(DF, Country =="A"), aes(x = Year, y = Value, color = Dataset))+
geom_point(shape = 21)
Это отвечает на ваш вопрос?
Просто добавьте к превосходной записи 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" - это тот кадр данных, который вы хотите построить сверху.
Я думаю, что вам нужно создать новый фрейм данных, который объединяет эти два фрейма данных и подмножества стран, которые вас интересуют. Вы можете использовать rbind
для объединения этих двух, а также вы должны добавить столбец для образцов, указывающий, какой фрейм данных они приходят, так что вы можете использовать его позже в aes(..., color = new_column)
.
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.