Iva*_*van 7 python numpy matplotlib
问题:matplotlib的轮廓对输入2D数组的期望是什么顺序?
详细说明:Matplotlib轮廓文档说常规调用是
x_axis = np.linspace(10,100,n_x)
y_axis = np.linspace(10,100,n_y)
matplotlib.pyplot.contour(x_axis, y_axis, scalar_field)
Run Code Online (Sandbox Code Playgroud)
其中scalar_field必须是2D数组.例如,scalar_field可以由.生成
scalar_field = np.array( [(x*y) for x in x_axis for y in y_axis])
scalar_field = scalar_field.reshape(n_x, n_y)
Run Code Online (Sandbox Code Playgroud)
如果scalar_field给出轮廓,
plt.contour(x_axis, y_axis,scalar_field) #incorrect
Run Code Online (Sandbox Code Playgroud)
图的方向不正确(旋转).要恢复正确的方向,必须调换scalar_field:
plt.contour(x_axis, y_axis,scalar_field.transpose()) #correct
Run Code Online (Sandbox Code Playgroud)
那么轮廓期望scalar_field的顺序是什么?
你应该使用绘制contour传球也2 d阵列的X和Y,那么你的每个点scalar_field阵列将对应的坐标(x, y)中X和Y.您可以方便地创建X和Y使用numpy.meshgrid:
import matplotlib.pyplot as plt
import numpy as np
X, Y = np.meshgrid(x_axis, y_axis, copy=False, indexing='xy')
plt.contour(X, Y, scalar_field)
Run Code Online (Sandbox Code Playgroud)
如果希望坐标表示直线并表示列,则indexing可以将参数更改为,但在这种情况下,必须使用索引计算.'ij'xyscalar_fiedij