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

如何在Python中同时绘制两张曲线图?现有实现未达需求

解决曲线绘制与区域内均匀布点问题

1. 优化曲线绘制(获得平滑曲线)

你之前的代码仅用3个离散点,导致曲线呈现折线形态。改用numpy.linspace生成足够多的连续x值,能让曲线更平滑:

import matplotlib.pyplot as plt
import numpy as np

# 生成0到2之间的100个连续x值,保证曲线平滑
x = np.linspace(0, 2, 100)
y1 = x ** 2
y2 = 2 - x

plt.plot(x, y1, color='r', label='x²')
plt.plot(x, y2, color='g', label='2-x')

plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()

2. 明确曲线围成的有效区域

解方程x² = 2 - x可得两条曲线的交点为x=1和x=-2,结合你原本的x范围(0到3),实际有效围成区域是x从0到1,且y值处于x²和2-x之间的部分。

3. 在区域内生成均匀分布的点

以下两种方法可实现需求:

方法一:网格点筛选(均匀网格分布)

生成x、y方向的网格点,筛选出落在目标区域内的点:

import matplotlib.pyplot as plt
import numpy as np

# 生成x、y方向的网格采样点
x = np.linspace(0, 1, 50)
y = np.linspace(0, 2, 50)
X_grid, Y_grid = np.meshgrid(x, y)

# 筛选满足区域条件的点
mask = (Y_grid > X_grid**2) & (Y_grid < 2 - X_grid)
valid_x = X_grid[mask]
valid_y = Y_grid[mask]

# 绘制曲线与区域内点
plt.plot(x, x**2, color='r', label='x²')
plt.plot(x, 2 - x, color='g', label='2-x')
plt.scatter(valid_x, valid_y, s=5, color='b', label='区域内点')

plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()

方法二:随机均匀采样(蒙特卡洛法)

生成随机点并筛选有效点,适合需要指定数量点的场景:

import matplotlib.pyplot as plt
import numpy as np

# 生成1000个随机点
num_points = 1000
rand_x = np.random.uniform(0, 1, num_points)
rand_y = np.random.uniform(0, 2, num_points)

# 筛选落在区域内的点
mask = (rand_y > rand_x**2) & (rand_y < 2 - rand_x)
valid_x = rand_x[mask]
valid_y = rand_y[mask]

# 绘制曲线与区域内点
plt.plot(np.linspace(0,1,100), np.linspace(0,1,100)**2, color='r', label='x²')
plt.plot(np.linspace(0,1,100), 2 - np.linspace(0,1,100), color='g', label='2-x')
plt.scatter(valid_x, valid_y, s=5, color='b', label='区域内点')

plt.xlabel("X")
plt.ylabel("Y")
plt.legend()
plt.show()

关键提示

  • 用numpy.linspace替代range能生成连续平滑的曲线,避免折线效果
  • 必须先确定曲线交点,明确有效区域的x范围,否则会筛选出错误区域的点
  • 网格点法生成的点分布更均匀,随机采样法适合快速生成指定数量的点

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:20:59