Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego mój skumulowany wykres warstwowy w ggplot2 jest pusty?

Zacznę od drugiego pytania, które jest łatwiejsze. Korzystanie z dplyr pakiet, możesz użyć top_n aby uzyskać n największych wierszy dla danej kolumny. Na przykład:

> 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

Pamiętaj, że otrzymasz więcej niż n rzędów, jeśli będzie remis na n-tym miejscu. Zatem top_n(p_ash_r_100, 10, SMPL_CNT) zwróci cały przykładowy zestaw danych ze względu na 17-kierunkowy remis dla 4. miejsca.

Jeśli chodzi o pierwsze pytanie, dokumentacja dla geom_area daje wskazówkę:

Sugeruje to, że geom_area oczekuje, że kolumna zamapowana na x powinna być liczbowa. Na podstawie wpisu dla p_ash_r_100 , SMPL_TIME wydaje się być wektorem znaków. Za pomocą lubridate pakiet, możemy przekonwertować SMPL_TIME do daty i godziny z dmy_hm :

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

Jednak to nie wystarczy, aby uzyskać pożądany wykres, ponieważ istnieje wiele wartości y dla każdej kombinacji x i fill (co jest poprawną estetyką dla geom_area , a nie „col "). Musimy podsumować dane przed wykreśleniem:

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

Jednak fabuła nadal nie jest poprawna. Dzieje się tak, ponieważ każda kombinacja SMPL_TIME i EVENT nie jest reprezentowana w zestawie danych. Musimy wyraźnie powiedzieć geom_area że y jest równa zero dla tych brakujących wierszy. Jednym ze sposobów jest użycie poręcznego fill argument w 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieaktywne połączenie Oracle

  2. Jak zwrócić wiele wierszy z procedury składowanej? (PL/SQL Oracle)

  3. Przepełnienie liczbowe Solr

  4. Jak edytować obiekty BLOB (zawierające JSON) w Oracle SQL Developer?

  5. Samouczek Oracle SQL :Podstawowa instrukcja SQL