通过geom_rect使用因子水平 [英] Using factor levels with geom_rect

查看:168
本文介绍了通过geom_rect使用因子水平的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有像node002,node004,node006,node016,node017,node018这样的因子级别,这些级别是针对日期绘制的。我正在尝试使用 geom_rect 来为某段时间设定一个给定的因子水平。对于日期,我可以做一些类似于 ymin = as.Date(2014年4月8日,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
2014年8月25日node002 node020 node061
11- Aug-2014 node006 node020
2014年8月4日node020
2014年7月28日node020
2014年7月21日node020
2014年7月14日node016 node020 node061
7-Jul-2014 node016 node020 node061 $ b $ 30 30-Jun-2014 node016 node020 node061
23-Jun-2014 node016 node020 node061 $ b $ 7 7-Apr-2014 node004 node018 node025 node034 node041 node057
10-Mar-2014 node004 node016 node018 node020 node025 node034 node041 $ b $ 3 3-Mar-2014 node004 node016 node018 node020 node025 node034 node041
19-Aug-2013 node016 node018 node025 node057 node065
12- Aug-2013 node025 node057 n ode080
5-Aug-2013 node020 node025 node080
2013年7月29日node020 node025 node080
2013年7月22日node025 node080 $ b $ 15 15-Jul-2013 node025 node080
8-Jul-2013 node025
2013年7月1日node025
24-Jun-2013 node025
2013年6月17日node025
27-May-2013 node057
2013年5月13日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
2013年4月1日node018 node020 node025 node080
25-Mar-2013 node017 node080
18-Mar-2013 node047
2013年3月11日node025
2013年2月25日node034
2013年2月18日node034
2013年2月11日node025 node034 node061
2013年2月4日node025 node034 node061
2013年1月28日node025 node034 node061
2013年1月21日node025 node034 node050 node061
2013年1月14日node025 node034 node061
2013年1月7日node025 node061 *强调文本*
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
2014年4月14日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 $ b $ 3 2014年2月3日node004 node018 node025
2014年1月27日node004 node018 node020 node025
20-Jan-2014 node004 node018 node020 node025
2014年1月13日node004 node018 node020 node025 node041 $ b $ 6 6-Jan-2014 node016 node020 node025 node041 node047 node082
30-Dec-2013 node016 node020 node025 node041
2 2013年12月3日node016 node020 node025 node041 node057
16-Dec-2013 node020 node025 node041 node087
2013年12月9日node016 node018 node020 node025 node065
2-Dec-2013 node018 node020 node025
2013年11月25日node020 node025
18-Nov-2013 node020 node025
2013年11月11日node020
2013年11月4日node020
2013年10月28日node016 node020 node025
2013年10月21日node025
14-Oct-2013 node017 node020 node025
2013年10月7日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

代码I尝试看起来像这样

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

df< - read.table(〜/ tmp / ipmi_data.txt,fill = T)
flandata< - melt(df,id.vars =V1)
flandata< - flatdata [!flatdata $ value ==,]
flatdata< - flatdata [order(flatdata $ value),]
flatdata $ value< - factor(flatdata $ value,levels = sort (level(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(2014年4月8日,format =%d-%b-%Y),
ymax = as.Date(2014年4月30日,格式=%d-%b-%Y),
xmin =node002,xmax =node098),
fill =red,alpha = 0.25)+
coord_flip()

结果图在所有因子水平上都有一个矩形:





<但是,我想为特定的级别设置单独的矩形,例如给定的日期间隔中的node004和node057。



是是否可以使用一个级别的索引作为坐标来定义矩形的垂直范围,如果是这样的话,怎么样?

解决方案

在comp.lang.r.general邮件列表
http://permalink.gmane.org/gmane.comp.lang.r.general/313656 )。我最终添加了以下内容:

$ p $ nodelist< - sort(levels(flatdata $ value))
code>

然后使用

  geom_rect(aes(ymin = as.Date(2014年4月8日,format =%d-%b-%Y),
ymax = as.Date(2014年4月30日, (节点列表==node004) - 0.5,
xmax = which(nodelist ==node004)+0.5,格式=%d-%b-%Y),
xmin =
fill =red,alpha = 0.25))


I have factor levels like "node002" "node004" "node006" "node016" "node017" "node018" which are being plotted against dates. I am trying to underlay a given factor level for a period using geom_rect. For the dates, I can do something like ymin=as.Date("8-Apr-2014", format="%d-%b-%Y").

Is it possible to I stipulate, say ymin in terms of the factor levels? If so, how would it be done?

Here is some more information to try to clarify the issue:

The data look like this:

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

The code I have tried looks like this

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()

The resulting graph has a rectangle across all the factor levels:

However, I would like to have individual rectangle for specific levels, such a only for "node004" and "node057" in a given date interval.

So the question is whether is is possible to use the index of a level as a coordinate to define the vertical extent of the rectangle and, if so, how?

解决方案

I got some help after asking the same question on the comp.lang.r.general mailing list (http://permalink.gmane.org/gmane.comp.lang.r.general/313656). I ended up adding the following:

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

and then using

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))

这篇关于通过geom_rect使用因子水平的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