data-visualization - 当你有很多变量时,如何从 Rstudio 中提取可见的散点图矩阵?

标签 data-visualization matrix chemistry information-extraction

我正在进行化学分析,并尝试根据我的化学数据制作散点图矩阵。我能够创建一个我想要的矩阵,但每个散点图都不够明显,无法在我的屏幕上阅读。我打算在一张巨大的科学海报上打印这个矩阵,但是,我不知道如何导出这个带有可见图的矩阵。有什么方法可以让这些图可见吗? 我将这段代码用于矩阵:

scatterFull <- pairs(springwater[,1:53], panel=panel.smooth)

这是我在 Rstudio 的绘图框中得到的矩阵。我知道显示器屏幕尺寸很重要,这就是为什么我无法清楚地看到每个图,但有没有办法在不改变显示器尺寸的情况下解决这个问题?

我希望看到这个矩阵和下面的矩阵一样可见(这个矩阵只包含 10 个元素,但我的矩阵中需要全部 53 个元素)。 enter image description here

请帮我解决这个问题。谢谢!

最佳答案

几十年来我不得不处理这个问题。到目前为止,R 中最好的方法(就易用性和质量而言)是以 PDF 格式输出图形。当您指定较大的纸张尺寸时,图形可读。它将比导出 RStudio 中显示的图形质量更高。即便如此,您可能不得不试验并可能修改图形元素,例如文本大小和符号大小。

下面的示例显示了绘图在海报大小的工作表(44 x 32 英寸)上的默认外观。该图显示了输出的一部分(在 Acrobat Reader 中以 200% 的放大率呈现:单击它可以在屏幕上以其原始大小查看它)。

Figure

#
# Generate sample data.
#
n <- 1e2                 # Number of points
d <- 53                  # Number of variables
mu <- runif(d)           # Variable log means
sigma <- rbeta(d, 2, 2)  # Variable log sds
X <- matrix(exp(rnorm(n*d, mu, sigma)), n, byrow=FALSE)
X <- ifelse(X < 1, 0, X) # Censor all values at a detection limit of 1
colnames(X) <- paste0("X", seq_len(ncol(X)))
#
# The proposed solution.
#
pdf("Pairs.pdf", width=44, height=32)
pairs(X)
dev.off()

运行此代码后,在 pdf 阅读器中打开输出文件 Pairs.pdf 进行查看。

如果这仍然不起作用,您将需要通过遍历不相交的变量子集并为这些子集的每个有序对输出一个散点图矩阵来平铺输出。但有 53 个变量,它应该足够好。


如果您希望识别并显示这些面板的一个子集,可以使用以下一些基本代码进行模拟。它对相关系数使用 0.3 的硬编码阈值;实际上,您可能会根据数据和您的目标进行调整。

#
# Display highly correlated pairs of variables.
#
R <- abs(cor(X))          # The correlation matrix
i <- which(R > 0.3) - 1   # Indexes of large absolute correlations
p <- rbind(i %% ncol(X), i %/% ncol(X)) + 1 # Indexes into the variable names
p <- p[, p[1,] != p[2,]]  # Remove the diagonals

m <- ncol(p)
if (m > 0) {
  nrow <- min(4, ceiling(sqrt(m/1.6)))
  ncol <- min(5, ceiling(sqrt(m*1.6)))
  par(mfrow = c(nrow, ncol))
  apply(p, 2, function(j) {
    plot(X[, j[1]], X[, j[2]], xlab=colnames(X)[j[1]], ylab=colnames(X)[j[2]])
  })
  par(mfrow=c(1,1))
}

关于data-visualization - 当你有很多变量时,如何从 Rstudio 中提取可见的散点图矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68322873/

相关文章:

python - Matplotlib 将数组转换为 1 条图表线

javascript - 用于用户历史跟踪的热图

c - 如何使用 MPI_Scatterv 将矩阵的行发送到所有进程?

c# - 如何旋转 4x4 矩阵 (C#/XNA)

python - 在 Cantera react 器中使用生物质热解动力学

regex - 查找小写化学式的所有可能排列

r - R 中的 3d 矢量绘图和可视化

r - 如何将两个 'vcd' 网格图形放在一个图中?

MATLAB:拆分数组

java - 哪种 OOP 方法适合周期表属性?