【问题标题】:Ggplot area chart plotting strangelyggplot面积图绘制奇怪
【发布时间】:2018-08-24 09:34:01
【问题描述】:

我正在尝试使用 geom_area() 函数随时间(x 轴)绘制多个床位(y 轴),并按等级(5 个级别)进行颜色分组。

我有一个包含 866,520 行的海量数据集,因此我刚刚在下面提供了一个示例,说明数据的外观。数据范围为 2015-01-01 至 2018-07-01。

> head(Test, 100)
          Date               Rating Beds Location
        (Date)              (Fact)  (Num)  (Char)
1   2015-09-01              Unrated   22 f51f5385
2   2015-10-01              Unrated   22 f51f5385
3   2015-11-01              Unrated   22 f51f5385
4   2015-12-01           Inadequate   22 f51f5385
5   2016-01-01           Inadequate   22 f51f5385
6   2016-02-01           Inadequate   22 f51f5385
7   2016-03-01           Inadequate   22 f51f5385
8   2016-04-01           Inadequate   22 f51f5385
9   2016-05-01           Inadequate   22 f51f5385
10  2016-06-01           Inadequate   22 f51f5385
11  2016-07-01           Inadequate   22 f51f5385
12  2016-08-01 Requires improvement   22 f51f5385
13  2016-09-01 Requires improvement   22 f51f5385
14  2016-10-01 Requires improvement   22 f51f5385
15  2016-11-01 Requires improvement   22 f51f5385
16  2016-12-01 Requires improvement   22 f51f5385
17  2017-01-01 Requires improvement   22 f51f5385
18  2017-02-01 Requires improvement   22 f51f5385
19  2017-03-01 Requires improvement   22 f51f5385
20  2017-04-01 Requires improvement   22 f51f5385
21  2017-05-01 Requires improvement   22 f51f5385
22  2017-06-01 Requires improvement   22 f51f5385
23  2017-07-01 Requires improvement   22 f51f5385
24  2017-08-01 Requires improvement   22 f51f5385
25  2017-09-01 Requires improvement   22 f51f5385
26  2017-10-01 Requires improvement   22 f51f5385
27  2017-11-01 Requires improvement   22 f51f5385
28  2017-12-01 Requires improvement   22 f51f5385
29  2018-01-01 Requires improvement   22 f51f5385
30  2018-02-01 Requires improvement   22 f51f5385
31  2018-03-01 Requires improvement   22 f51f5385
32  2018-04-01 Requires improvement   22 f51f5385
33  2018-05-01 Requires improvement   22 f51f5385
34  2018-06-01 Requires improvement   22 f51f5385
35  2018-07-01 Requires improvement   22 f51f5385
36  2015-09-01              Unrated    0 840eef42
37  2015-10-01              Unrated    0 840eef42
38  2015-11-01              Unrated    0 840eef42
39  2015-12-01              Unrated    0 840eef42
40  2016-01-01              Unrated    0 840eef42
41  2016-02-01              Unrated    0 840eef42
42  2016-03-01              Unrated    0 840eef42
43  2016-04-01              Unrated    0 840eef42
44  2016-05-01              Unrated    0 840eef42
45  2016-06-01              Unrated    0 840eef42
46  2016-07-01              Unrated    0 840eef42
47  2016-08-01              Unrated    0 840eef42
48  2016-09-01              Unrated    0 840eef42
49  2016-10-01              Unrated    0 840eef42
50  2016-11-01              Unrated    0 840eef42
51  2016-12-01              Unrated    0 840eef42
52  2015-09-01                 Good    0 d774c8a9
53  2015-10-01                 Good    0 d774c8a9
54  2015-11-01                 Good    0 d774c8a9
55  2015-12-01                 Good    0 d774c8a9
56  2016-01-01                 Good    0 d774c8a9
57  2016-02-01                 Good    0 d774c8a9
58  2016-03-01                 Good    0 d774c8a9
59  2016-04-01                 Good    0 d774c8a9
60  2016-05-01                 Good    0 d774c8a9
61  2016-06-01                 Good    0 d774c8a9
62  2016-07-01                 Good    0 d774c8a9
63  2016-08-01                 Good    0 d774c8a9
64  2016-09-01                 Good    0 d774c8a9
65  2016-10-01                 Good    0 d774c8a9
66  2016-11-01                 Good    0 d774c8a9
67  2016-12-01                 Good    0 d774c8a9
68  2017-01-01                 Good    0 d774c8a9
69  2017-02-01                 Good    0 d774c8a9
70  2017-03-01                 Good    0 d774c8a9
71  2017-04-01                 Good    0 d774c8a9
72  2017-05-01                 Good    0 d774c8a9
73  2017-06-01                 Good    0 d774c8a9
74  2017-07-01                 Good    0 d774c8a9
75  2017-08-01 Requires improvement    0 d774c8a9
76  2017-09-01 Requires improvement    0 d774c8a9
77  2017-10-01 Requires improvement    0 d774c8a9
78  2017-11-01 Requires improvement    0 d774c8a9
79  2017-12-01 Requires improvement    0 d774c8a9
80  2018-01-01 Requires improvement    0 d774c8a9
81  2018-02-01 Requires improvement    0 d774c8a9
82  2018-03-01 Requires improvement    0 d774c8a9
83  2018-04-01 Requires improvement    0 d774c8a9
84  2018-05-01 Requires improvement    0 d774c8a9
85  2018-06-01 Requires improvement    0 d774c8a9
86  2018-07-01 Requires improvement    0 d774c8a9
87  2015-09-01              Unrated   11 4947911b
88  2015-10-01              Unrated   11 4947911b
89  2015-11-01              Unrated   11 4947911b
90  2015-12-01                 Good   11 4947911b
91  2016-01-01                 Good   11 4947911b
92  2016-02-01                 Good   11 4947911b
93  2016-03-01                 Good   11 4947911b
94  2016-04-01                 Good   11 4947911b
95  2016-05-01                 Good   11 4947911b
96  2016-06-01                 Good   11 4947911b
97  2016-07-01                 Good   11 4947911b
98  2016-08-01                 Good   11 4947911b
99  2016-09-01                 Good   11 4947911b
100 2016-10-01                 Good   11 4947911b
> 

