sql >> Databáze >  >> RDS >> Oracle

Proč je můj skládaný plošný graf v ggplot2 prázdný

Začnu druhou otázkou, která je jednodušší. Pomocí dplyr balíček, můžete použít top_n získat n největších řádků pro daný sloupec. Například:

> 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

Všimněte si, že při rovnosti bodů na n-tém místě získáte více než n řádků. Tedy top_n(p_ash_r_100, 10, SMPL_CNT) vrátí celou ukázkovou datovou sadu kvůli 17násobné remíze pro 4. místo.

Co se týče první otázky, dokumentace pro geom_area poskytuje vodítko:

To naznačuje, že geom_area očekává, že sloupec mapovaný na x by měl být číselný. Na základě výpisu pro p_ash_r_100 , SMPL_TIME se jeví jako znakový vektor. Pomocí lubridate balíček, můžeme převést SMPL_TIME na datum-čas pomocí dmy_hm :

p_ash_r_100a <- p_ash_r_100 %>%
  mutate_at(vars(SMPL_TIME), dmy_hm)

To však nestačí k získání požadovaného grafu, protože existuje více hodnot y pro každou kombinaci x a fill (což je správná estetika pro geom_area , nikoli "col "). Před vykreslením musíme shrnout data:

p_ash_r_100a %>%
  group_by(SMPL_TIME, EVENT) %>%
  summarise(total = sum(SMPL_CNT)) %>%
  ggplot(aes(SMPL_TIME, total, fill = EVENT)) +
  geom_area()

Zápletka však stále není správná. Je to proto, že každá kombinace SMPL_TIME a EVENT není zastoupena v sadě dat. Musíme explicitně sdělit geom_area že y se pro tyto chybějící řádky rovná nule. Jedním ze způsobů je použití praktického fill argument v 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()




  1. R:seznam řetězců v ifelse

  2. Zkomprimovat nebo přečíslovat ID pro všechny tabulky a resetovat sekvence na max(id)?

  3. mysql - připojit první a poslední záznam podle typu skupiny?

  4. chyba v příkazech Multiple Select v příkazu Insert