You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中绘制指定宽高的半圆?解决显示为直线的问题

问题分析与解决方案

你的半圆显示成直线,核心原因是x轴与y轴的刻度范围差异过大:x轴仅0-5,y轴却到10000,导致y方向的视觉比例被极度压缩,原本的弧形被挤成了直线。

关于Wedge的参数:Wedge是基于正圆的弧形元素,它的半径是统一的,无法直接设置独立的宽度和高度(正圆的宽高必然相等)。如果需要绘制宽2.5、高5000的椭圆形半圆,有两种更合适的实现方式:

方式1:用Ellipse绘制椭圆弧形

Ellipse支持单独设置宽度和高度,再通过theta1和theta2指定弧形的角度范围,直接实现你要的效果:

import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse

def circleplot():
    fig, ax = plt.subplots()
    ax.set_xlim(xmin=0, xmax=5)
    ax.set_ylim(ymin=0, ymax=10000)

    # 中心(2.5,5000),宽度5(对应x从0到5),高度10000(对应y从0到10000),截取0-180度的上半圆
    ellipse_arc = Ellipse((2.5, 5000), width=5, height=10000, angle=0, 
                          theta1=0, theta2=180, color='black')
    ax.add_patch(ellipse_arc)
    plt.show()

circleplot()

方式2:通过变换缩放Wedge

如果坚持要用Wedge,可以给它添加一个缩放变换,让y方向的尺寸按比例放大,间接得到椭圆弧形:

import matplotlib.pyplot as plt
from matplotlib.patches import Wedge
from matplotlib.transforms import Affine2D

def circleplot():
    fig, ax = plt.subplots()
    ax.set_xlim(xmin=0, xmax=5)
    ax.set_ylim(ymin=0, ymax=10000)

    # 计算y轴与x轴的缩放比例:10000/5=2000
    scale_transform = Affine2D().scale(1, 2000) + ax.transData
    # Wedge半径设为2.5(x方向半宽),变换后y方向半径变为2.5*2000=5000
    w1 = Wedge((2.5, 5000), 2.5, 0, 180, width=0.1, color='black', transform=scale_transform)
    ax.add_patch(w1)
    plt.show()

circleplot()

两种方式都能让你得到符合预期尺寸的半圆,根据你的实际需求选择即可。

内容的提问来源于stack exchange,提问作者Vincent Coulombe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:40:14