2012-05-11 3 views
3

Первый вопрос, который я задал в стеке, и я довольно новичок в R, поэтому, пожалуйста, прошу прощения за любые нарушения этикета. Я рисую 2 сложенных диаграммы области, используя ggplot2. Данные представляют собой события ожидания из базы данных Oracle. Это график настройки производительности. У меня есть несколько вопросов.R - ggplot2, несколько вопросов, несколько взаимосвязанных участков

enter image description here

  1. Два участка ниже, не построчно правильно, скорее всего, из-за ширины текста в легенде. Есть ли простое решение?
  2. Эти два графика действительно коррелированы, где верхний график показывает классы ожидания, такие как «CPU» и «User I/O», а нижний график показывает детали конкретных событий ожидания в этих классах. Я хотел бы, чтобы цвета в нижней части были основаны на классе ожидания, так же, как верхний, только разные оттенки этого цвета для определенных событий. Я также открыт для других вариантов, если вам не нравится эта концепция. Передавать много информации. Я ограничил количество событий до 12, чтобы соответствовать цветовой схеме, но есть больше, если она может работать.
  3. Я хотел бы либо показать более гранулированные тики времени на X, или, возможно, даже затенять внерабочие часы (6 вечера 8 утра) серыми, чтобы лучше понять время суток.
  4. Существуют ли цветовые схемы с более чем 12 цветами, которые люди обычно используют? Посмотрел пивовар, и это максимум. Я знаю, что могу создать свою собственную, просто любопытную.

Вот мой код:

library(ggplot2) 
library(RColorBrewer) 
library(gridExtra) 

DF_AAS <- read.csv('http://dl.dropbox.com/u/4131944/Permanent/R-Questions/AAS-Plot/DATA_FRAME_AAS.csv', head=TRUE,sep=",",stringsAsFactors=TRUE) 
DF_AAS <- within(DF_AAS, snap_time <- as.POSIXlt(snap_times2, 
              format = "%Y-%m-%d %H:%M:%S")) 
DF_AAS[c('snap_times2')] <- NULL 

DF_AAS_EVENT <- read.csv('http://dl.dropbox.com/u/4131944/Permanent/R-Questions/AAS-Plot/DF_AAS_EVENT.csv', head=TRUE,sep=",",stringsAsFactors=TRUE) 
DF_AAS_EVENT <- within(DF_AAS_EVENT, snap_time <- as.POSIXlt(snap_times2, 
               format = "%Y-%m-%d %H:%M:%S")) 
DF_AAS_EVENT[c('snap_times2')] <- NULL 

plot_aas_wait_class <- ggplot()+ 
    geom_area(data=DF_AAS, aes(x = snap_time, y = aas, 
            fill = wait_class),stat = "identity", position = "stack",alpha=.9)+ 
             scale_fill_brewer(palette="Paired",breaks = sort(levels(DF_AAS$wait_class)))+ 
             scale_y_continuous(breaks = seq(0, max(DF_AAS$aas)+(max(DF_AAS$aas)*.2), 5))+ 
             opts(panel.background = theme_rect(colour = "#aaaaaa")) 


plot_aas_event <- ggplot()+ 
    geom_area(data=DF_AAS_EVENT, aes(x = snap_time, y = aas, 
            fill = wait_class_event),stat = "identity", position = "stack")+ 
            scale_fill_brewer(palette="Paired",breaks = DF_AAS_EVENT$wait_class_event)+ 
            scale_y_continuous(breaks = seq(0, max(DF_AAS_EVENT$aas)+(max(DF_AAS_EVENT$aas)*.2), 5))+ 
            opts(panel.background = theme_rect(colour = "#aaaaaa")) 

grid.arrange(arrangeGrob(plot_aas_wait_class, plot_aas_event),heights=c(1/2,1/2),ncol=1) 
+1

Мое единственное, что касается этикета, было бы то, что (1) мы обычно просим, ​​чтобы люди ограничивались одним вопросом на вопрос, и (2) мы просим вас предоставить _reproducible_ данные и код. Таким образом, когда мы пишем ответ, мы можем быть _sure_, что он работает так, как вы хотите. В противном случае мы просто догадываемся, и вы просите людей сделать гораздо больше работы. – joran

+1

Что касается (4), то причина, по которой эти палитры ограничены 12 цветами, заключается в том, что использование большего количества считается плохой практикой. Человеческий глаз просто не может отличить, что многие, даже 12, толкают его. Вы можете, конечно, создать свои собственные и делать все, что хотите. – joran

+0

@joran Я предоставил воспроизводимые данные. Read.csv ссылается на общедоступный URL. Если это проблема, сообщите мне. Я решил, что несколько вопросов, вероятно, были плохими, но поскольку я довольно новичок в R, я не знал, может ли кто-то повлиять на ответ на другой. Я нахожусь на стадии «Я не знаю, что я не знаю». Я согласен с вами в отношении количества цветов. Я открыт для других визуализаций, просто не придумал хорошую альтернативу. –

ответ

1

Возможно, самое простое решение проблемы выравнивания, чтобы переместить легенды вокруг:

library(scales) 
plot_aas_wait_class <- ggplot()+ 
    geom_area(data=DF_AAS, aes(x = snap_time, y = aas,fill = wait_class),stat = "identity", position = "stack",alpha=.9)+ 
    scale_fill_brewer(palette="Paired",breaks = sort(levels(DF_AAS$wait_class)))+ 
    scale_y_continuous(breaks = seq(0, max(DF_AAS$aas)+(max(DF_AAS$aas)*.2), 5))+ 
    opts(panel.background = theme_rect(colour = "#aaaaaa")) + 
    opts(legend.position = "bottom",legend.direction = "horizontal") + 
    guides(fill = guide_legend(nrow = 2)) 

plot_aas_event <- ggplot()+ 
    geom_area(data=DF_AAS_EVENT, aes(x = snap_time, y = aas,fill = wait_class_event),stat = "identity", position = "stack")+ 
    scale_fill_brewer(palette="Paired",breaks = DF_AAS_EVENT$wait_class_event)+ 
    scale_y_continuous(breaks = seq(0, max(DF_AAS_EVENT$aas)+(max(DF_AAS_EVENT$aas)*.2), 5))+ 
    opts(panel.background = theme_rect(colour = "#aaaaaa")) + 
    opts(legend.position = "bottom",legend.direction = "horizontal") + 
    guides(fill = guide_legend(ncol = 2)) 


grid.arrange(arrangeGrob(plot_aas_wait_class, plot_aas_event),heights=c(1/2,1/2),ncol=1) 

Чтобы увеличить разрешение на оси х, I 'd используйте что-то вроде:

+ scale_x_datetime(breaks = date_breaks("2 hours")) 

или любые другие варианты, которые вы предпочитаете.

Затенение определенной области обычно осуществляется с помощью geom_rect и установки alpha = 0.25 или что-то в этом роде. Для этого потребуется создать отдельный кадр данных с начальной и конечной точками прямоугольника (используйте и -Inf для координат y), чтобы перейти к geom_rect.

Смежные вопросы