ggplot中的barplot返回单个栏而不是预期的30

时间:2017-02-17 03:58:08

标签: r ggplot2

这是一些虚拟数据:

maxlen = 0
# group
for grouper, group in groupby('1111101101101111111111111'):
    # filter
    if grouper == '1':
        # map
        thislen = len(list(group))
        # check max
        if thislen > maxlen:
            maxlen = thislen

print(maxlen)

这只是一个df,只有30个观察值和一个日期变量。

> print(ggdf)
           Sessions
2017-01-01    80510
2017-01-02    82500
2017-01-03    80496
2017-01-04    81913
2017-01-05    79714
2017-01-06    80236
2017-01-07    82163
2017-01-08    81525
2017-01-09    79738
2017-01-10    81411
2017-01-11    84069
2017-01-12    80991
2017-01-13    81350
2017-01-14    81016
2017-01-15    79220
2017-01-16    81638
2017-01-17    80597
2017-01-18    83716
2017-01-19    80657
2017-01-20    81872
2017-01-21    81496
2017-01-22    79307
2017-01-23    79062
2017-01-24    80101
2017-01-25    82178
2017-01-26    77641
2017-01-27    81067
2017-01-28    85379
2017-01-29    81833
2017-01-30    80927

我想在条形图中将指标趋向30天。

我可以在base r中工作,但不能在ggplot中工作:

> str(ggdf)
'data.frame':   30 obs. of  1 variable:
 $ Sessions: num  80510 82500 80496 81913 79714 ...

这是一个如何看的屏幕: enter image description here

我期待/希望在日期范围内看到30个柱,第一个柱为80,510,一直到80,927。

我在这里错过了什么?

1 个答案:

答案 0 :(得分:2)

根据str(ggdf),没有“日期”列,它只是rownames。我们可以创建“日期”列,然后执行ggplot

library(tidyverse)
library(scales)
rownames_to_column(ggdf, "Date") %>%
      mutate(Date = as.Date(Date)) %>%
      ggplot(., aes(x= Date, y = Sessions)) + 
                      geom_bar(stat = "identity") +
                      scale_x_date(labels = date_format("%Y-%m-%d"))

enter image description here

更新

从评论中,OP创建了一个“日期”列,但仍然在OP的帖子中得到了输出。它可以追溯到aes中引用的字符串。对于字符串,请使用aes_string

ggplot(data = ggdf, aes_string(x="Date", y = "Sessions")) + 
                  geom_bar(stat = "identity")

否则,只使用没有任何引号

ggplot(data = ggdf, aes(x=Date, y = Sessions)) +
                   geom_bar(stat = "identity")