使用 matplotlib.patches 校正圆图的纵横比

Correcting aspect ratio of circle plot with matplotlib.patches

我正在使用 matplotlib.patches 生成一个圆。但是,生成的圆在视觉上不是圆形的。它看起来像一个椭圆。这可能是由于某些宽高比设置导致的,我无法通过补丁弄清楚。如何使用 matplotlib.patches 模块获得视觉上的圆形?

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.path as mpath
import matplotlib.lines as mlines
import matplotlib.patches as mpatches
from matplotlib.collections import PatchCollection

fig, ax = plt.subplots()
grid = np.mgrid[0.2:0.8:3j, 0.2:0.8:3j].reshape(2,-1).T

patches = []

circle1 = mpatches.Circle(grid[4], 0.25, linestyle='-.', fill=False)

ax.add_patch(circle1)

ax.grid(color='r', linestyle='-.', linewidth=1)

# plt.subplots_adjust(left=0.1, bottom=0.1, right=0.5, top=0.5,
#                 wspace=0.1, hspace=0.1)
# plt.tight_layout()
plt.show()

问题是默认figsize中的高度和宽度不等。使用宽度和高度相等的正方形图形尺寸

fig, ax = plt.subplots(figsize=(6,6))

正确的期望输出如下。

或者您也可以使用下面的代码行(在定义 ax 之后和显示之前的任何地方放置)来制作与 [=15 相同的纵横比=]

ax.set_aspect('equal')

输出

如果您希望数据坐标中的圆在屏幕坐标中显示为圆形,则需要将轴的纵横比设置为相等。

你可以选择

ax.set_aspect("equal")

让轴缩放。

或者您可以选择

ax.set_aspect("equal", adjustable="datalim")

让数据规模化

相反,如果您想直接在屏幕坐标中创建一个圆,则可以使用散点图。

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.scatter([.5], [.5], s=10000, edgecolor="k", facecolor="none")
ax.grid(color='r', linestyle='-.', linewidth=1)
ax.axis([0,1,0,1])

plt.show()