我是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()
此色图是上述代码的结果:
但是,由于颜色混乱,它不是所需的输出。
为进一步说明我的目标,以下是概述问题的图片:
我不明白为什么代码输出中的颜色和轴会弄乱,我做错了什么?
谢谢!