Python matplotlib折线图连线异常求助及正确绘制方法
Matplotlib折线图连线异常问题解决
问题原因
你当前的代码里,a数组是[3,1,5,4,2],plt.plot(a,b)会严格按照数组的索引顺序依次连接对应坐标点——也就是先连(3,1)→(1,2)→(5,4)→(4,2)→(2,5),这和你想要的(1,2)→(2,5)→(3,1)→(4,2)→(5,4)顺序完全不符,所以才会出现连线混乱的情况。本质是matplotlib的plot函数默认按输入数组的元素顺序依次连接对应坐标点,如果x轴变量没按你期望的逻辑排序,连线自然会乱。
解决方法
方法一:直接按目标顺序定义数组
如果你明确知道要连接的点顺序,直接把a和b按目标顺序重新组织即可:
import matplotlib.pyplot as plt # 对应目标顺序:(1,2)、(2,5)、(3,1)、(4,2)、(5,4) a_sorted = [1, 2, 3, 4, 5] b_sorted = [2, 5, 1, 2, 4] plt.plot(a_sorted, b_sorted) plt.show()
方法二:对原数组按x值排序
如果数据量较大,手动排序麻烦,可以用zip将a和b的元素配对,按x值(即a的元素)排序后再拆分回两个数组:
import matplotlib.pyplot as plt a = [3, 1, 5, 4, 2] b = [1, 2, 4, 2, 5] # 配对a、b元素,按a的数值从小到大排序 sorted_pairs = sorted(zip(a, b), key=lambda x: x[0]) # 拆分回排序后的a和b数组 a_sorted, b_sorted = zip(*sorted_pairs) plt.plot(a_sorted, b_sorted) plt.show()
两种方法都能实现你要的连线顺序,方法一适合小数据或明确顺序的场景,方法二更适合动态排序的通用场景。
内容的提问来源于stack exchange,提问作者Matthew Pardo
相关产品推荐
相关产品推荐

