为什么geom_line()和geom_freqpoly()会返回不同的图形?

时间:2013-04-03 21:32:10

标签: r ggplot2

我正试着绕过ggplot2来创建漂亮的图形,你可能都知道:)

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

我希望有一个折线图,用于绘制x轴上的城市,4行显示4个家庭类型中每个城市的每个城市的数据文件中的事务数。听起来不太难,所以我发现了两种方法。

  1. 使用中间表执行计数,使用 geom_line()绘制结果
  2. 在原始数据框
  3. 上使用 geom_freqpoly()

    基本图表看起来相同,但是图表nr。 2似乎缺少计数的所有0值的图(例如,对于SACRAMENTO的城市,没有公寓,多家庭或未知的数据(在该图中似乎完全没有))。

    我个人更喜欢方法编号2的语法而不是编号1的语法(可能是个人的东西)。

    所以我的问题是:我做错了什么,或者是否有一种方法可以在方法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)
    

1 个答案:

答案 0 :(得分:2)

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

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

然而,这并不完全相同(比较图表的开头),因为休息被搞砸了。它的宽度为1,而不是从1到39以binwidth为1进行分箱,而是从0.5开始直到39.5。

enter image description here