使用matplotlib在colorplot中弄乱颜色和轴

时间:2019-12-23 00:45:31

标签: python numpy matplotlib

我是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()

此色图是上述代码的结果:

enter image description here

但是,由于颜色混乱,它不是所需的输出。

为进一步说明我的目标,以下是概述问题的图片:

Code Output

我不明白为什么代码输出中的颜色和轴会弄乱,我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎需要旋转和翻转存储在z中的数据。对于旋转,numpy在将z传递给pcolor之前具有rot90 here用于翻转here的情况,请执行以下操作

temp = np.rot90(z,-1)
z = np.flipud(temp)