ggplot2 binwidth在facet_wrap直方图中没有响应

时间:2012-10-18 23:16:18

标签: r ggplot2

对于如何使我的代码或binwidth行为表示感谢。我的数据集包含每隔几个小时“4”和每天“24”收集的带时间戳的数据点。我试图在左边绘制4小时堆积直方图,在右边绘制24小时堆积直方图。因此,我希望右侧的binwidth比左侧binwidth宽6倍。但是我用binwidth尝试的一切都没有用。 x轴数据,data3 $ dts似乎是连续的而不是离散的,但也许我做得不对。

关于数据的重要说明:在右侧绘制的数据,小时数= 24,数据的dts值始终为整数。左边的数据,小时= 4数据,具有非整数dts值。

             "dts"  "Yes" "No" "Maybe" "hours"  "days"
"258"   15627.668   8       0   1       4   "7 Days"
"259"   15627.832   13      11  18      4   "7 Days"
"260"   15628       34      47  89      4   "7 Days"
"261"   15628       37      47  90      24  "7 Days"
"262"   15628.168   3       0   1       4   "7 Days"
"40"    15571       345     419 674     24  "90 Days"
"41"    15571.5     91      145 130     4   "90 Days"
"42"    15571.668   158     149 284     4   "90 Days"
"43"    15571.832   96      125 260     4   "90 Days"
"44"    15572       55      33  137     4   "90 Days"
"45"    15572       1050    1119 2660   24  "90 Days"

从pastebin中提取数据的代码:

library (ggplot2)
library (scales)
library(grid)
library(gridExtra)

color3 <- c("mediumspringgreen","red","grey44")
titles.days <-  c( "7 Days", "90 Days") 
names.facetby <- c ("dts", "hours", "days")

data3 <- read.table ("http://pastebin.com/download.php?i=wUQQUXP4", header=TRUE)
data3.melt <- melt (data3 , id = names.facetby )   
data3.melt$days <- factor (data3.melt$days, levels = titles.days)   #  put the factor in the right order, so the graphs are in the right order

 a <- ggplot     ( data3.melt 
        , aes (       x =  dts  #as.Date( dts , date1970) 
                , y =  value 
                , fill = variable)) +
        opts (axis.text.x=theme_text(angle=0, hjust=1)) +
        scale_fill_manual(values = color3) +
        scale_x_date(labels = date_format("%m/%d\n    %a") ) +
        geom_histogram (stat = "identity", position = "stack", binwidth=6.2) +  
        facet_wrap( days ~ hours, ncol=2, scales="free")            

print(a)        

当前结果,显示带宽度太窄的右侧图形:

enter image description here

2 个答案:

答案 0 :(得分:3)

@ justin的link to Hadley Wickham's post有答案,即在不同的图层中绘制左图和右图。

使用ggplot中的2个新geom_histogram行更新了正确绘制的代码:

库(ggplot2)     图书馆(秤)     库(网格)     库(gridExtra)

color3 <- c("mediumspringgreen","red","grey44")
titles.days <-  c( "7 Days", "90 Days") 
names.facetby <- c ("dts", "hours", "days")

data3 <- read.table ("http://pastebin.com/download.php?i=wUQQUXP4", header=TRUE)
data3.melt <- melt (data3 , id = names.facetby )   
data3.melt$days <- factor (data3.melt$days, levels = titles.days)   #  put the factor in the right order, so the graphs are in the right order



 a <- ggplot     ( data3.melt 
        , aes (       x =  dts  #as.Date( dts , date1970) 
                , y =  value 
                , fill = variable)) +
        opts (axis.text.x=theme_text(angle=0, hjust=1)) +
        scale_fill_manual(values = color3) +
        scale_x_date(labels = date_format("%m/%d\n%a") ) +

    # bad idea, good ideas follow   geom_histogram (stat = "identity", position = "stack", binwidth=6.2) +  #, breaks = breaks.x
        geom_histogram (data =  subset(data3.melt, hours == 4),  stat = "identity", position = "stack", binwidth=0.3) + #, breaks = breaks.x
        geom_histogram (data =  subset(data3.melt, hours == 24),  stat = "identity", position = "stack", binwidth=0.9) +    #, breaks = breaks.x

        facet_wrap( days ~ hours, ncol=2, scales="free")            

print(a)        # plot the thing

更正图表: http://imgur.com/9j1Xz

答案 1 :(得分:1)

箱子的宽度实际上是相同的。不同之处在于90天的地块中有更多的垃圾箱。

您可以在scales="free_y"

中设置facet_wrap来查看此内容

您还可以查看this post,其中介绍了您正在寻找的潜在技术。