Python 如何让matplotlib pyplot生成图表,以特定分辨率查看/输出到.png?

Python 如何让matplotlib pyplot生成图表,以特定分辨率查看/输出到.png?,python,matplotlib,Python,Matplotlib,我厌倦了在excel中手动创建图形,因此,我尝试使用Python将.csv数据转换成可行的形式,并使用matplotlib绘制结果,从而使该过程自动化 使用matplotlib并生成它们没有问题,但我无法确定如何设置输出的纵横比/分辨率 具体来说,我试图生成散点图和堆积面积图。我所尝试的一切似乎都会导致以下一个或多个问题: 狭窄的图形区域(覆盖图例、轴等的小绘图区域) 错误的纵横比 图表区域两侧的大空间(我想要一张非常宽/不太高的图像) 如果有人有一些工作的例子来说明如何实现这个结果,我将非

我厌倦了在excel中手动创建图形,因此,我尝试使用Python将.csv数据转换成可行的形式,并使用matplotlib绘制结果,从而使该过程自动化

使用matplotlib并生成它们没有问题,但我无法确定如何设置输出的纵横比/分辨率

具体来说,我试图生成散点图和堆积面积图。我所尝试的一切似乎都会导致以下一个或多个问题:

  • 狭窄的图形区域(覆盖图例、轴等的小绘图区域)
  • 错误的纵横比
  • 图表区域两侧的大空间(我想要一张非常宽/不太高的图像)
如果有人有一些工作的例子来说明如何实现这个结果,我将非常感激

纵横比/图形大小 我发现最简单的方法是在创建图形时将
figsize
参数设置为函数。例如,这会将图形设置为4英寸宽3英寸高:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(4,3))
调整间距 为此,有一个名为的函数,允许您更改图形本身的边界区域,为标题、轴和标签留出更多空间。下面是我的一个图表中的一个示例:

plt.gcf().subplots_adjust(bottom=0.15, left=0.13, right=0.95, top=0.96)

您可以使用ax控制纵横比。设置纵横比:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax=fig.add_subplot(1,1,1)
ax.set_aspect(0.3)
x,y=np.random.random((2,100))
plt.scatter(x,y)    
设置纵横比的另一种方法(已经提到)是使用
plt.figure
中的
figsize
参数:例如
fig=plt.figure(figsize=(3,1))
。然而,这两种方法略有不同:一个图形可以包含多个轴
figsize
控制整个图形的纵横比,而
set\u aspect
控制特定轴的纵横比

接下来,您可以使用
bbox\u inches='tight'
从绘图周围修剪未使用的空间:

plt.savefig('/tmp/test.png', bbox_inches='tight')

如果要消除matplotlib自动选择x范围和y范围而产生的多余空白,可以使用
ax.set\u xlim
ax.set\u ylim
手动设置:

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

对于分辨率,您可以在创建图形时使用dpi(每英寸点数)参数,或在
savefig()函数中使用。对于高质量的图形打印,建议使用dpi=600
或更高的分辨率。

但它的图形非常简单/容易!;-)增加DPI的问题在于,它会使用该尺寸缩放所有线条厚度和字体:-/