如何在Matplotlib中绘制|x| + |y| = 0.1函数?范围异常求助
解决Matplotlib绘制|x| + |y| = 0.1的问题
用单个函数绘制的方法
这个方程对应一个菱形,完全可以通过单个参数化函数实现绘制,不用分段处理。
直接看代码:
import matplotlib.pyplot as plt import numpy as np # 生成覆盖0到2π的参数theta theta = np.linspace(0, 2*np.pi, 1000) # 通过参数方程计算所有符合条件的x、y点 x = 0.1 * np.cos(theta) / (np.abs(np.cos(theta)) + np.abs(np.sin(theta))) y = 0.1 * np.sin(theta) / (np.abs(np.cos(theta)) + np.abs(np.sin(theta))) plt.plot(x, y) plt.axis('equal') # 防止图形被拉伸变形 plt.show()
原理是利用三角函数的周期性和绝对值特性,通过参数theta生成所有满足|x|+|y|=0.1的点,一行plt.plot(x,y)就能完成绘制,属于单个函数调用的范畴。
解决范围超出时显示异常的问题
这个方程的有效定义域和值域本来就是[-0.1, 0.1]——如果x的绝对值大于0.1,|x|已经超过0.1,加上|y|不可能等于0.1;y同理。超出这个范围的区域没有符合方程的点,自然会显示异常。
解决方法很直接:
- 手动设置坐标轴范围,匹配函数的有效区域:
plt.xlim(-0.15, 0.15) plt.ylim(-0.15, 0.15) - 生成数据时严格限定在有效范围内,避免无效值干扰:
x = np.linspace(-0.1, 0.1, 1000) # 计算上下两条边的y值 y_upper = 0.1 - np.abs(x) y_lower = -(0.1 - np.abs(x)) # 合并绘制 plt.plot(x, y_upper, x, y_lower) plt.axis('equal') plt.show()
这种方式也能画出完整图形,且能确保只生成有效数据,从根源避免范围异常问题。
内容的提问来源于stack exchange,提问作者Alpha
相关产品推荐
相关产品推荐

