Python Matplotlib 绘图 DPI 与图像尺寸对应关系及高清保存技巧
本文详解 Matplotlib 中 DPI 参数对输出图像尺寸的影响,通过具体数值展示 DPI 与像素的线性关系。针对子图过多导致显示过小的问题,提供通过调整 figsize 参数按比例放大图像尺寸的有效解决方案,并附带处理二进制频谱数据生成高清 PNG 图片的代码示例。
Matplotlib DPI 与图像尺寸对应关系
直接切入主题,探讨 Matplotlib 中 DPI(每英寸点数)参数与输出图像物理尺寸及像素分辨率之间的具体对应关系。
当设置 dpi=1 时,若原始逻辑尺寸为 600×400,则输出图像的像素尺寸为 600×400。
当设置 dpi=2 时,对应像素尺寸扩大至 1200×800。
当设置 dpi=3 时,对应像素尺寸扩大至 1800×1200。
........
以 dpi=21 为例,计算公式为 (21×600) × (21×400),最终得到 12600×8400 的高分辨率像素尺寸。
生成高清频谱图片的代码实现
以下提供一段完整的 Python 代码示例,演示如何读取二进制数据并生成指定 DPI 的图片。
...............
...............
plt_temp=y_axis
plt_temp.resize(len(y_axis) , 1)
plt_arr=np.concatenate((plt_arr,plt_temp ), axis=1)
#print(self.plt_arr)
if plt_x%1000==0:
print(plt_x)
if plt_x%1000==0:
cm='hot'
norm = matplotlib.colors.Normalize(vmin=min, vmax=max)
map=plt.imshow(plt_arr,interpolation='nearest',cmap=cm,norm=norm, origin='upper')
plt.xticks([])
plt.yticks([])
plt.axis('off')
#plt.colorbar(mappable=map,ax=None,shrink=0.5, pad=0)
plt.savefig("filename.png", dpi=1320) # 加参数 ,bbox_inches='tight' ,pad_inches=0 可以得到窄边框图片
#plt.show()print(plt_x)
plt_x+=1
temp_str=str(num_now)
return donser_now_lable
............
............
代码逻辑涉及读取一个大小为 1.08GB 的二进制 bin 数据文件的部分内容。数据格式特征为:无文件头、采用小端模式、16位编码的频谱数据。程序目标是将这些数据处理后生名为 filename.png 的图片,并严格指定 dpi=1320 以保证输出质量。

解决子图显示过小的尺寸调整方案
补充知识点:在 Matplotlib 中如何精确指定图片大小以优化显示效果。
在使用 Matplotlib 进行绘图时,常遇到在单个面板中显示过多子图的情况,导致调用 plt.show() 时图像显示过小、细节难以辨认。
如图所示,未优化前的子图排列紧凑且尺寸过小,影响阅读体验。

此时,仅通过调整子图间距(subplots_adjust)往往无法根本解决问题,因为图像本身的像素尺寸并未增加。
常规调整间距的代码如下:plt.subplots_adjust(wspace=0.1, hspace=0.2)
因此,我们需要从根源上增大 Figure 对象的尺寸,即调整 figure 函数的参数。
plt. figure(figsize=(5,8))
# 可以按5比8的大致 比例增加来增大图片的像素
# 例如 plt. figure(figsize=(10,16))
figure(figsize=(5,8)) 中的第一个参数 5 代表列数比例,8 代表行数比例。若效果不佳,可尝试其他参数,但需保持大致相同的宽高比以维持布局协调。

按比例放大参数后,例如将 figsize 增大,图像的物理像素尺寸随之增加,显示效果得到显著改善。

经过上述调整,子图变得清晰易读,布局更加合理。
以上关于 Python Matplotlib 绘图 DPI 对应关系及高清保存方法的详解到此结束,希望能对读者有所帮助,欢迎参考并支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









