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

Jon*_*age 4 python matplotlib

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

使用matplotlib并生成它们没有问题,但我无法解决的是如何设置输出的宽高比/分辨率.

具体来说,我正在尝试生成散点图和堆积面积图.我尝试过的所有内容似乎都会产生以下一种或多种情况:

  • 狭窄的图形区域(图例覆盖的小图区,轴等).
  • 错误的宽高比.
  • 图表区域两侧的大空间(我想要一个非常宽/不太高的图像).

如果有人有一些工作实例展示如何实现这一结果,我将非常感激!

unu*_*tbu 5

您可以使用以下方法控制宽高比ax.set_aspect:

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)    
Run Code Online (Sandbox Code Playgroud)

设置宽高比的另一种方法(jterrace已经提到)是使用figsize参数plt.figure:例如fig = plt.figure(figsize=(3,1)).然而,这两种方法略有不同:图形可以包含许多轴.figsize控制整个图形set_aspect的纵横比,同时控制特定轴的纵横比.

接下来,您可以使用以下方法修剪绘图周围未使用的空间bbox_inches='tight':

plt.savefig('/tmp/test.png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果由于matplotlib自动选择x-range和y-range而想要消除多余的空白空间,可以使用ax.set_xlim和手动设置它们ax.set_ylim:

ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述