【问题标题】:frequency plot using ggplot hangs or not showing plot使用 ggplot 的频率图挂起或不显示图
【发布时间】:2012-02-06 09:11:34
【问题描述】:

我有一个包含 880,000 行和 2 列(“宽度”、“组”)的数据框,格式如下:
宽度组

20    a 
25    a 
20    a 
25    a 
35    b 
40    c 
20    d 
25    d 

我想为同一图中的所有四个组创建一个频率多边形,但到目前为止我仍然没有成功。

df1 = cbind(ceiling(rnorm(20, 30,5)), 'a')   
df2 = cbind(ceiling(rnorm(40, 80,10)), 'b')   
df3 = cbind(ceiling(rnorm(30, 50,8)), 'c')   
df4 = cbind(ceiling(rnorm(35, 30,7)), 'd')   
dfrm = rbind(df1,rbind(df2,rbind(df3,df4)))  
colnames(dfrm)=c('width', 'group')           
dfrm = as.data.frame(dfrm)

qplot(width, data = dfrm, geom="freqpoly", binwidth = 100) #不显示任何情节

ggplot(dfrm, aes(width, ..density.., colour = group)) +                  
   geom_freqpoly(binwidth = 1000)  #create more than four plots 

我需要画类似下面的东西:

http://had.co.nz/ggplot2/graphics/996ae62d750dfccac8805fa0c87168cc.png


或者

http://had.co.nz/ggplot2/graphics/55078149a733dd1a0b42a57faf847036.png

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    有几个问题。首先,您创建dfrmwidth 的方式是一个因素。

    > str(dfrm)
    'data.frame':   125 obs. of  2 variables:
     $ width: Factor w/ 60 levels "106","20","21",..: 7 7 17 10 9 9 6 7 17 4 ...
     $ group: Factor w/ 4 levels "a","b","c","d": 1 1 1 1 1 1 1 1 1 1 ...
    

    这是因为cbind 创建了一个必须具有所有相同类型的矩阵,并且由于有一个字符,所以它是一个字符矩阵。后来转换为 data.frame 使它们成为因素。这可以修复

    dfrm$width <- as.numeric(as.character(dfrm$width))
    

    或者更好,不要一开始就做矩阵

    df1 = data.frame(width=ceiling(rnorm(20, 30,5)), group='a')   
    df2 = data.frame(width=ceiling(rnorm(40, 80,10)), group='b')   
    df3 = data.frame(width=ceiling(rnorm(30, 50,8)), group='c')   
    df4 = data.frame(width=ceiling(rnorm(35, 30,7)), group='d')   
    dfrm = rbind(df1,df2,df3,df4)
    

    这足以制作图表

    ggplot(dfrm, aes(width, ..density.., colour = group)) +                  
       geom_freqpoly(binwidth = 1000)
    

    虽然看起来只有 1 行,但实际上有 4 行,都在彼此之上。您只能看到最后一张(“d”组)。这指出了第二个问题:您的 binwidth 对于这些数据来说太大了。

    ggplot(dfrm, aes(width, ..density.., colour = group)) +                  
       geom_freqpoly(binwidth = 10)
    

    不过,geom_freqpoly 似乎没有fill 的美感。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2017-01-24
      相关资源
      最近更新 更多