在R

时间:2018-05-17 14:17:15

标签: r ggplot2 bar-chart

我是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")

3 个答案:

答案 0 :(得分:1)

您可以使用名为gridExtra的库来执行此操作。它有一个函数grid.arrange()就可以做到这一点。此外,您可以通过将图表的行数或列数指定为nrowncol来指定排列。

示例:如果要将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)

The output of the Image is Here

答案 1 :(得分:0)

使用dplyr::bindrows()合并两组,然后使用tidyr::gather()将温度和降水值放在key = precipitation_or_tempvalue = 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")

Output Plot

希望这会有所帮助。