Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо моята наслагвана площна графика в ggplot2 е празна

Ще започна с втория въпрос, който е по-лесен. Използване на 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) ще върне целия примерен набор от данни поради 17-посочно равенство за 4-ти.

Що се отнася до първия въпрос, документацията за geom_area дава следа:

Това предполага, че geom_area очаква колоната, съпоставена с x, да бъде числова. Въз основа на списъка за 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 и 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 аргумент в 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. Как да извлечете текущата стойност на последователност от оракул, без да я увеличавате?

  2. Намиране на примери и демонстрации за конкретна JDK версия

  3. ResultSet.getString() в колона VARCHAR2 връща празен низ

  4. ORA-01658:не може да се създаде НАЧАЛНА степен за сегмент в пространството за таблици TS_DATA

  5. Грешка при вмъкване на данни с единични кавички между тях