【问题标题】:Correcting aspect ratio of circle plot with matplotlib.patches使用 matplotlib.patches 校正圆形图的纵横比
【发布时间】:2018-09-14 23:28:55
【问题描述】:

我正在使用 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()

【问题讨论】:

    标签: python matplotlib patch


    【解决方案1】:

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

    你可以选择

    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()
    

    【讨论】:

      【解决方案2】:

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

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

      具有正确的所需输出,如下所示。

      或者您还可以使用以下代码行(在定义ax 之后和显示之前的任意位置)使纵横比与

      ax.set_aspect('equal')
      

      输出

      【讨论】:

      • 它确实会生成一个正方形图形,但纵横比会随着图形大小的变化而变化。有没有永久的解决方案?
      • 但是一旦你输入ax.set_aspect('equal'),大小就无所谓了,对吧?还是我无法理解你想说什么?请解释一下
      • Bazingaa @Bazingaa
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多