R绘图功能-折线图的轴

R绘图功能-折线图的轴,r,plot,line,R,Plot,Line,假设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”的数据框中,性别变量称为“性别”,另一个变量称为“电视系列” 我的问题是

假设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”的数据框中,性别变量称为“性别”,另一个变量称为“电视系列”

我的问题是,我没有找到一种(在我看来)正确的方法来创建折线图,其中x轴表示5点刻度(加上不知道的答案),y轴表示刻度上每个点的频率。此外,我想创建两条线(一条为男性,一条为女性)

到目前为止,我的解决方案如下:

  • 我在不打印“内容”和x轴的情况下创建绘图:

    plot(slm$tv_serien, xlim = c(1,6), ylim = c(0,100), type = "n", xaxt = "n")
    
  • 这里的问题是,指定
    xlim=c(1,6)
    感觉像是作弊,因为
    slm$tv\u serien
    的原始分数是100。我还试图通过
    plot(factor(slm$tv\u 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\u serien的6个不同值作为x轴
    • 即使直线包含“0”,如何绘制连续直线
    谢谢你的帮助

    附:您可以找到上述函数的当前绘图

    PPS:我试着把列表从“1”列到“4”。但似乎每个新的列表元素都是从“1”开始的。对不起


    编辑:对OP评论的回应

    这将直接创建OP数据的折线图。下面是使用
    ggplot
    得出的原始答案,它产生了非常出色的输出

    根据您提供的频率表

    df <- data.frame(t(freqTable))        # transpose (more suitable for plotting)
    df <- cbind(Response=rownames(df),df) # add row names as first column
    
    plot(as.numeric(df$Response),df$f,type="b",col="red", 
         xaxt="n", ylab="Count",xlab="Response")
    lines(as.numeric(df$Response),df$m,type="b",col="blue")
    axis(1,at=c(1,2,3,4,5,6),labels=c("Str.Agr.","Sl.Agr","Neither","Sl.Disagr","Str.Disagr","NA"))
    
    产生以下结果:

    或者,这个,哪个更好:

    ggp + facet_grid(Gender~.)
    

    这并不能回答您的问题,但折线图是否是此类数据的最佳可视化形式?既然你说的是计数,我会认为条形图更合适。我提到的一些选项可能也会引起你的兴趣……绝对正确。我只是拿这个作为例子。条形图更有意义,我设法创建了一个不错的条形图,但我在折线图中提到的问题仍然存在,对于其他(更合适的)情况也是如此。对于您的第一个问题,解决方案是使用因子。将你的值(即1:5和8)转换成因子,如果你愿意,你甚至可以适当地命名它们。@Frank:我试过了,但如果我使用的是
    plot(factor(factor)(slm$tv\u serien)…
    我不能阻止通过
    type=“n”
    绘制该图,因为这不是plot.factor的专用项。所以我总是会得到一个条形图,我不想要。好吧,我感谢你的建议。当然,使用ggplot包可以构建比使用普通plot函数更漂亮的图形。但老实说,这并不能解决我的问题我只是想知道用给定的数据集构建折线图的最佳方法是什么。另外@Frank提到条形图更适合给定的数据,我知道这一点。但再次,请考虑数据作为一个例子。
    ggp + facet_grid(Gender~.)