使用matplotlib pcolormesh,如何阻止一行中绘制的图块连接到上方和下方的行?

问题描述 投票:0回答:1

每个强度 (Z) 数组都有单独的 x 数组。这意味着强度行不会彼此堆叠。我不希望图块“倾斜”,因此它们连接到上方和下方的行,我只希望它们在 y 方向上是直的并在 x 方向上连接。提前非常感谢!

这是一个虚拟代码:

import numpy as np
import matplotlib.pyplot as plt

y_values = np.array([0, 1, 2, 3, 4, 5], dtype=float)

x_list = range(50, 70)

x_values_list = []
z_values_list = []
for i in range(len(y_values)):
    x_value_single_list = [np.array(0.01*x**2 + 0.1*x*i + 0.3 * i, dtype= float) for x in x_list]
    x_values_list.append( x_value_single_list)
    z_values_list.append(np.random.rand(20))

z_values_list = [np.array(arr, dtype=float) for arr in z_values_list]
x_values_list = [np.array(arr, dtype=float) for arr in x_values_list]

fig, ax = plt.subplots()

c = ax.pcolormesh(x_values_list, y_values, z_values_list, cmap='viridis') #, shading='auto'
plt.colorbar(c)
plt.show()

enter image description here

我尝试了很多 kwargs,但其中很多似乎没有做任何事情,并且似乎没有为 pcolormesh 实现,更适合常规线图。我显然已经尝试了很多 ChatGPT。

python matplotlib
1个回答
0
投票

如果您使用平面着色,其中 x 和 y 代表每个四边形的角,那么您可以一次绘制一行。请注意,我在 pcolormesh 调用中明确设置了 vmin

vmax
参数,以便每行的颜色范围相同,即使它们的实际最大值和最小值不同。

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

y_values = np.array([0, 1, 2, 3, 4, 5], dtype=float)
x_list = range(50, 70)

for i in range(len(y_values) - 1):
    x_value_single_list = [np.array(0.01*x**2 + 0.1*x*i + 0.3 * i, dtype= float) for x in x_list]
    z_values = np.random.rand(1, 19)  # 2D array but single row.
    
    c = ax.pcolor(x_value_single_list, y_values[i:i+2], z_values, cmap='viridis',
                  shading='flat', vmin=0, vmax=1)

plt.colorbar(c)
plt.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.