2013-01-17 65 views
4

破后我刚刚更新了我的包GGPLOT2和我开始与我的条形图以下警告消息:GGPLOT2堆叠条形图,为了更新

映射到y的变量,也采用STAT =“BIN”。在stat =“bin”的情况下, 将尝试将y值设置为每个组中的个案数量。 这可能会导致意外的行为,并且不会在未来版本的ggplot2中允许。如果你想让y代表个案的计数, 使用stat =“bin”,并且不要将变量映射到y。如果您希望y到 表示数据中的值,请使用stat =“identity”。

我在我的代码中添加了stat ='identity'。现在堆积条形图中的订单是错误的(订单由因子水平定义)。我真的不知道如何解决它。我现在可以暂时离开它 - 但警告信息表示它将来不会被允许,所以我现在想解决它。有没有解决这个问题?

这是数据和代码示例:

data.set <- structure(list(Date = structure(c(15675, 15676, 15677, 15678, 
15679, 15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 
15688, 15689, 15690, 15691, 15692, 15693, 15694, 15695, 15696, 
15697, 15698, 15699, 15700, 15701, 15702, 15703, 15704, 15705, 
15675, 15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 
15684, 15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 
15693, 15694, 15695, 15696, 15697, 15698, 15699, 15700, 15701, 
15702, 15703, 15704, 15705, 15675, 15676, 15677, 15678, 15679, 
15680, 15681, 15682, 15683, 15684, 15685, 15686, 15687, 15688, 
15689, 15690, 15691, 15692, 15693, 15694, 15695, 15696, 15697, 
15698, 15699, 15700, 15701, 15702, 15703, 15704, 15705, 15675, 
15676, 15677, 15678, 15679, 15680, 15681, 15682, 15683, 15684, 
15685, 15686, 15687, 15688, 15689, 15690, 15691, 15692, 15693, 
15694, 15695, 15696, 15697, 15698, 15699, 15700, 15701, 15702, 
15703, 15704, 15705), class = "Date"), year.month = structure(c(12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L), .Label = c("Jan 2012", "Feb 2012", 
"Mar 2012", "Apr 2012", "May 2012", "Jun 2012", "Jul 2012", "Aug 2012", 
"Sep 2012", "Oct 2012", "Nov 2012", "Dec 2012"), class = "factor"), 
    DOW = structure(c(7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 
    3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 
    4L, 5L, 6L, 7L, 1L, 2L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 
    3L, 4L, 5L, 6L, 7L, 1L, 2L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 
    2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 
    7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 
    1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L, 2L), .Label = c("Sun", "Mon", 
    "Tue", "Wed", "Thu", "Fri", "Sat"), class = "factor"), variable = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L), .Label = c("On Duty to Departure", "Departure to Arrival", 
    "Arrival to Off Duty", "Departure to Off Duty"), class = "factor"), 
    value = c(NA, 1, 1.83333333333333, 3, 2, 1.38333333333333, 
    NA, NA, 1, 1.61666666666667, 1.1, 3.5, 1.53333333333333, 
    NA, NA, 5.5, 3, 1.35, 3.5, 3.5, NA, NA, 1.78333333333333, 
    NA, NA, 0.75, 1.45, NA, NA, 1.13333333333333, NA, NA, NA, 
    0.0666666666666667, 0.0833333333333333, NA, 0.183333333333333, 
    NA, NA, NA, 0.466666666666667, 0.2, 0.35, 0.383333333333333, 
    NA, NA, 0.133333333333333, 0.0166666666666667, NA, 0.0166666666666667, 
    0.183333333333333, NA, NA, 0.2, NA, NA, 0.0166666666666667, 
    0.75, NA, NA, 0.1, NA, NA, NA, 9.41666666666667, 7.83333333333333, 
    NA, 7.61666666666667, NA, NA, NA, 9.3, 7.98333333333333, 
    7.25, 7.8, NA, NA, 4.41666666666667, 8, NA, 6.5, 4.08333333333333, 
    NA, NA, 3.71666666666667, NA, NA, 10.1666666666667, 9.46666666666667, 
    NA, NA, 6.7, NA, NA, 10.4666666666667, NA, NA, 7.95, NA, 
    NA, NA, 6.06666666666667, NA, NA, NA, NA, NA, NA, NA, NA, 
    6.23333333333333, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA), day = c("01", "02", "03", "04", "05", "06", 
    "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", 
    "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", 
    "27", "28", "29", "30", "31", "01", "02", "03", "04", "05", 
    "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", 
    "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", 
    "26", "27", "28", "29", "30", "31", "01", "02", "03", "04", 
    "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", 
    "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", 
    "25", "26", "27", "28", "29", "30", "31", "01", "02", "03", 
    "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", 
    "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", 
    "24", "25", "26", "27", "28", "29", "30", "31")), .Names = c("Date", 
"year.month", "DOW", "variable", "value", "day"), row.names = c(336L, 
337L, 338L, 339L, 340L, 341L, 342L, 343L, 344L, 345L, 346L, 347L, 
348L, 349L, 350L, 351L, 352L, 353L, 354L, 355L, 356L, 357L, 358L, 
359L, 360L, 361L, 362L, 363L, 364L, 365L, 366L, 702L, 703L, 704L, 
705L, 706L, 707L, 708L, 709L, 710L, 711L, 712L, 713L, 714L, 715L, 
716L, 717L, 718L, 719L, 720L, 721L, 722L, 723L, 724L, 725L, 726L, 
727L, 728L, 729L, 730L, 731L, 732L, 1068L, 1069L, 1070L, 1071L, 
1072L, 1073L, 1074L, 1075L, 1076L, 1077L, 1078L, 1079L, 1080L, 
1081L, 1082L, 1083L, 1084L, 1085L, 1086L, 1087L, 1088L, 1089L, 
1090L, 1091L, 1092L, 1093L, 1094L, 1095L, 1096L, 1097L, 1098L, 
1434L, 1435L, 1436L, 1437L, 1438L, 1439L, 1440L, 1441L, 1442L, 
1443L, 1444L, 1445L, 1446L, 1447L, 1448L, 1449L, 1450L, 1451L, 
1452L, 1453L, 1454L, 1455L, 1456L, 1457L, 1458L, 1459L, 1460L, 
1461L, 1462L, 1463L, 1464L), class = "data.frame") 

## Old code - Correct order + warning 
ggplot(data = data.set, 
     aes(x = day, 
      y = value, 
      fill = variable)) + 
    geom_bar(colour = 'black') + 
    ylab('Avg Time (hrs)') + 
    xlab('Day of the Month') + 
    guides(fill = guide_legend(title = "")) 


## Order is now broken 
ggplot(data = data.set, 
     aes(x = day, 
      y = value, 
      fill = variable)) + 
    geom_bar(colour = 'black', stat='identity') + 
    ylab('Avg Time (hrs)') + 
    xlab('Day of the Month') 

## Error with position='fill' 
ggplot(data = data.set, 
     aes(x = day, 
      y = value, 
      fill = variable)) + 
    geom_bar(colour = 'black', stat='identity', position='fill') + 
    ylab('Avg Time (hrs)') + 
    xlab('Day of the Month') 
+0

这让我疯狂。谢谢你提问/回答。 – Tom

回答

6

我觉得这是一个已知的bug的例子:https://github.com/hadley/ggplot2/issues/721

要解决它,并得到原始排序,添加order美学:

ggplot(data = data.set, 
     aes(x = day, 
      y = value, 
      fill = variable, 
      order = variable)) + 
    geom_bar(colour = 'black', stat='identity') + 
    ylab('Avg Time (hrs)') + 
    xlab('Day of the Month')