R语言调用plot()绘制.gz文件时报错:figure margins too large
解决
plot(d)报错"figure margins too large"的方案 报错原因
你调用plot(d)时,R默认会生成数据框所有变量的两两散点图矩阵。你的数据有785个变量,这种规模的散点图矩阵需要的绘图空间远超当前图形设备的承载能力,直接触发边距过大的错误——而且这种图完全没有实际分析价值,变量太多根本无法看清有效信息。
从数据结构来看,这是典型的MNIST手写数字数据集:第一列label是数字标签(0-9),后面784列是28×28像素的灰度值。
正确的绘图方式
针对这类像素数据,应该做针对性绘图,而不是直接plot整个数据框:
1. 绘制单张手写数字图像
提取某一行的像素数据,转成28×28的矩阵后绘图:
# 提取第1行的像素(跳过第1列的label) img_matrix <- matrix(as.numeric(d[1, -1]), nrow = 28, ncol = 28, byrow = TRUE) # 反转行顺序(像素存储是从上到下,R绘图默认从下到上,反转后显示正确) img_matrix <- img_matrix[28:1, ] # 用灰度色绘制图像,隐藏坐标轴 image(img_matrix, col = gray(0:255/255), axes = FALSE)
2. 绘制多个样本的缩略网格
比如绘制前25个数字的5×5网格:
# 设置5×5的绘图网格,把边距调到最小 par(mfrow = c(5,5), mar = c(0,0,0,0)) for(i in 1:25){ img_matrix <- matrix(as.numeric(d[i, -1]), nrow = 28, ncol = 28, byrow = TRUE) img_matrix <- img_matrix[28:1, ] image(img_matrix, col = gray(0:255/255), axes = FALSE) } # 恢复默认的绘图参数 par(mfrow = c(1,1))
3. 分析变量/标签关系(降维后绘图)
如果想探索数据的整体分布,可以用PCA降维后绘制散点图:
# 对像素列做PCA(跳过label列) pca <- prcomp(d[, -1], scale. = FALSE) # 绘制前2个主成分的散点图,用label区分颜色 plot(pca$x[, 1:2], col = d$label + 1, pch = 16, main = "PCA前2主成分散点图") # 添加图例 legend("topright", legend = 0:9, col = 1:10, pch = 16)
不推荐的临时调试方法
如果非要尝试绘制少量变量的散点图矩阵,可以调整图形设备大小和边距,但785个变量依然不可能实现:
# Windows系统打开大尺寸窗口(mac用quartz,linux用x11) windows(width = 20, height = 20) # 把绘图边距调到极小 par(mar = c(0.1, 0.1, 0.1, 0.1)) # 仅绘制前10个变量的散点图矩阵 plot(d[, 1:10])
内容的提问来源于stack exchange,提问作者rt2421
相关产品推荐
相关产品推荐

