1

我正在尝试让我的头脑围绕 ggplot2 创建美丽的图表,你可能都知道 :)

我有一个数据集,其中包含一些已售房屋的交易(由: http: //support.spatialkey.com/spatialkey-sample-csv-data/提供)

我想要一个折线图,在 x 轴上绘制城市,4 条线显示我的数据文件中每个城市的 4 种家庭类型中的每一种的交易数量。听起来不太难,所以我找到了两种方法来做到这一点。

  1. 使用中间表进行计数和geom_line()绘制结果
  2. 在我的原始数据框上使用geom_freqpoly()

基本图表看起来相同,但图表 nr。2 似乎缺少计数的所有 0 值的图(例如,对于 SACRAMENTO 右侧的城市,没有 Condo、Multi-Family 或 Unknown 的数据(在此图中似乎完全缺失))。

我个人比方法 1 更喜欢方法 2 的语法(这可能是个人的事情)。

所以我的问题是:我做错了什么还是有一种方法可以在方法 2 中绘制 0 个计数?

# line chart example
# setup the libraries
library(RCurl)        # so we can download a dataset
library(ggplot2)      # so we can make nice plots
library(gridExtra)    # so we can put plots on a grid

# get the data in from the web straight into  a dataframe (all data is from: http://support.spatialkey.com/spatialkey-sample-csv-data/)
data <- read.csv(text=getURL('http://samplecsvs.s3.amazonaws.com/Sacramentorealestatetransactions.csv'))

# create a data frame that counts the number of trx per city/type combination
df_city_type<-data.frame(table(data$city,data$type))

# correct the column names in the dataframe
names(df_city_type)<-c('city','type','qty')

# alternative 1: create a ggplot with a geom_line on the calculated values - to show the nr. trx per city (on the x axis) with a differenct colored line for each type  
cline1<-ggplot(df_city_type,aes(x=city,y=qty,group=type,color=type)) + geom_line() + theme(axis.text.x=element_text(angle=90,hjust=0))

# alternative 2: create a ggplot with a geom_freqpoly on the source data - - to show the nr. trx per city (on the x axis) with a differenct colored line for each type  
c_line <- ggplot(na.omit(data),aes(city,group=type,color=type))
cline2<- c_line + geom_freqpoly() + theme(axis.text.x=element_text(angle=90,hjust=0))

# plot the two graphs in rows to compare, see that right of SACRAMENTO we miss two lines in plot 2, while they are in plot 1 (and we want them)
myplot<-grid.arrange(cline1,cline2)
4

1 回答 1

2

正如@joran 指出的那样,当使用“连续”值时,这给出了一个“相似”的图:

ggplot(data, aes(x=as.numeric(factor(city)), group=type, colour=type)) + 
                geom_freqpoly(binwidth=1)

然而,这并不完全相同(比较图表的开头),因为中断被搞砸了。出于某种原因,它不是从 1 到 39 且 binwidth 为 1,而是从 0.5 开始,一直到 39.5。

在此处输入图像描述

于 2013-04-03T22:30:32.370 回答