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

如何在Python中平滑绘制Y<18x²的不等式阴影区域?

解决Y<18x²区域绘图阶梯状问题

问题根源

你代码里的x和y采样点数量太少(仅25和20个),导致imshow只能用离散的网格块拼接显示,即使添加插值也无法彻底消除阶梯感;另外imshow更适合图像数据可视化,并非数学区域填充的最优选择。

三种平滑绘图方案

方案1:用contourf(推荐,最适配不等式区域填充)

contourf专门用于等高线填充,能自然生成平滑的区域边界:

import numpy as np
import matplotlib.pyplot as plt

# 提升采样密度,保证边界平滑
x = np.linspace(-0.25, 0.25, 200)
y = np.linspace(0, 1, 200)
X, Y = np.meshgrid(x, y)

# 填充Y<18X²的区域
plt.contourf(X, Y, (Y < 18*X**2).astype(float), levels=[0, 1], colors='grey', alpha=0.3)
# 可选:添加抛物线边界线,让区域更清晰
plt.contour(X, Y, 18*X**2, levels=[0], colors='black', linewidths=1)

plt.xlim(-0.25, 0.25)
plt.ylim(0, 1)
plt.show()

方案2:提升网格密度+优化imshow插值

如果坚持用imshow,需要大幅增加采样点数量,并更换更适合的插值方法:

import numpy as np
import matplotlib.pyplot as plt

# 大幅增加采样点,减少离散块的视觉效果
x = np.linspace(-0.25, 0.25, 500)
y = np.linspace(0, 1, 500)
X, Y = np.meshgrid(x, y)

plt.imshow((Y < 18*X**2).astype(float), 
           extent=(X.min(), X.max(), Y.min(), Y.max()), 
           origin="lower", 
           cmap="Greys", 
           alpha=0.3, 
           aspect='auto', 
           interpolation='bilinear')  # bilinear插值比hanning更适合这种场景
plt.show()

方案3:用fill_between(针对抛物线下方区域的极简方案)

因为Y<18x²是抛物线下方的区域,直接用fill_between填充曲线与y=0之间的区域更简洁:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-0.25, 0.25, 200)
y_curve = 18 * x**2

# 填充抛物线下方到y轴底部的区域
plt.fill_between(x, 0, y_curve, color='grey', alpha=0.3)

plt.xlim(-0.25, 0.25)
plt.ylim(0, 1)
plt.show()

内容的提问来源于stack exchange,提问作者S-low

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:19:01