我有一个2列的矩阵。我想在每个列中绘制每个列,但每个列都有不同数量的条目。
例如,第一列有10个条目,第二列有7个条目。第二列的剩余3个给定为零。
出于比较原因,我想并排绘制这些。
有没有办法告诉R将整个第1列和第2列的第7个条目分别绘制?
答案 0 :(得分:11)
您可以简单地索引所需的值,例如
## dummy version of your data
mat <- matrix(c(1:17, rep(0, 3)), ncol = 2)
## create object suitable for plotting with boxplot
## I.e. convert to melted or long format
df <- data.frame(values = mat[1:17],
vars = rep(c("Col1","Col2"), times = c(10,7)))
## draw the boxplot
boxplot(values ~ vars, data = df)
在上面我告诉你你有一个矩阵。如果你确实有一个数据框,那么你需要
df <- data.frame(values = c(mat[,1], mat[1:7, 2]),
vars = rep(c("Col1","Col2"), times = c(10,7)))
并且我假设两列中的数据具有可比性,因为值在两列中的事实表明一个分类变量允许我们分割值(如男性和女性的高度,性别作为分类值)。
生成的箱图如下所示
答案 1 :(得分:3)
对于任意数量的列和任意数量的空条目,您可以这样做。
## Load data from CSV; first row contains column headers
dat <- read.csv( 'your-filename.csv', header = T )
## Set plot region (when set 'ylim' skip first row with headers)
plot(
1, 1,
xlim=c(1,ncol(dat)), ylim=range(dat[-1,], na.rm=T),
xaxt='n', xlab='', ylab=''
)
axis(1, labels=colnames(dat), at=1:ncol(dat))
for(i in 1:ncol(dat)) {
## Get i-th column
p <- dat[,i]
## Remove 0 values from column
p <- p[! p %in% 0]
## Instead of 0 you can use any values
## For example, you can remove 1, 2, 3
## p <- p[! p %in% c(1,2,3)]
## Draw boxplot
boxplot(p, add=T, at=i)
}
此代码加载表格形式的CSV文件,从列中删除0个值(或者您可以删除任何其他值),并为一个图形中的每个列绘制所有箱形图。
认为这有帮助。