【发布时间】:2013-12-12 18:28:03
【问题描述】:
假设 R 中的以下频率表来自一项调查:
1 2 3 4 5 8
m 5 16 3 16 5 0
f 12 25 3 10 3 1
NA 1 0 0 0 0 0
这些行代表调查对象的性别(男性/女性/未回答)。列代表 5 分制问题的答案(假设:1 = 完全同意,2 = 有点同意,3 = 既不同意也不不同意,4 = 有点不同意,5 = 完全不同意,8 = 没有答案)。
数据存储在一个名为“slm”的数据框中,性别变量称为“sex”,另一个变量称为“tv_serien”。
我的问题是,我找不到(在我看来)创建折线图的正确方法,其中 x 轴代表 5 分制(加上不知道的答案)和 y -axis 表示刻度上每个点的频率。此外,我想创建两条线(一条用于男性,一条用于女性)。
到目前为止,我的解决方案如下:
-
我在不绘制“内容”和 x 轴的情况下创建了一个绘图:
plot(slm$tv_serien, xlim = c(1,6), ylim = c(0,100), type = "n", xaxt = "n")
这里的问题是,指定xlim=c(1,6) 感觉像是作弊,因为slm$tv_serien 的原始分数是100 个值。我还尝试通过plot(factor(slm$tv_serien)...) 绘制变量,但它仍然会创建一个从 1 到 8 的度量标准(因为不知道答案是 8)。
所以我的第一个问题是如何告诉 R 它应该采用六个不同的值(1 到 5 和 8)并将其作为 x 轴?
-
我用适当的标签创建了新的 x 轴:
axis(1, 1:6, labels = c("1", "2", "3", "4", "5", "DK"))
至少效果很好。 ;-)
-
接下来我为男性创建线:
lines(1:5, table(slm$tv_serien[slm$sex == 1]), col = "blue")
这里的问题是没有 DK (=8) 答案,所以我必须手动指定 x = 1:5 而不是“正常”情况下的 1:6。我的问题是,如何告诉 R 也为不存在的值画线?例如,如果没有男性回答 3,但我想要一条连续的线,会发生什么?
-
最后我为女性创建了这条线,效果很好:
lines(1:6, table(slm$tv_serien[slm$sex == 2], col = "red")
总结一下:
- 如何告诉 R 将
slm$tv_serien的 6 个不同值作为 x 轴? - 即使线条包含“0”,我如何绘制连续线条?
感谢您的帮助!
PS:附上您找到上述功能的当前图。
PPS:我试图从“1”列出一个列表。到“4”。但似乎每个新的列表元素都以“1”重新开始。对不起。
【问题讨论】:
-
这并不能回答您的问题,但折线图甚至是此类数据的最佳可视化形式吗?既然你在谈论计数,我会认为条形图会更合适。
-
我提到的一些选项here 你可能也感兴趣....
-
绝对正确。我只是以此为例。条形图会更有意义,我设法创建了一个不错的图表,但我为折线图提到的问题仍然存在,并且对于其他(更合适的)情况也是如此。
-
对于您的第一个问题,解决方案是使用因子。将您的值(即 1:5 和 8)转换为因子,如果需要,您甚至可以适当地命名它们。
-
@Frank:我试过了,但如果我使用
plot(factor(slm$tv_serien)...),我无法阻止通过type ="n"绘制绘图,因为这不是为plot.factor 指定的。所以我总是会得到一个我不想要的条形图。