我是R的初学者,所以也许听起来很简单,但我想要堆叠两个
bar plot
。
例如,对于城市BIRR,我有两个图:一个有降水,另一个有温度
我想要做的是,对于每个月04/2004,我想让条形图堆叠温度和条形图堆栈降水。
我把我的数据集放在下面:
#TEMP_BIR
"SOUNAME" "year_month" "temperature_type" "temperature_value"
"1" "BIRR" "2004-04" "VERY_COLD" 0
"2" "BIRR" "2004-05" "VERY_COLD" 0
"3" "BIRR" "2004-06" "VERY_COLD" 0
"4" "BIRR" "2004-07" "VERY_COLD" 0
"5" "BIRR" "2004-04" "MEDIUM" 28
"6" "BIRR" "2004-05" "MEDIUM" 29
"7" "BIRR" "2004-06" "MEDIUM" 19
"8" "BIRR" "2004-07" "MEDIUM" 25
"9" "BIRR" "2004-04" "HOT" 0
"10" "BIRR" "2004-05" "HOT" 2
"11" "BIRR" "2004-06" "HOT" 11
"12" "BIRR" "2004-07" "HOT" 6
"13" "BIRR" "2004-04" "COLD" 2
"14" "BIRR" "2004-05" "COLD" 0
"15" "BIRR" "2004-06" "COLD" 0
"16" "BIRR" "2004-07" "COLD" 0
# Temp_prec_birr
"SOUNAME" "year_month" "precipitation_type" "precipitation_value"
"BIRR" "2004-04" "NONE" "11"
"BIRR" "2004-05" "NONE" "20"
"BIRR" "2004-06" "NONE" "11"
"BIRR" "2004-07" "NONE" "10"
"BIRR" "2004-04" "HEAVY" "2"
"BIRR" "2004-05" "HEAVY" "1"
"BIRR" "2004-06" "HEAVY" "1"
"BIRR" "2004-07" "HEAVY" "1"
"BIRR" "2004-04" "LIGHT" "15"
"BIRR" "2004-05" "LIGHT" "7"
"BIRR" "2004-06" "LIGHT" "16"
"BIRR" "2004-07" "LIGHT" "18"
"BIRR" "2004-04" "MEDIUM" "2"
"BIRR" "2004-05" "MEDIUM" "3"
"BIRR" "2004-06" "MEDIUM" "2"
"BIRR" "2004-07" "MEDIUM" "2"
#I put you my code below:
ggplot(data = TEMP_PREC_BIRR, aes(x = TEMP_PREC_BIRR$year_month,
y = TEMP_PREC_BIRR$precipitation_value,
fill = TEMP_PREC_BIRR$precipitation_type)) +
geom_bar(aes (width = .2), stat = "identity") +
xlab("date") + ylab ("Number of days of precipitation") +
ggtitle("Precipitation per month - BIRR") + labs(fill = "Frequency")
ggplot(data = TEMP_BIRR, aes(x = TEMP_BIRR$year_month,
y = TEMP_BIRR$temperature_value,
fill = TEMP_BIRR$temperature_type)) +
geom_bar(aes(width = .2), stat = "identity") +
xlab("date") + ylab("Number of days of temperature") +
ggtitle("Temperature per month - BIRR") + labs(fill = "Frequency")
答案 0 :(得分:1)
您可以使用名为gridExtra
的库来执行此操作。它有一个函数grid.arrange()
就可以做到这一点。此外,您可以通过将图表的行数或列数指定为nrow
或ncol
来指定排列。
示例:如果要将6个图表排列成3X2,请使用
grid.arrange(plot1,plot2,plot3,plot4,plot5,plot6,nrow=2)
要回答您的问题,请查看下面的代码和输出:
library(ggplot2)
library(gridExtra)
Data=iris
a=ggplot(Data,aes(x=Data$Sepal.Length,Data$Petal.Length,color=Data$Species))+
geom_point()+theme(panel.background = element_blank())+
labs(x="Sepal Length",y="Petal Length",color="Species")
b=ggplot(Data,aes(x=Data$Sepal.Width,Data$Petal.Width,color=Data$Species))+
geom_point()+theme(panel.background = element_blank())+
labs(x="Sepal Width",y="Petal Width",color="Species")
grid.arrange(a,b)
答案 1 :(得分:0)
使用dplyr::bindrows()
合并两组,然后使用tidyr::gather()
将温度和降水值放在key = precipitation_or_temp
和value = value
的一列中。然后,您可以在precipitation_or_temp变量上使用一个带有ggplot
的{{1}}对象来获取两个图。
查看此链接以获取有关收集的信息:http://r4ds.had.co.nz/tidy-data.html
有关方面的更多信息,请查看此链接:http://r4ds.had.co.nz/data-visualisation.html
真的查看 R for Data Science 一书。这很容易理解,实际上可以帮助解决这些问题。以下是使用一些示例数据制作图表的方法。实际上,将数据安排到适当的格式是我将要为您留下的任务。
facet_wrap
答案 2 :(得分:0)
我得到你想要绘制的内容,但是你需要使用dplyr
和/或melt
来安排你的数据,以获得所需的输出。这是一个单调乏味的过程。
虽然我在你的代码中发现了问题。如果您要修复代码,则必须仅使用一个ggplot()
函数在同一区域中绘图。如果您创建了两个ggplot()
函数,则您的输出将绘制在另一个平面中。
以下是将您的代码版本与输出结合使用的正确方法:
ggplot(data = TEMP_PREC_BIRR, aes(x = TEMP_PREC_BIRR$year_month,
y = TEMP_PREC_BIRR$precipitation_value,
fill = TEMP_PREC_BIRR$precipitation_type,width=0.2)) +
geom_bar(stat = "identity",position = position_nudge(x=-0.2)) +
xlab("date") + ylab ("Number of days of precipitation") +
ggtitle("Precipitation per month - BIRR") + labs(fill = "Frequency")+
geom_bar(data=TEMP_BIRR,aes(x=TEMP_BIRR$year_month,
y=TEMP_BIRR$temperature_value,
fill=TEMP_BIRR$temperature_type), stat = "identity",position = position_nudge(x=0.2)) +
xlab("date") + ylab("Number of days of temperature") +
ggtitle("Temperature per month - BIRR") + labs(fill = "Frequency")
希望这会有所帮助。