Python matplotlib绘制含随机数的双数组线条图显示异常问题咨询
问题核心成因
连线图无法正确呈现函数全局变化规律、图像错乱的本质原因,是存储随机值的横轴数组r_mod没有按数值大小排序。
matplotlib的连线绘制逻辑,是严格按照输入数组的元素索引顺序逐点连接的:即依次取第1对(x,y)、第2对(x,y)……按顺序连成线段。只要x值没有按照从小到大的顺序排列,连线就会在x轴区间内无规则来回跳转,最终形成杂乱的网状线条,完全遮蔽真实的函数变化趋势。
之前用plt.plot(r_mod,gbp,"o")绘制散点图能正常显示全局特征,是因为散点模式仅需把每个(x,y)坐标标记在画布上,不需要按索引顺序连点,因此数组的排列顺序不会影响点位的整体分布展示。
具体修正方案
修正核心是绘图前对两个数组做同步排序,保证连线按照x值从左到右的顺序依次延伸:
- 借助numpy的索引排序能力,获取
r_mod从小到大排列对应的索引序列 - 用该索引序列同时重排
r_mod和与之一一对应的gbp数组,保证x与y的配对关系不被打乱 - 用排序后的数组调用
plt.plot(),即可生成符合要求的带连线关系图像
参考实现代码:
# 生成r_mod升序排列对应的索引序列 sorted_order = np.argsort(r_mod) # 同步重排两个数组,避免x、y值错配 r_mod_sorted = r_mod[sorted_order] gbp_sorted = gbp[sorted_order] # 绘制带连线、叠加点位标记的最终图像 plt.plot(r_mod_sorted, gbp_sorted, '-o')
关键注意点:禁止仅单独对r_mod数组排序,必须使用同一索引序列重排匹配的gbp数组,否则会出现x与y值错配,导致图像完全失真。
内容的提问来源于stack exchange,提问作者Mohammed Alhissi
相关产品推荐
相关产品推荐

