我正在尝试使用以下命令在r中生成堆积区域图:
ggplot(p_ash_r_100,aes(x=SMPL_TIME,y=SMPL_CNT,col=EVENT,group=1))+ geom_area()
这里EVENT是我想根据ORACLE DB中的时间和样本计数绘制出来的第3个变量。
但是带有上述命令的图表返回空白。
我的问题是:
如何解决空图问题。
如何根据显示时或之前的数据量仅过滤10个顶级变量?我可以在excel中轻松完成,就像我在图像文件中显示的那样。
我的数据集如下所示:
> p_ash_r_100
SMPL_TIME SQL_ID MODULE EVENT SMPL_CNT
1 11-APR-17 09:00 03d5x9busf1d8 SQL*Plus CPU 1
2 11-APR-17 09:00 2pb7bzzadj0pn OGG-RCASI004-OPEN_DATA_SOURCE db file sequential read 1
3 11-APR-17 09:00 NO_SQL GoldenGate CPU 1
4 11-APR-17 09:00 NO_SQL MMON_SLAVE CPU 1
5 11-APR-17 09:00 NO_SQL NO_SQL Log archive I/O 1
6 11-APR-17 09:00 NO_SQL XStream CPU 1
7 11-APR-17 09:00 acuzxh557cq81 GoldenGate db file sequential read 1
8 11-APR-17 09:00 cqtby4bsrmxzh GoldenGate CPU 1
9 11-APR-17 09:00 dgzp3at57cagd GoldenGate db file sequential read 2
10 11-APR-17 09:00 fjp9t92a5yx1v GoldenGate db file sequential read 1
11 11-APR-17 09:00 guh1sva39p9db GoldenGate db file sequential read 1
12 11-APR-17 09:01 0hz0dhgwk12cd GoldenGate direct path write 1
13 11-APR-17 09:01 2jafq5d4n0akv GoldenGate CPU 1
14 11-APR-17 09:01 37cspa0acgqxp GoldenGate db file sequential read 2
15 11-APR-17 09:01 79rugrngrvpt1 OGG-RADDR025-OPEN_DATA_SOURCE db file sequential read 1
16 11-APR-17 09:01 7k6zp92kbv28m GoldenGate CPU 1
17 11-APR-17 09:01 7nvtkfc0bt8vv GoldenGate db file sequential read 1
18 11-APR-17 09:01 7pvpzvd1g769d GoldenGate CPU 1
19 11-APR-17 09:01 9gduk46rmt5jy GoldenGate db file sequential read 1
20 11-APR-17 09:01 NO_SQL GoldenGate CPU
7
为了便于理解,添加以下数据集的图像
我想从excel =>
得到类似这样的结束图在Excel中过滤值以获取excel中的前10个事件=>
答案 0 :(得分:1)
我将从第二个问题开始,这更容易。使用dplyr
包,您可以使用top_n
获取给定列的n个最大行。例如:
> top_n(p_ash_r_100a, 3, SMPL_CNT) %>% arrange(desc(SMPL_CNT))
# A tibble: 3 × 5
SMPL_TIME SQL_ID MODULE EVENT SMPL_CNT
<dttm> <chr> <chr> <chr> <int>
1 2017-04-11 09:01:00 NO_SQL GoldenGate CPU 7
2 2017-04-11 09:00:00 dgzp3at57cagd GoldenGate db file sequential read 2
3 2017-04-11 09:01:00 37cspa0acgqxp GoldenGate db file sequential read 2
请注意,如果第n个地方有联系,您将获得超过n行。因此,top_n(p_ash_r_100, 10, SMPL_CNT)
将返回整个样本数据集,因为第4版为17路。
至于第一个问题,geom_area
的文档提供了一个线索:
区域图是堆积条形图的连续模拟(参见 geom_bar),可用于显示整体的组成如何变化 在x的范围内。
这表明geom_area
期望映射到x的列应该是数字。根据{{1}}的列表,p_ash_r_100
似乎是一个字符向量。使用SMPL_TIME
包,我们可以将lubridate
转换为SMPL_TIME
的日期时间:
dmy_hm
然而,这还不足以获得您想要的情节,因为p_ash_r_100a <- p_ash_r_100 %>%
mutate_at(vars(SMPL_TIME), dmy_hm)
和y
的每个组合都有x
的多个值(这是{的正确美学{1}},而非“fill
”)。我们需要在绘图前总结数据:
geom_area
然而情节仍然不正确。这是因为col
和p_ash_r_100a %>%
group_by(SMPL_TIME, EVENT) %>%
summarise(total = sum(SMPL_CNT)) %>%
ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
geom_area()
的每个组合都未在数据集中表示。我们需要明确告诉SMPL_TIME
EVENT
对于那些丢失的行,它们等于零。一种方法是在geom_area
中使用方便的y
参数。
fill