randint函数_Python学习教程:Matplotlib库基础分析—自动调整函数

今天的Python学习教程,给大家来点儿不一样的,老师敲黑板同学竖耳朵听的!

在matplotlib中,轴Axes的位置以标准化图形坐标指定,可能发生的情况是轴标签、标题、刻度标签等等会超出图形区域,导致显示不全。Matplotlib v1.1 引入了一个新的命令tight_layout(),作用是自动调整子图参数,使之填充整个图像区域。

调用plt.show()函数时会自动运行tight_layout()函数,如下所示:

def show(self): self.figure.tight_layout() FigureCanvasAgg.draw(self) if PORT is None: return if matplotlib.__version__ < '1.2': buffer = self.tostring_rgb(0, 0) else: buffer = self.tostring_rgb() if len(set(buffer)) <= 1: # do not plot empty return render = self.get_renderer() width = int(render.width) plot_index = index if os.getenv("PYCHARM_MATPLOTLIB_INTERACTIVE", False) else -1 try: sock = socket.socket() sock.connect((HOST, PORT)) sock.send(struct.pack('>i', width)) sock.send(struct.pack('>i', plot_index)) sock.send(struct.pack('>i', len(buffer))) sock.send(buffer) except OSError as _: # nothing bad. It just means, that our tool window doesn't run yet pass

我们通过以下一个例程来介绍,最终的显示效果如下所示:

fig = plt.figure(figsize=(12, 8))ax1 = fig.add_subplot(211)ax2 = fig.add_subplot(212)ax1.plot(np.arange(10), np.random.randint(0, 10, 10), ls='-', c='r', lw=1)ax2.plot(np.arange(10), np.random.randint(10, 20, 10), ls='-', c='y', lw=1)plt.show()
bf2e9d9354482476fedeb901298703e8.png

不过很多时候会出现tight_layout()不工作的情况,比如出现以下提示:UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect. warnings.warn("This figure includes Axes that are not compatible "
这个警告的原因是tight_layout这个函数出错了,警告语句出现的原因时axes列表为空,tight_layout()中相应的代码,如下所示:

subplotspec_list = get_subplotspec_list(self.axes)if None in subplotspec_list: cbook._warn_external("This figure includes Axes that are not " "compatible with tight_layout, so results " "might be incorrect.")

可见这个函数并不太稳定。tight_layout不起作用的时候,绘图效果如下所示,可见子图并没有填充整个图像区域。

3241ea3f24be18dd1fe4546fe60de9fe.png

网上搜索了下发现也有类似的情况出现,附上部分案例的截图:

9737aca59ebe9d3d630362312b9174f2.png

接下来我们尝试下解决方法,tight_layout在plt.savefig的调用方式相对比较稳定,我们将plt.show()函数替换为plt.savefig函数,替换后会在本地另外为png图片,该图片中子图填充了整个图像区域。

plt.savefig('fig.png', bbox_inches='tight') # 替换 plt.show()

有哪些不清楚的地方可以留言,更多的Python学习教程也会继续为大家更新!你们有想学的板块知识点也可以留言哈!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matplotlib是一个Python绘图,它可以用于创建各种类型的图表,包括折线图、散点图、柱状图、饼图等。在本文,我们将介绍如何使用Matplotlib绘制多个变量的图表。 首先,我们需要导入Matplotlib和其他必要的。以下是导入的代码: ```python import matplotlib.pyplot as plt import numpy as np ``` 接下来,我们将生成一些随机数据来绘制图表。以下是生成数据的代码: ```python x = np.arange(1, 11) y1 = np.random.randint(1, 10, size=10) y2 = np.random.randint(1, 10, size=10) y3 = np.random.randint(1, 10, size=10) ``` 在这里,我们使用了NumPy来生成随机的x和y值。我们现在有了三个变量,y1、y2和y3,它们都是由x生成的。 现在,我们可以使用Matplotlib来绘制这些变量的图表。以下是绘制图表的代码: ```python plt.plot(x, y1, label='y1') plt.plot(x, y2, label='y2') plt.plot(x, y3, label='y3') plt.legend() plt.show() ``` 在这里,我们使用了plt.plot()函数来绘制每个变量的线条。我们还使用了plt.legend()函数来创建一个图例,它将每个变量的标签与相应的线条关联起来。最后,我们使用plt.show()函数来显示图表。 运行上述代码,将得到一个包含三个变量的折线图,每个变量都有自己的标签。 除了折线图,Matplotlib还支持其他类型的图表,例如散点图、柱状图和饼图。要绘制这些类型的图表,您需要使用不同的函数和参数。请参考Matplotlib文档以获取更多信息。 希望这篇文章对您有所帮助,祝您在使用Matplotlib时愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值