ggplot中数据帧中的多个分组变量

时间:2019-07-17 22:16:02

标签: r ggplot2 shiny dplyr

我有一个与转售单位有关的交易数据集。

我使用了流水线函数根据flat_type和region对数据进行分组和汇总

plotdata1<-data1 %>% 
  group_by(year, region,flat_type) %>% 
  summarize(mean_price = mean(resale_price))

这是我的数据集

 year region  flat_type mean_price
  <int> <fct>   <fct>          <dbl>
1  2007 Central 3 ROOM       236452.
2  2007 Central 4 ROOM       367471.
3  2007 Central 5 ROOM       467264.
4  2007 East    3 ROOM       198682.
5  2007 East    4 ROOM       266645.
6  2007 East    5 ROOM       323110.

但是,由于有2个分组变量,因此这不允许我正确绘制折线图。我打算按地区(包括所有3种类型的公寓)来绘制公寓的平均转售价格。然后,使用shiny,我将能够使用selectInput函数在所有平面类型或每个单独的平面类型之间进行选择。例如,该图将能够显示每个区域3个房间的平均转售价格。

这是情节的代码

ggplot(data=plotdata1,aes(x=year,y=mean_price))+
  geom_line(stat = 'identity',aes(colour=region,group=region))+
  geom_point()+
  xlim(c(2006,2018))+
  ylab("Average Price")+
  xlab('Year')

哪个给我错误

  

错误:列region是一个分组,因此无法修改   变量

执行此操作并根据区域对其进行绘制,但是我将无法从输入框中选择每个平面类型。

plotdata1<-data1 %>% 
  group_by(year, region) %>% 
  summarize(mean_price = mean(resale_price))

这是该图的预期外观,该图在使用此上方的管道代码时有效 picture。但是话又说回来,我将无法在所有平板型或每个平板型之间进行选择

1 个答案:

答案 0 :(得分:0)

不知道为什么会收到该错误。您可以尝试将aes()而不是geom放入ggplot()通话中的通话吗?这对我有用...

set.seed(123)
df <- data.frame(region=sample(letters[1:4],100,T),
                 type=sample(c('1 room','2 room','3 room'),100,T),
                 year=sample(2010:2015,100,T),
                 price=sample(1000:2000,100,T))

df %>% group_by(region,type,year) %>% 
  summarise(mean.price=mean(price)) %>% 
  ggplot(aes(year,mean.price,group=region,color=region)) + geom_point() + geom_line() +
  facet_wrap(~type,scales='free')

graph

如果您使用的是shiny,则可以在ggplot调用之前删除facet_wrap并添加filter(),以便用户可以指定要绘制的房价类型。