Saya akan mulai dengan pertanyaan kedua, yang lebih mudah. Menggunakan dplyr
paket, Anda dapat menggunakan top_n
untuk mendapatkan n baris terbesar untuk kolom tertentu. Misalnya:
> 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
Perhatikan bahwa Anda akan mendapatkan lebih dari n baris jika ada ikatan untuk tempat ke-n. Jadi top_n(p_ash_r_100, 10, SMPL_CNT)
akan mengembalikan seluruh kumpulan data sampel karena dasi 17 arah untuk urutan ke-4.
Untuk pertanyaan pertama, dokumentasi untuk geom_area
memberikan petunjuk:
Ini menunjukkan bahwa geom_area
mengharapkan kolom yang dipetakan ke x harus numerik. Berdasarkan daftar untuk p_ash_r_100
, SMPL_TIME
tampaknya menjadi vektor karakter. Dengan lubridate
paket, kita dapat mengonversi SMPL_TIME
ke tanggal-waktu dengan dmy_hm
:
p_ash_r_100a <- p_ash_r_100 %>%
mutate_at(vars(SMPL_TIME), dmy_hm)
Namun, ini tidak cukup untuk mendapatkan plot yang Anda inginkan karena ada beberapa nilai y
untuk setiap kombinasi x
dan fill
(yang merupakan estetika yang benar untuk geom_area
, bukan "col
"). Kita perlu meringkas data sebelum membuat plot:
p_ash_r_100a %>%
group_by(SMPL_TIME, EVENT) %>%
summarise(total = sum(SMPL_CNT)) %>%
ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
geom_area()
Namun plotnya masih belum benar. Ini karena setiap kombinasi SMPL_TIME
dan EVENT
tidak terwakili dalam kumpulan data. Kita perlu secara eksplisit memberi tahu geom_area
y
itu sama dengan nol untuk baris yang hilang. Salah satu caranya adalah dengan menggunakan fill
handy yang praktis argumen di tidyr::spread
.
group_by(p_ash_r_100a, SMPL_TIME, EVENT) %>%
summarise(smpl_sum = sum(SMPL_CNT)) %>%
spread(EVENT, smpl_sum, fill = 0) %>%
gather(EVENT, smpl_sum, CPU, `db file sequential read`,
`direct path write`,
`Log archive I/O`) %>%
ggplot(aes(x = SMPL_TIME, y = smpl_sum, fill = EVENT)) +
geom_area()