使用geom_rect的因子级别

时间:2014-09-16 15:21:12

标签: r ggplot2

我有因子级别,如“node002”“node004”“node006”“node016”“node017”“node018”,它们是根据日期绘制的。我试图使用geom_rect在一段时间内为给定的因子级别提供支持。对于日期,我可以执行ymin=as.Date("8-Apr-2014", format="%d-%b-%Y")

之类的操作

我可以规定,在因子水平方面说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”。

所以问题是,是否可以使用水平索引作为坐标来定义矩形的垂直范围,如果是,如何?

1 个答案:

答案 0 :(得分:0)

在comp.lang.r.general邮件列表中询问相同问题后,我得到了一些帮助 (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))