【问题标题】:How to plot data grouped by a factor, but not as a boxplot如何绘制按因子分组的数据,但不是箱线图
【发布时间】:2011-02-03 19:46:41
【问题描述】:

在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) 几乎可以满足我的要求,它会生成箱线图,但我想查看各个数据点。

【问题讨论】:

  • 你被情节束缚了吗?我知道使用 ggplot2 可以做到这一点。
  • 一点也不。 ggplot2 在哪个包中?
  • 正如乔纳森回答的那样, ggplot2 会让你这样做,加上让你抖动点,这样如果两个点具有相同的 y 值,它们就不会相互重叠。查看 Hadley 的网站had.co.nz/ggplot2
  • 感谢您的链接,这真的很有用。

标签: r plot


【解决方案1】:

10 年前的问题...但如果您想要一个简洁的基础 R 解决方案:

plot(trans.factor, casp6, border=NA, outline=FALSE)
points(trans.factor, casp6)

第一行设置了情节,但什么也没画。第二个加分。这比强制 x 为数字的解决方案要简洁一些。

【讨论】:

    【解决方案2】:

    不需要额外的包

    我参加聚会有点晚了,但我发现您可以使用标准绘图功能非常轻松地获得所需的结果——只需将因子转换为数值:

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

    【讨论】:

      【解决方案3】:

      我找到以下解决方案:

      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】:

        我认为有一个更好的解决方案(我几天前为一个研讨会写了它),但我没有想到。这是基本图形的丑陋替代品。随意注释 x 轴随意。就个人而言,我喜欢 Greg 的解决方案。

        plot(0, 0, xlim = c(1, 4), ylim = range(casp6), type = "n")
        points(casp6 ~ trans.factor)
        

        【讨论】:

          【解决方案5】:

          您可以通过以下方式使用点阵图形接近您想要的:

          library(lattice)    
          xyplot(casp6 ~ trans.factor, 
                 scales = list(x = list(at = 1:4, labels = levels(trans.factor))))
          

          【讨论】:

            【解决方案6】:

            您可以使用ggplot2facets 来实现。当我读到“我想创建一个图,其中数据点按因子定义分组”时,我首先想到的是facets

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

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

            之后你可以使用绘图选项(typefgbg...),但我建议坚持使用ggplot2,因为它有更简洁的代码和强大的功能,你可以避免过度绘制......等等等等。

            了解如何处理因素。你在评估plot(trans.factor, casp6) 时得到了条形图,因为trans.factorfactor 的类(具有讽刺意味的是,你甚至用这样的庄园来命名它)......并且trans.factor,因此,被声明为之前 plot() 函数中的连续(数字)变量...因此plot()“感觉”需要对数据进行子集化并根据每个部分绘制箱线图(如果您首先声明连续变量,您将得到一个普通的图表,正确的?)。另一方面,ggplot2 以不同的方式将 factor 解释为... “普通”,数字变量(这代表 Jonathan Chang 提供的语法,在ggplot2 中执行更复杂的操作时必须指定geom

            但是,我们假设您有一个连续变量和一个因子,并且您希望将直方图应用于由因子水平定义的连续变量的每一部分。这就是基础图功能使事情变得复杂的地方。

            # 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)
            

            ggplot2方式:

            qplot(x, facets = . ~ g)
            

            尝试在一行代码中使用graphics 执行此操作(分号和自定义函数被视为作弊!):

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

            希望我没有把你烦死,而是帮助了你!

            亲切的问候,
            aL3xa

            【讨论】:

              【解决方案7】:
              require(ggplot2)
              qplot(trans.factor, casp6)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2021-01-20
                • 1970-01-01
                • 2019-08-23
                • 2011-10-15
                • 2018-06-17
                • 2019-01-29
                • 2017-11-30
                相关资源
                最近更新 更多