2014-09-16 3 views
-3

У меня есть уровни факторов, такие как «node002» «node004» «node006» «node016» «node017» «node018», которые строятся по датам. Я пытаюсь подложить данный уровень фактора за период, используя geom_rect. Для дат я могу сделать что-то вроде ymin=as.Date("8-Apr-2014", format="%d-%b-%Y").Использование уровней факторов с geom_rect

Можно ли оговорить, скажем, ymin с точки зрения уровней факторов? Если да, то как это сделать?

Вот еще немного информации, чтобы попытаться прояснить этот вопрос:

данные выглядят следующим образом:

17-Mar-2014 node004 node016 node018 node020 node025 node034 node041 
15-Sep-2014 node002 node016 node061 node098 
8-Sep-2014 node002 node016 node020 node061 
1-Sep-2014 node002 node016 node020 node061 
25-Aug-2014 node002 node020 node061 
11-Aug-2014 node006 node020 
4-Aug-2014 node020 
28-Jul-2014 node020 
21-Jul-2014 node020 
14-Jul-2014 node016 node020 node061 
7-Jul-2014 node016 node020 node061 
30-Jun-2014 node016 node020 node061 
23-Jun-2014 node016 node020 node061 
7-Apr-2014 node004 node018 node025 node034 node041 node057 
10-Mar-2014 node004 node016 node018 node020 node025 node034 node041 
3-Mar-2014 node004 node016 node018 node020 node025 node034 node041 
19-Aug-2013 node016 node018 node025 node057 node065 
12-Aug-2013 node025 node057 node080 
5-Aug-2013 node020 node025 node080 
29-Jul-2013 node020 node025 node080 
22-Jul-2013 node025 node080 
15-Jul-2013 node025 node080 
8-Jul-2013 node025 
1-Jul-2013 node025 
24-Jun-2013 node025 
17-Jun-2013 node025 
27-May-2013 node057 
13-May-2013 node018 node025 node057 node080 
6-May-2013 node017 node018 node025 node057 
29-Apr-2013 node018 
22-Apr-2013 node018 node020 node025 node050 node080 
15-Apr-2013 node018 node020 node025 node080 
8-Apr-2013 node018 node020 node025 node080 
1-Apr-2013 node018 node020 node025 node080 
25-Mar-2013 node017 node080 
18-Mar-2013 node047 
11-Mar-2013 node025 
25-Feb-2013 node034 
18-Feb-2013 node034 
11-Feb-2013 node025 node034 node061 
4-Feb-2013 node025 node034 node061 
28-Jan-2013 node025 node034 node061 
21-Jan-2013 node025 node034 node050 node061 
14-Jan-2013 node025 node034 node061 
7-Jan-2013 node025 node061*emphasized text* 
16-Jun-2014 node016 node020 node061 
9-Jun-2014 node016 node020 node061 
2-Jun-2014 node016 node020 node061 
26-May-2014 node016 node020 node061 
19-May-2014 node020 node061 
12-May-2014 node016 node020 node061 
5-May-2014 node020 
28-Apr-2014 node004 node018 node025 node034 node041 node057 
21-Apr-2014 node004 node016 node018 node025 node034 node041 node057 
14-Apr-2014 node004 node016 node018 node025 node034 node041 node057 
31-Mar-2014 node004 node018 node025 node034 node041 node057 
24-Mar-2014 node004 node018 node020 node034 node041 node057 
17-Feb-2014 node004 node016 node018 node034 
10-Feb-2014 node004 node018 node020 
3-Feb-2014 node004 node018 node025 
27-Jan-2014 node004 node018 node020 node025 
20-Jan-2014 node004 node018 node020 node025 
13-Jan-2014 node004 node018 node020 node025 node041 
6-Jan-2014 node016 node020 node025 node041 node047 node082 
30-Dec-2013 node016 node020 node025 node041 
23-Dec-2013 node016 node020 node025 node041 node057 
16-Dec-2013 node020 node025 node041 node087 
9-Dec-2013 node016 node018 node020 node025 node065 
2-Dec-2013 node018 node020 node025 
25-Nov-2013 node020 node025 
18-Nov-2013 node020 node025 
11-Nov-2013 node020 
4-Nov-2013 node020 
28-Oct-2013 node016 node020 node025 
21-Oct-2013 node025 
14-Oct-2013 node017 node020 node025 
7-Oct-2013 node020 node025 
30-Sep-2013 node016 node020 node025 
23-Sep-2013 node020 node025 node057 
16-Sep-2013 node025 node057 
9-Sep-2013 node025 
2-Sep-2013 node016 node025 
26-Aug-2013 node016 node018 node025 node057 node065 
18-Aug-2014 node002 node006 node020 

Код я пытался выглядит так

require(ggplot2) 
require(reshape2) 
require(scales) 

df <- read.table("~/tmp/ipmi_data.txt",fill=T) 
flatdata <- melt(df,id.vars="V1") 
flatdata <- flatdata[!flatdata$value=="",] 
flatdata <- flatdata[order(flatdata$value),] 
flatdata$value <- factor(flatdata$value,levels=sort(levels(flatdata$value))) 
ggplot(flatdata[flatdata$value != "",]) + 
    geom_point(aes(x=value,y=as.Date(V1,format="%d-%b-%Y")),size=3,alpha=0.9) + 
    scale_x_discrete(name="Node") + 
    ylab("Date") + 
    geom_rect(aes(ymin=as.Date("8-Apr-2014", format="%d-%b-%Y"), 
       ymax=as.Date("30-Apr-2014", format="%d-%b-%Y"), 
       xmin="node002",xmax="node098"), 
       fill="red", alpha=0.25) + 
    coord_flip() 

Результирующие график имеет прямоугольник по всем уровням факторов:

Resulting Graph

Однако, я хотел бы иметь отдельный прямоугольник для определенных уровней, например, только для «node004» и «node057» за определенный интервал дат.

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

+3

Просьба [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a -great-r-воспроизводимый пример) с входными данными образца. Кроме того, если это возможно, включите эскиз нужного выхода. Мне немного непонятно, по крайней мере, именно то, что тебе нужно. Вы привязываетесь к дате как непрерывное или дискретное значение? – MrFlick

+0

Объекты, классифицированные по дате, в принципе целые, поэтому вы можете попытаться принудить вас к переменным фактора к «числовому». Нет гарантий того, что результат будет значимым, но в этом случае порядок заказов по умолчанию предполагает, что он может. –

ответ

0

Получил некоторую помощь после того, как задал тот же вопрос в списке рассылки comp.lang.r. (http://permalink.gmane.org/gmane.comp.lang.r.general/313656). Я в конечном итоге добавив следующее:

nodelist <- sort(levels(flatdata$value)) 

, а затем с помощью

geom_rect(aes(ymin=as.Date("8-Apr-2014", format="%d-%b-%Y"), 
      ymax=as.Date("30-Apr-2014", format="%d-%b-%Y"), 
      xmin=which(nodelist=="node004")-0.5, 
      xmax=which(nodelist=="node004")+0.5, 
      fill="red", alpha=0.25)) 
Смежные вопросы