如何在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
相关产品推荐
相关产品推荐

