matplotlib轮廓输入数组顺序

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的顺序是什么?

Sau*_*tro 7

你应该使用绘制contour传球也2 d阵列的XY,那么你的每个点scalar_field阵列将对应的坐标(x, y)XY.您可以方便地创建XY使用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