2016-08-04 21 views
1

我不能完全确定什么名字,我在R中的绘图功能有问题...打印问题 - 误操作因素变量数值

在我的原始数据集我有一个名为年龄与这些可变水平:15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,2X,30,40,50,60。当我绘制年龄使用:

plot(age, xlab="Age", ylab="Number of observations") 

然后,我会得到这个图(柱状图随着年龄的增长在x轴和y轴的意见数量):

Plot with 2X in the data

然后我从数据中删除了2X(用于20岁以上的人),并使用上面相同的代码来获得新的情节。当我重新运行该代码的情节现在看起来是这样(在y轴随着年龄的阴谋):

Plot without 2X in the data

如果任何人有关于为什么的情节现在对y年龄任何想法轴,请让我知道!预先感谢您的帮助!

+1

你是如何“移除2X”的? “年龄”是什么阶层?在你移除2X之前和之后它有没有改变课程? 'str(年龄)'前后的样子是什么?如果您可以可重复地分享少量数据 - 仅仅足以说明问题,那么解决这个问题还有很长的路要走。 [请参阅此处](http://stackoverflow.com/q/5963269/903061)了解可重复共享数据的提示。 – Gregor

+0

我从原来的Excel文件中删除“2X”点,然后保存一个新的.txt文件。在“2x”点被移除之前,“str(年龄)”输出是:因子w/22水平“15”,“16”,“17”,...:1 2 2 2 2 2 2 2 2 ...'。在“2x”点被移除后,“str(age)”输出为:int [1:45816] 15 15 15 15 15 15 15 15 15 15 ...'。我也会尝试根据这些指南获得一些数据! –

回答

1

诊断

您正在进入S3方法调度问题。 plot是一个泛型函数:以上

methods(plot) 
# [1] plot.acf*   plot.data.frame* plot.decomposed.ts* 
# [4] plot.default  plot.dendrogram* plot.density*  
# [7] plot.ecdf   plot.factor*  plot.formula*  
#[10] plot.function  plot.hclust*  plot.histogram*  
#[13] plot.HoltWinters* plot.isoreg*  plot.lm*   
#[16] plot.medpolish*  plot.mlm*   plot.ppr*   
#[19] plot.prcomp*  plot.princomp*  plot.profile.nls* 
#[22] plot.raster*  plot.spec*   plot.stepfun  
#[25] plot.stl*   plot.table*   plot.ts    
#[28] plot.tskernel*  plot.TukeyHSD*  

评论问你之前和消除2X后提供str(age),因为这些信息可以帮助判断哪些方法时plot被称为已经发出了。

当你有2X数据时,age绝对是一个因素。因此,当您拨打plot时,将调用plot.factor并生成条形图。

虽然当您删除2X时,似乎age以某种方式成为数值变量。因此,当您拨打plot时,将调用plot.default并生成散点图,在这种情况下,plot(age)本质上是在做plot.default(1:length(age), age)


解决方案

一种说肯定会的工作方式是

plot(factor(age), xlab="Age", ylab="Number of observations") 

不过,我还是好奇你如何去除2X子集,这样age成为数字。通常,如果age是R中的因子变量,则删除子集不会更改变量类。

大概age存储在.txt.csv文件,您通过scan()read.table()read.csv()阅读。当你删除2X时,你在这些文件中删除了它们,并再次将数据读入到R中。通过这种方式,R将在数据读入时将age识别为不同类。

+0

目前还不清楚你如何得到'plot.default'来产生*特定的散点图......? –

+0

哦 - 我没有看到他们会手动设置'ylab' ... –

+0

我将数据存储在'.txt'文件中,并通过'read.table()'读取。 –