2014-09-21 86 views
-1

我是从一个文件中获取数据的子集,然后尝试在ggplot2中绘制一条线。只有设法得到点(虽然我使用geom_point()+ geom_line())为什么我不能在子集之后划线?

d1<-structure(list(year = structure(1:10, .Label = c("2001", "2002", 
"2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", 
"2011", "2012"), class = "factor"), val1 = c(42244L, 43161L, 
42444L, 43579L, 43424L, 45116L, 48003L, 48835L, 47856L, 50024L 
), val2 = c(0L, 0L, 0L, 0L, 18L, 0L, 0L, 7L, 0L, 0L), val3 = c(109467L, 
112956L, 110623L, 125657L, 127560L, 137180L, 156412L, 164861L, 
174395L, 180413L), val4 = c(20381L, 18346L, 16636L, 18119L, 17173L, 
19234L, 22113L, 22624L, 23374L, 23280L), val5 = c(7056L, 6679L, 
6287L, 6261L, 7197L, 7581L, 10321L, 10535L, 10242L, 12080L), 
    val6 = c(12823L, 12056L, 11101L, 11428L, 12665L, 11783L, 
    9861L, 8250L, 7802L, 6775L), val7 = c(220L, 101L, 55L, 68L, 
    212L, 85L, 95L, 125L, 49L, 81L), val8 = c(694L, 2527L, 1066L, 
    1700L, 2976L, 1665L, 1229L, 1086L, 879L, 958L), val9 = c(12439L, 
    12698L, 15351L, 12771L, 13192L, 12420L, 13753L, 14943L, 14368L, 
    10404L), val10 = c(17819L, 18221L, 15643L, 19250L, 19326L, 
    20967L, 23658L, 27208L, 30526L, 34250L), val11 = c(20446L, 
    21236L, 19994L, 22489L, 23212L, 23792L, 25363L, 25036L, 25845L, 
    27074L), val12 = c(243589L, 247981L, 239200L, 261322L, 266955L, 
    279823L, 310808L, 323510L, 335336L, 345339L)), .Names = c("year", 
"val1", "val2", "val3", "val4", "val5", "val6", "val7", "val8", 
"val9", "val10", "val11", "val12"), 
row.names = c(NA, 10L), class = "data.frame") 

,然后我跑

d2<-subset(d1[,c(1,2)]) #(here d1 is the main (csv)file) 
ggplot(d2,aes(x=year,y=val1))+geom_line()+geom_point() 
# geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

为qplot同样的事情,使用GEOM = “行” 时,是表示该通知,但不使用的geom =“线”,它显示了点没有任何音符/错误现在

qplot(y=val1,x=year,data=d2,geom="line") 
# geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

当我手动创建一个数据帧作为

d2<-data.frame(year=c(2001,2002,2003,2004,2005,2006, 
2007,2008,2009,2010,2011,2012), 
value=c(20446,21236,19994,22489,23212,23792,25363, 
25036,25845,27074,28878,31117)) 

我可以画线。无法弄清楚什么是错的。 谢谢

+1

你需要做一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。你如何对数据框进行子集划分?你的绘图命令究竟是什么样的?理想的你应该发布一个最小的例子,我们可以复制/粘贴到R,并得到相同的错误 – MrFlick 2014-09-21 03:13:03

+0

Downvoted发布错误消息与不完整的代码(因此不清楚)。 – 2014-09-21 03:14:24

+0

完成。请确定歧义是否仍然存在。 – 2014-09-21 03:38:17

回答

1

无论出于何种原因,你有你的年份在csv中的因素,他们是你的“手动创建”的数字。因素用于趋向于具有不同绘图规则的分类变量而不是连续变量。

你可以做

ggplot(d2,aes(x=as.numeric(as.character(year)),y=val1))+geom_line()+geom_point() 

的一年转换回数字,但它可能会更好弄清楚为什么它导入到R作为首先的一个因素。机会是你有坏数据。

+0

谢谢先生,找出这个问题背后的原因。数据中可能存在问题。为了更深入的了解,我可以问为什么会这样。我第一次遇到这个问题。为什么当我对数据进行子集化并写入新文件并再次读取时,数据表现异常/不正确? – 2014-09-21 05:21:36

+1

这是因为平面文本文件不是存储数据的好方法。它们不允许你保存关于数据类型的元数据。每次你阅读它们时都必须猜测每列的变量类别。很有可能当你的数据集合被删除时,你将删除非数字值,所以当你在下一次读到R时会认为年份是一个数字 – MrFlick 2014-09-21 14:13:53

+0

现在先用as.numeric,x轴的年数值,倾向于像2000年,2002年5月,2005年等等。没有得到x轴的年份的原始值,即2001,2002,2003等等。我应该怎么做来简化这个?我应该把它作为一个单独的问题吗? – 2014-09-21 14:55:32

相关问题