R绘制table对象时忽略xaxp参数的原因及相关问题咨询
问题解答
代码与问题重现
x = c(1, 2, 2, 3, 3, 3, 4, 4, 5) x.tab = table(x) plot(x.tab, xlim = c(0, 10), xaxp=c(0, 10, 10))
生成的图表仅显示1到5的刻度,而非预期的0到10。
为什么R会忽略xaxp参数?
对table对象调用plot()时,实际执行的是plot.table()函数,这个函数默认把x轴处理为离散类别轴,只对应table里实际存在的水平值(也就是1-5),不是连续数值轴。
xaxp参数是专门给连续数值轴用的,用来指定刻度范围和分割数,对离散类别轴完全不生效。哪怕设置了xlim=c(0,10),离散轴也只会显示table中有数据的类别刻度,不会自动补全不存在的0、6-10这些水平。
你提到的把x转成包含0:10水平的因子,本质是让table生成时就包含这些空水平(频率为0),这样plot时离散轴就会展示所有指定的类别,从而显示0-10的刻度。
如何从x.tab中提取频率向量?
不需要复杂操作,直接用以下两种简单方法之一即可:
as.vector(x.tab):将table对象转换为数值向量,顺序对应table的水平值c(x.tab):通过强制类型转换快速提取频率
示例:
freq_vec = as.vector(x.tab) # 输出结果:[1] 1 2 3 2 1
内容的提问来源于stack exchange,提问作者Iskander
相关产品推荐
相关产品推荐

