<p>Matplotlib不直接处理像素,而是处理物理大小和DPI。如果要显示具有特定像素大小的图形,需要知道监视器的DPI。例如,<a href="http://www.infobyip.com/detectmonitordpi.php" rel="noreferrer">this link</a>将为您检测到这一点。</p>
<p>如果您的图像为3841x7195像素,则监视器不太可能有那么大,因此您将无法显示该大小的图形(matplotlib要求图形适合屏幕,如果您要求的大小太大,则它将缩小到屏幕大小)。假设你想要一个800x800像素的图像作为例子。下面是如何在监视器中显示800x800像素的图像(<code>my_dpi=96</code>):</p>
<pre><code>plt.figure(figsize=(800/my_dpi, 800/my_dpi), dpi=my_dpi)
</code></pre>
<p>所以基本上你只需要用DPI除以尺寸(英寸)。</p>
<p>如果你想保存一个特定大小的图形,那就另当别论了。屏幕dpi不再那么重要了(除非你要求一个不适合屏幕的数字)。使用800x800像素图形的相同示例,我们可以使用<code>savefig</code>的<code>dpi</code>关键字以不同的分辨率保存它。要以与屏幕相同的分辨率保存,只需使用相同的dpi:</p>
<pre><code>plt.savefig('my_fig.png', dpi=my_dpi)
</code></pre>
<p>要将其保存为8000x8000像素图像,请使用10倍大的dpi:</p>
<pre><code>plt.savefig('my_fig.png', dpi=my_dpi * 10)
</code></pre>
<p>请注意,并非所有后端都支持DPI的设置。在这里,使用PNG后端,但是pdf和ps后端将实现不同的大小。此外,更改DPI和大小也会影响fontsize之类的内容。较大的DPI将保持字体和元素的相对大小相同,但是如果您想要较大的图形使用较小的字体,则需要增加物理大小,而不是DPI。</p>
<p>回到示例,如果要保存3841 x 7195像素的图像,可以执行以下操作:</p>
<pre><code>plt.figure(figsize=(3.841, 7.195), dpi=100)
( your code ...)
plt.savefig('myfig.png', dpi=1000)
</code></pre>
<p>注意,我使用数字dpi 100来适应大多数屏幕,但是用<code>dpi=1000</code>保存以获得所需的分辨率。在我的系统中,这会产生一个3840x7190像素的png——看起来保存的DPI总是比选定的值小0.02像素/英寸,这会对大图像大小产生(小)影响。关于这个<a href="https://stackoverflow.com/questions/8775622/exact-figure-size-in-matplotlib-with-title-axis-labels">here</a>的更多讨论。</p>