代码之家  ›  专栏  ›  技术社区  ›  amarillion

如何绘制按因子分组的数据,但不作为箱线图

  •  12
  • amarillion  · 技术社区  · 15 年前

    在r中,给定一个向量

    casp6 <- c(0.9478638, 0.7477657, 0.9742675, 0.9008372, 0.4873001, 0.5097587, 0.6476510, 0.4552577, 0.5578296, 0.5728478, 0.1927945, 0.2624068, 0.2732615)
    

    还有一个因素:

    trans.factor <- factor (rep (c("t0", "t12", "t24", "t72"), c(4,3,3,3)))
    

    我想创建一个绘图,其中数据点按因子定义分组。所以类别应该在x轴上,相同类别中的值应该有相同的x坐标。

    简单做 plot(trans.factor, casp6) 做了我想做的,它产生了一个方块图,但是我想看到各个数据点。

    6 回复  |  直到 8 年前
        1
  •  13
  •   Jonathan Chang    15 年前
    require(ggplot2)
    qplot(trans.factor, casp6)
    
        2
  •  4
  •   aL3xa    15 年前

    你可以用它 ggplot2 使用 facets . 当我阅读 “我要创建一个绘图,其中数据点按系数定义分组” ,我首先想到的是 小面 .

    但在这种情况下,更快的选择应该是:

    plot(as.numeric(trans.factor), casp6)
    

    然后你就可以使用绘图选项了( type , fg , bg …),但我建议你坚持 GGPROTT2 ,因为它有更干净的代码,强大的功能,你可以避免过度抽签…等。

    学习如何处理各种因素。你在评估的时候有点恶心 plot(trans.factor, casp6) 原因 trans.factor 是阶级 factor (讽刺的是,你甚至在这样的庄园里给它起了名字)……和 转移因子 因此,被宣布 之前 内的连续(数字)变量 plot() 功能…因此 标号() “感觉”需要对数据进行子集,并根据每个部分绘制箱线图(如果首先声明连续变量,您将得到一个普通的图,对吧?). GGPROTT2 另一方面,用不同的方式解释因素…作为 “普通人” ,数值变量(表示 张洋洋 ,必须指定 geom 在做更复杂的事情时 GGPROTT2 )

    但是,让我们假设你有一个连续变量和一个因子,你想对连续变量的每个部分应用直方图,由因子水平定义。这就是基本图功能使事情变得复杂的地方。

    # create dummy data
    > set.seed(23)
    > x <- rnorm(200, 23, 2.3)
    > g <- factor(round(runif(200, 1, 4)))
    

    使用基图( package:graphics ):

    par(mfrow = c(1, 4))
    tapply(x, g, hist)
    

    GGPROT2方式:

    qplot(x, facets = . ~ g)
    

    试着这样做 graphics 在一行代码中(分号和自定义函数被认为是作弊!):

    qplot(x, log(x), facets = . ~ g)
    

    希望我没有让你厌烦至死,而是帮助了你!

    谨致问候,
    Al3xA

        3
  •  4
  •   Marek    13 年前

    我找到了以下解决方案:

    stripchart(casp6~trans.factor,data.frame(casp6,trans.factor),pch=1,vertical=T)
    

    简单直接。

    (指) http://www.mail-archive.com/r-help@r-project.org/msg34176.html )

        4
  •  3
  •   Greg    15 年前

    通过执行以下操作,您可以使用Lattice Graphics接近所需内容:

    library(lattice)    
    xyplot(casp6 ~ trans.factor, 
           scales = list(x = list(at = 1:4, labels = levels(trans.factor))))
    
        5
  •  3
  •   Roman LuÅ¡trik    14 年前

    我认为有一个更好的解决方案(几天前我为一个研讨会写的),但我忘了。这是一个丑陋的基本图形替代品。请随意注释X轴 随意地 . 就我个人而言,我喜欢格雷格的解决方案。

    plot(0, 0, xlim = c(1, 4), ylim = range(casp6), type = "n")
    points(casp6 ~ trans.factor)
    
        6
  •  2
  •   Christallkeks    8 年前

    无需额外包装

    我来晚了一点,但我发现使用标准绘图函数可以很容易地获得所需的结果--只需将系数转换为数值即可:

    plot(as.numeric(trans.factor), casp6)