10 python matplotlib
基本上我有两个数组,一个包含x轴的值,第二个包含y轴的值.问题是,当我这样做
plt.semilogy(out_samp,error_mc)
Run Code Online (Sandbox Code Playgroud)
我明白了
这没有任何意义.这是因为绘图函数绘制了在x数组中遇到的所有内容,而不是关心它是否按升序排序.我如何对这两个数组进行排序,以便通过增加值对y数组进行排序,并以相同的方式对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()
Run Code Online (Sandbox Code Playgroud)
对于小数据,zip(如其他回答者所提到的)就足够了.
new_x, new_y = zip(*sorted(zip(x, y)))
Run Code Online (Sandbox Code Playgroud)
结果,
轻松地对两个数据列表进行zip排序,排序和取消排序zip。
例:
xs = [...]
ys = [...]
xs, ys = zip(*sorted(zip(xs, ys)))
plot(xs, ys)
Run Code Online (Sandbox Code Playgroud)
请参阅此处的zip文档:https : //docs.python.org/3.5/library/functions.html#zip
对列表进行排序的另一种方法是使用 NumPy 数组并np.sort()用于排序。使用数组的优点是在计算 y=f(x) 之类的函数时进行矢量化操作。以下是绘制正态分布的示例:
不使用排序数据
mu, sigma = 0, 0.1
x = np.random.normal(mu, sigma, 200)
f = 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (x - mu)**2 / (2 * sigma**2) )
plt.plot(x,f, '-bo', ms = 2)
Run Code Online (Sandbox Code Playgroud)
输出 1
使用 np.sort()这允许x在计算正态分布时直接使用排序数组。
mu, sigma = 0, 0.1
x = np.sort(np.random.normal(mu, sigma, 200))
# or use x = np.random.normal(mu, sigma, 200).sort()
f = 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (x - mu)**2 / (2 * sigma**2) )
plt.plot(x,f, '-bo', ms = 2)
Run Code Online (Sandbox Code Playgroud)
或者,如果您已经将 x 和 y 数据都未排序,则可以使用numpy.argsort后验对它们进行排序
mu, sigma = 0, 0.1
x = np.random.normal(mu, sigma, 200)
f = 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (x - mu)**2 / (2 * sigma**2) )
plt.plot(np.sort(x), f[np.argsort(x)], '-bo', ms = 2)
Run Code Online (Sandbox Code Playgroud)
请注意,上面的代码使用了sort()两次:首先是 with np.sort(x),然后是 with f[np.argsort(x)]。总sort()调用可以减少到一个:
# once you have your x and f...
indices = np.argsort(x)
plt.plot(x[indices], f[indices], '-bo', ms = 2)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,输出都是
输出 2
| 归档时间: |
|
| 查看次数: |
21799 次 |
| 最近记录: |