同一小组中的直方图和箱形图

时间:2013-08-25 00:39:13

标签: r plot histogram boxplot

我有一个包含8列(8个变量)和1000个观察值的数据帧。我想在同一个面板中为每个变量绘制直方图和箱形图。

例如

h1 h2 h3 h4

b1 b2 b3 b4

h5 h6 h7 h8

b5 b6 b7 b8

其中hn =变量n的直方图。 和bn =变量n的箱形图。

我试过了 箱线图(数据帧)

HIST(数据帧)

但是箱图位于同一个图表中,直方图出现以下错误:

hist.default(dataframe)中的错误='x'必须是数字

提前致谢!

概率pd。是否可以在此面板中添加调色板?

2 个答案:

答案 0 :(得分:0)

我建议您只需编写一个小循环,一次挑出一列并绘制它。你需要对此进行微调,但它应该足以让你开始:

par(mfrow = c(8,2))
for(i = 1:8){
  hist(dataframe[,i])
  boxplot(dataframe[,i])
}

答案 1 :(得分:0)

您从hist(dataframe)获得的错误是因为hist需要提供“值向量”。请参阅x?hist的说明。另一方面,boxplot接受“数字向量或包含此类向量的单个列表”。由于数据框是一个列表,hist将接受df

因为您希望将所有地块都放在“同一面板”上,所以您需要将它们安排在您的绘图设备上,例如使用par(mfrow =(见?par)。

以前的一些帖子显示了如何将单个直方图与箱线图(thisthis)结合起来。这是使用包histBxp中的sfsmisc的另一种可能性。

library(sfsmisc)

# Some dummy data
df <- data.frame(matrix(rnorm(200), ncol = 8))

# arrange plots in two rows and four columns
par(mfrow = c(2,4)) 

# create a palette to pick colours from (see `palette`), e.g:
mycols <- rainbow(n = 8)

# 'loop' over columns in df using lapply, and make a "histBxp" for each column.
lapply(1:8, function(i) histBxp(df[ , i], main = "", xlab = i,
                            col = mycols[i],
                            boxcol = mycols[i],
                            medcol = 1))