Я новичок в Python, и моя цель - использовать его в основном для построения графиков, так как я студент MSc. У меня есть файлы в формате, описанном ниже, и я пытаюсь сделать правильную Colormesh из этого:
0 0 1 2 3 4 5 6
-3 1 1 1 1 1 1 1
-2 1 1 1 1 1 1 1
-1 7 7 4 4 4 6 6
0 7 7 4 4 4 6 6
1 7 7 4 4 4 6 6
2 3 3 3 3 3 3 3
3 3 3 3 3 3 3 3
[0 1 2 3 4 5 6]
первой строки - значения для оси Y графика, а [-3 -2 -1 0 1 2 3]
в первом столбце приведены значения для значений x того же графика. Первый 0 только для пробелов.
Итак, я сохранил эти значения в переменных:
data = [[ 0. 0. 1. 2. 3. 4. 5. 6.]
[-3. 1. 1. 1. 1. 1. 1. 1.]
[-2. 1. 1. 1. 1. 1. 1. 1.]
[-1. 7. 7. 4. 4. 4. 6. 6.]
[ 0. 7. 7. 4. 4. 4. 6. 6.]
[ 1. 7. 7. 4. 4. 4. 6. 6.]
[ 2. 3. 3. 3. 3. 3. 3. 3.]
[ 3. 3. 3. 3. 3. 3. 3. 3.]]
x = [-3 -2 -1 0 1 2 3]
y = [0 1 2 3 4 5 6]
z = [[1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1.]
[7. 7. 4. 4. 4. 6. 6.]
[7. 7. 4. 4. 4. 6. 6.]
[7. 7. 4. 4. 4. 6. 6.]
[3. 3. 3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3. 3. 3.]]
и z
- это числа, которые я действительно хочу построить.
Вот мой код:
import matplotlib.pyplot as plt
from matplotlib.colors import BoundaryNorm, ListedColormap
from matplotlib.ticker import MaxNLocator
import numpy as np
# ------------- Input Data Files ------------- #
data = np.loadtxt('my_colormesh_data0.dat') # Load Data File
# ------ Transform Data into 2D Matrix ------- #
x = data[1:,0]
y = data[0,1:]
z = data[1:,1:] # Take colormesh values and store into matrix
# ============ Plot Commands =================== #
colormap = ListedColormap(['#404040', '#FFEE00', '#00DC00', '#FF8000', '#9900FF', '#000000', '#FF0000'])
fig, ax = plt.subplots()
im = ax.pcolormesh(x, y, z, cmap = colormap, vmin = z.min(), vmax=colormap.N)
fig.colorbar(im, ax=ax)
plt.xlabel('x')
plt.ylabel('y')
plt.tight_layout()
plt.show()
, и этот цветовой график является результатом кода выше:
Однако этоэто не нужный результат, так как цвета перепутаны.
Чтобы проиллюстрировать мою цель, вот картинка, обобщающая проблему:
Не понимаю, почему цвета и оси перепутаны при выводе кода, что я делаю не так?
Заранее спасибо!