【问题标题】:Plotting multiple graphs based on data groups using par function使用 par 函数基于数据组绘制多个图
【发布时间】:2018-02-02 17:18:42
【问题描述】:

我需要在 R 中绘制 4 个图,x 轴上的位置和 y 轴上的弹珠数量。数据中有四组,根据SetBlock 是唯一的。

现在,我正在根据Block 对每个数据进行子设置并绘制它。之后我使用par() 函数将它们全部绘制在一起。

有没有一种简单的方法来绘制数据而无需手动对它们进行子集化?

  Set Size    Position  Marbles Block
   1   Small  1         8        1
   1   Small  2         81       1
   1   Small  3         3        1
   1   Small  4         4        1
   4   Small  1         8        1
   4   Small  2         81       1
   4   Small  3         3        1
   4   Small  4         4        1
   4   Small  1         14       2
   6   Small  2         11       2
   6   Small  3         12       2
   6   Small  4         25       2
   1   Small  1         8        3
   1   Small  2         81       3
   1   Small  3         3        3
   1   Small  4         4        3
   6   Small  1         14       4
   6   Small  2         11       4
   6   Small  3         12       4
   6   Small  4         25       4

【问题讨论】:

  • 如果有人要否决它,你至少应该有善意的理由来解释它
  • 我没有投反对票,但您应该包含您当前的代码以避免这种情况。

标签: r plot subset par


【解决方案1】:

你可以使用ggplot2::facet_wrap():

library(ggplot2)
ggplot(data = dat, aes(x = Position, y = Marbles)) + 
       geom_point() + facet_wrap(~Block)

数据:

 dat <- structure(list(Set = c(1L, 1L, 1L, 1L, 6L, 6L, 6L, 6L, 1L, 1L,                 
     1L, 1L, 6L, 6L, 6L, 6L), Size = structure(c(1L, 1L, 1L, 1L, 1L,                   
     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "Small", class = "factor"), 
         Position = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,                      
         4L, 1L, 2L, 3L, 4L), Marbles = c(8L, 81L, 3L, 4L, 14L, 11L,                   
         12L, 25L, 8L, 81L, 3L, 4L, 14L, 11L, 12L, 25L), Block = c(1L,                 
         1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L                    
         )), .Names = c("Set", "Size", "Position", "Marbles", "Block"                  
     ), row.names = c(NA, 16L), class = "data.frame")  

【讨论】:

  • 这很有用。但是如果我的块中有多个集合,我需要再次对其进行子集化。无论如何要解决这个问题?
  • @Ash facet_wrap(~Block+Set) 就此而言。
【解决方案2】:

实际使用par和基plot

op <- par(mfrow=c(2, 2))
by(d, d$Block, function(b) plot(Marbles ~ Position, b, ylim=c(0, max(d$Marbles)), 
                                main=unique(b$Block)))
par(op)


数据

d <- structure(list(Set = c(1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L, 6L, 
6L, 6L, 1L, 1L, 1L, 1L, 6L, 6L, 6L, 6L), Size = c("Small", "Small", 
"Small", "Small", "Small", "Small", "Small", "Small", "Small", 
"Small", "Small", "Small", "Small", "Small", "Small", "Small", 
"Small", "Small", "Small", "Small"), Position = c(1L, 2L, 3L, 
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 
4L), Marbles = c(8L, 81L, 3L, 4L, 8L, 81L, 3L, 4L, 14L, 11L, 
12L, 25L, 8L, 81L, 3L, 4L, 14L, 11L, 12L, 25L), Block = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 
4L, 4L, 4L)), class = "data.frame", row.names = c(NA, -20L))

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 2021-04-16
    • 1970-01-01
    • 2015-12-15
    • 2020-11-19
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多