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

