Python的Matplotlib绘图顺序错误 [英] Python's Matplotlib plotting in wrong order
问题描述
基本上,我有两个数组,一个数组包含x轴的值,第二个数组包含y轴的值.问题是,当我这样做
plt.semilogy(out_samp,error_mc)
我明白了
这没有任何意义.这是因为plot函数会绘制在x数组中遇到的所有内容,而不关心是否按升序排序.我该如何对这两个数组进行排序,以使x数组按递增值进行排序,而y轴以相同的方式进行排序,从而使点相同,但将图连接起来,以免造成混乱? >
提前谢谢!
在绘制之前按x轴的值排序.这是MWE.
import itertools
x = [3, 5, 6, 1, 2]
y = [6, 7, 8, 9, 10]
lists = sorted(itertools.izip(*[x, y]))
new_x, new_y = list(itertools.izip(*lists))
# import operator
# new_x = map(operator.itemgetter(0), lists) # [1, 2, 3, 5, 6]
# new_y = map(operator.itemgetter(1), lists) # [9, 10, 6, 7, 8]
# Plot
import matplotlib.pylab as plt
plt.plot(new_x, new_y)
plt.show()
对于小数据,请 zip
(如其他答题者就足够了.
new_x, new_y = zip(*sorted(zip(x, y)))
结果
Basically I have two arrays, one containing the values of the x-axis and the second containing the values of the y-axis. The problem is, when I do
plt.semilogy(out_samp,error_mc)
I get this
Which doesn't make any sense. That is because the plot functions plots everything as it encounters in the x array, not caring whether it's sorted in ascending order or not. How can I sort these two arrays so that the x array is sorted by increasing value and the y axis sorted in the same way so that the points are the same but the plot is connected so that it doesn't make this mess?
Thank you in advance!
Sort by the value of x-axis before plotting. Here is an MWE.
import itertools
x = [3, 5, 6, 1, 2]
y = [6, 7, 8, 9, 10]
lists = sorted(itertools.izip(*[x, y]))
new_x, new_y = list(itertools.izip(*lists))
# import operator
# new_x = map(operator.itemgetter(0), lists) # [1, 2, 3, 5, 6]
# new_y = map(operator.itemgetter(1), lists) # [9, 10, 6, 7, 8]
# Plot
import matplotlib.pylab as plt
plt.plot(new_x, new_y)
plt.show()
For small data, zip
(as mentioned by other answerers) is enough.
new_x, new_y = zip(*sorted(zip(x, y)))
The result,
这篇关于Python的Matplotlib绘图顺序错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!