Matplotlib不会显示默认居中的多边形图?

Gab*_*iel 4 python polygon matplotlib

对于我到目前为止看到的所有类型的情节,matplotlib当没有xlim(), ylim()给出值时,它们会自动居中.例:

import matplotlib.pyplot as plt
A_pts = [(162.5, 137.5), (211.0, 158.3), (89.6, 133.7)]
ax = plt.subplot(111)
ax.scatter(*A_pts)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是当我画一个 Polygon

ax = plt.subplot(111)
triangle = plt.Polygon(A_pts, fill=None, edgecolor='r')
ax.add_patch(triangle)
plt.show()
Run Code Online (Sandbox Code Playgroud)

绘图窗口显示[0, 1]两个轴的限制,这导致多边形不可见.我必须明确传递适当的限制,以便它将显示在绘图窗口中

ax.set_xlim(80, 250)
ax.set_ylim(120, 170)
Run Code Online (Sandbox Code Playgroud)

这是设计还是我错过了什么?

Imp*_*est 10

添加补丁时,会更改轴的数据限制,您可以通过打印查看ax.dataLim.bounds.但是,add_patch不会调用automlimits函数,而大多数其他绘图命令都会调用.

这意味着您可以手动设置绘图的限制(如问题中所示),也可以调用ax.autoscale_view()以调整限制.后者当然具有以下优点:您不需要在前缀之前确定限制并且保留边距.

import matplotlib.pyplot as plt
pts = [(162, 137), (211, 158), (89, 133)]
ax = plt.subplot(111)
triangle = plt.Polygon(pts, fill=None, edgecolor='r')
ax.add_patch(triangle)
print ax.dataLim.bounds

ax.autoscale_view()
plt.show() 
Run Code Online (Sandbox Code Playgroud)

一旦你想添加一些自动缩放限制的其他情节,就不需要再打电话autoscale_view()了.

import matplotlib.pyplot as plt
pts = [(162, 137), (211, 158), (89, 133)]
ax = plt.subplot(111)
triangle = plt.Polygon(pts, fill=None, edgecolor='r')
ax.add_patch(triangle)

ax.plot([100,151,200,100], [124,135,128,124])

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Aje*_*ean 5

这是设计的.类似的东西plotscatter正在绘制的数据,创建艺术家和形成情节/调整轴的功能.add_patch另一方面,更多的是艺术家控制方法(它不创造艺术家,艺术家本身传入).正如Paul H的评论中所提到的,它处于公共API的最低级别,在该级别,假设您完全控制了该数字.