我的输入输出:

    > dput(head(Test,100))
structure(list(Date = structure(c(16679, 16709, 16740, 16770, 
16801, 16832, 16861, 16892, 16922, 16953, 16983, 17014, 17045, 
17075, 17106, 17136, 17167, 17198, 17226, 17257, 17287, 17318, 
17348, 17379, 17410, 17440, 17471, 17501, 17532, 17563, 17591, 
17622, 17652, 17683, 17713, 16679, 16709, 16740, 16770, 16801, 
16832, 16861, 16892, 16922, 16953, 16983, 17014, 17045, 17075, 
17106, 17136, 16679, 16709, 16740, 16770, 16801, 16832, 16861, 
16892, 16922, 16953, 16983, 17014, 17045, 17075, 17106, 17136, 
17167, 17198, 17226, 17257, 17287, 17318, 17348, 17379, 17410, 
17440, 17471, 17501, 17532, 17563, 17591, 17622, 17652, 17683, 
17713, 16679, 16709, 16740, 16770, 16801, 16832, 16861, 16892, 
16922, 16953, 16983, 17014, 17045, 17075), class = "Date"), Rating = structure(c(5L, 
5L, 5L, 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, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = c("Good", "Inadequate", "Outstanding", 
"Requires improvement", "Unrated"), class = "factor"), Beds = c(22, 
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 
22, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, 11, 
11, 11, 11, 11, 11, 11, 11), Location = c("f51f5385", "f51f5385", 
"f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", 
"f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", 
"f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", 
"f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", 
"f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", "f51f5385", 
"f51f5385", "f51f5385", "f51f5385", "840eef42", "840eef42", "840eef42", 
"840eef42", "840eef42", "840eef42", "840eef42", "840eef42", "840eef42", 
"840eef42", "840eef42", "840eef42", "840eef42", "840eef42", "840eef42", 
"840eef42", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", 
"d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", 
"d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", 
"d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", 
"d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", 
"d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", "d774c8a9", 
"4947911b", "4947911b", "4947911b", "4947911b", "4947911b", "4947911b", 
"4947911b", "4947911b", "4947911b", "4947911b", "4947911b", "4947911b", 
"4947911b", "4947911b")), .Names = c("Date", "Rating", "Beds", 
"Location"), row.names = c(NA, 100L), class = "data.frame")

这是我使用大数据集的代码:

ggplot(Beds_total, aes(x = Date, y = Beds, fill = Rating))+
   geom_area(color = "black", alpha = .4)

但是,这会生成以下图:

任何想法出了什么问题,我首先假设平滑有问题。

【问题讨论】:

  • 是的,我们需要一个更大的示例,使用该示例运行您的代码不会提供任何有用的信息。提供几个日期,我们需要沿 x 轴变化
  • 期望的输出应该是什么样的?
  • 另外,请确保您的日期变量实际上属于 Date 类。
  • 您应该提供几年的数据,以便我们重现您的问题。我猜问题是您的 date 是一个 character 列并创建了一个离散的比例 - 将您的日期格式化为 Date 或在您的 aes() 中设置 group = Rating
  • 我太快确认新代码添加是否成功,当我尝试使用大型数据集运行它时,我遇到了同样的问题。将很快跟进更大的数据集。观看这个空间...

标签: r ggplot2


【解决方案1】:

我认为您的数据对于 ggplot 来说有点太混乱了。当您将数据发送到ggplot() 时,您的数据应该是干净的并且可以绘制。由于您的位置不同,您似乎对每个日期/评级都有多个计数。我将假设您只是想将来自不同位置的值相加。您可以在绘图之前使用dplyr/tidyr 执行此操作。例如

library(dplyr)
library(tidyr)
Beds_total %>% group_by(Date, Rating) %>% 
  summarize(Beds=sum(Beds)) %>% 
  complete(Date, Rating, fill=list(Beds=0)) %>% 
ggplot(aes(x = Date, y = Beds, fill=Rating))+
  geom_area(color = "black", alpha = .4)

这是样本数据返回的内容

【讨论】:

    猜你喜欢
    • 2019-04-09
    • 2014-08-12
    • 2016-08-17
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多