#r #plot #dplyr #datatables
#r #сюжет #dplyr #таблицы данных
Вопрос:
У меня есть 3 DF, описывающих частоты определенных тегов по годам. Каждый DF имеет одинаковые заголовки столбцов, за исключением одного, в котором отсутствует столбец 1 , потому что в нем нулевые частоты, и 1 строка, потому что в этом году нет частоты.
df1 lt;- data.frame(Year = c("2000", "2001", "2002", "2003", "2004"), Country = c(1, 4, 5, 2, 26), Flag = c(23, 2, 4, 2, 5), Anthem = c(3, 7, 8, 2, 3) ) df2 lt;- data.frame(Year = c("2000", "2001", "2002", "2003", "2004"), Country = c(1, 4, 5, 2, 26), Anthem = c(23, 2, 4, 2, 5), Flag = c(3, 7, 8, 2, 3) ) df3missing lt;- data.frame(Year = c("2001", "2002", "2003", "2004"), Anthem = c(4, 5, 2, 26), Country = c(2, 4, 2, 5) )
Если бы я нарисовал их сейчас, цвета не представляли бы один и тот же заголовок столбца для каждой таблицы, потому что порядок в таблицах разный. И в одной таблице разное количество столбцов и строк.
df11 lt;- melt(df1, id.vars="Year") df22 lt;- melt(df2, id.vars="Year") df3missing2 lt;- melt(df3missing, id.vars="Year") ggplot(df11, aes(x = Year, y = value, fill = variable)) geom_bar(position = "fill", stat = "identity") ggplot(df22, aes(x = Year, y = value, fill = variable)) geom_bar(position = "fill", stat = "identity") ggplot(df3missing2, aes(x = Year, y = value, fill = variable)) geom_bar(position = "fill", stat = "identity")
Есть ли способ реорганизовать таблицы так, чтобы все столбцы располагались в одном порядке, чтобы один и тот же цвет на 3 участках соответствовал одному и тому же столбцу для всех таблиц? В моих данных более 10 столбцов.
ТИА
Ответ №1:
Возможно, это приблизит вас к желаемому результату.
Сначала добавьте NA
недостающий кадр, затем получите порядок столбцов для использования melt
. Это позволяет получить несколько симметричный результат.
Наконец, вручную выберите свою собственную цветовую схему, чтобы получить одинаковые цвета для одних и тех же переменных.
library(reshape2) library(ggplot2) df3 lt;- df3missing df3$Flag lt;- NA cc lt;- colnames(df1) dff1 lt;- melt(df1[,cc]) dff2 lt;- melt(df2[,cc]) dff3 lt;- melt(df3[,cc], id.vars="Year") ggplot(dff1) geom_bar( aes( Year, value, fill=variable ), stat = "identity" ) scale_fill_manual("legend", values = c("Country" = "red", "Flag" = "orange", "Anthem" = "blue")) ggplot(dff2) geom_bar( aes( Year, value, fill=variable ), stat = "identity" ) scale_fill_manual("legend", values = c("Country" = "red", "Flag" = "orange", "Anthem" = "blue")) ggplot(dff3) geom_bar( aes( Year, value, fill=variable ), stat = "identity" ) scale_fill_manual("legend", values = c("Country" = "red", "Flag" = "orange", "Anthem" = "blue"))
Комментарии:
1. Спасибо за предложение. Это сработало!