2012-10-18 25 views
1

我在编写一个R脚本,它包含一个数据帧。 数据帧具有以下外观:根据R中的结果截断数据帧列字符并更新图例

mydf <= read.csv('file', header = TRUE, sep=",") 

mydf 
....Prod Date     AVG 
189 CA123 2012/07/24 14:32:35 0.2424  0.22  0.25  0.27 
190 JK489 2012/08/25 18:29:08 0.2402  0.22  0.25  0.27 
191 CA15K 2012/07/24 13:49:07 0.2427  0.22  0.25  0.27 
192 JA45A 2012/07/22 02:32:40 0.2455  0.22  0.25  0.27 
193 JA3HS 2012/07/24 22:26:25 0.2410  0.22  0.25  0.27 
194 CA429 2012/08/28 10:36:16 0.2351  0.22  0.25  0.27 
195 JK345 2012/07/25 07:11:24 0.2419  0.22  0.25  0.27 
... 

我使用此代码来绘制数据:

plot(Date,mydf$AVG,xlab='Date',ylab='AVG',main='title') 
legend("topright", legend = c(" "," "), text.width = strwidth("1,000,000"), lty = 1:2, xjust = 1, yjust = 1, title = "Prods") 

该地块工作正常,但我无法获得联想格式化了。我想要做的是在右上角放置一个图例,将每个Prod显示为图上的不同颜色数据点;然而,Prod也需要被固定,并且只能算作列中的前两个字符。

我知道我可以通过运行`mydf $ Prod'来访问所有变量,但是有没有办法将该帧引用中的每个项目截断为两个字符。我尝试使用循环,但我无法执行任何数学操作,这是有道理的。

有没有办法截断这些变量,然后将它们粘贴到保留截断格式的图例中。这个图例需要是动态的,因为Prod的不断变化,我在不同的文件上运行脚本。

一个附加项目:理想情况下,我希望这可以用标准图书馆来完成。我目前没有使用ggplot或任何其他图形库,因为我创建的图很简单。

+2

用于截断字符串,看看'substr'功能。 –

+0

好棒。子串函数工作得很好。有没有办法将其解析为图例,对每个条目进行颜色编码以匹配每个数据点? – Jonny

回答

3

试试这个:

mydf$Labels = substr(mydf$Prod, 1, 2) 
f = factor(mydf$Labels) 
l = levels(f) 
plot(mydf$Date, mydf$Avg, xlab="Date", ylab="Avg", col=f) 
legend("topright", legend = l, fill = 1:length(l), title = "Prods") 
+0

此图例没有正确显示产品子字符串。实际上,它并没有显示任何图例 – Jonny

+0

我不确定您使用的其他参数如text.width。你可以检查substr(myDF $ prod,1,2)是你在找什么?你也可以只检查图例(“topright”,legend = substr(myDF $ prod,1,2))? – Ali

+0

我试过'legend(“topright”,legend = substr(mydf#prod,1,2),这次它只是显示所有的trucations,包括重复,所以这个图例大概有300个条目,而不仅仅是三。 – Jonny

相关问题