3D 条形图中的图例作为颜色图

LEGEND in a 3D bar plot as a colormap

我在 matplotlib 中有一个 3D 条形图,它总共包含 40 个条形图,目前它相当 confusing.I 使用颜色图将我的数据数组转换为颜色数组。 colors = plt.cm.jet(data.flatten()/float(data.max()))

现在我需要绘制这张彩色地图的 图例。 [关于颜色如何与值相关的色标。]

import os
import glob
import shutil
import pandas as pd
import plotly.express as px
import xlrd
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

#%matplotlib nbagg
x=np.array(range(0,4),float)
y=np.array(range(0,10),float)
xpos,ypos = np.meshgrid(x,y)
z=np.random.rand(4,10)
z=np.array([[1434.273,1437.1749,1441.878,1441.155],
           [1392.140,1371.859,1384.381,1309.88],
           [1333.66,1283.08,1220.85,1268.912],
           [1538.289,1327.628,1278.87,1372.7348],
           [1393.3608,1321.353,1276.506,1248.3100],
           [1394.632,1340.46,1286.30,1346.60],
           [1352.29,1324.48,1229.475,1276.067],
           [1345.233,1285.63,1265.30,1335.97],
           [1406.068,1411.614,1320.27,1390.042],
           [1396.901,1430.822,1455.797,1476.244]])

xpos=xpos.flatten()
ypos=ypos.flatten()
zpos=np.zeros_like(xpos)

dx=0.5*np.ones_like(xpos)
dy=dx.copy()
dz=z.flatten()

fig=plt.figure(figsize = (11,8))
ax=fig.add_subplot(111, projection = "3d")
label = ["E"]

ax.set_title("Variation of Average E along 40 Print positions", fontsize = 25)
ax.set_xticks(range(4))
ax.set_xticklabels(["A", "B", "C", "D"])
ax.set_xlabel("Probe Numbers on X plane",labelpad=15)

ax.set_yticklabels([1,2,3,4,5,6,7,8,9,10])
ax.set_yticks(range(10))
ax.set_ylabel("Probe Numbers on Y plane",labelpad=15)

ax.set_zlabel("E", labelpad=15)
colors = plt.cm.jet(z.flatten()/float(z.max()))

ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color= colors)

#plt.imshow(mat, origin="lower", cmap='gray', interpolation='nearest')

#ax.legend([colors],label)
plt.show()

检查此代码:

import os
import glob
import shutil
import pandas as pd
import plotly.express as px
import xlrd
import matplotlib.pyplot as plt
# %matplotlib inline
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

#%matplotlib nbagg
x=np.array(range(0,4),float)
y=np.array(range(0,10),float)
xpos,ypos = np.meshgrid(x,y)
# z=np.random.rand(4,10)
z=np.array([[1434.273,1437.1749,1441.878,1441.155],
           [1392.140,1371.859,1384.381,1309.88],
           [1333.66,1283.08,1220.85,1268.912],
           [1538.289,1327.628,1278.87,1372.7348],
           [1393.3608,1321.353,1276.506,1248.3100],
           [1394.632,1340.46,1286.30,1346.60],
           [1352.29,1324.48,1229.475,1276.067],
           [1345.233,1285.63,1265.30,1335.97],
           [1406.068,1411.614,1320.27,1390.042],
           [1396.901,1430.822,1455.797,1476.244]])

xpos=xpos.flatten()
ypos=ypos.flatten()
zpos=np.zeros_like(xpos)

dx=0.5*np.ones_like(xpos)
dy=dx.copy()
dz=z.flatten()

fig=plt.figure(figsize = (11,8))
ax=fig.add_subplot(111, projection = "3d")
label = ["E"]

ax.set_title("Variation of Average E along 40 Print positions", fontsize = 25)
ax.set_xticks(range(4))
ax.set_xticklabels(["A", "B", "C", "D"])
ax.set_xlabel("Probe Numbers on X plane",labelpad=15)

ax.set_yticklabels([1,2,3,4,5,6,7,8,9,10])
ax.set_yticks(range(10))
ax.set_ylabel("Probe Numbers on Y plane",labelpad=15)

ax.set_zlabel("E", labelpad=15)
colors = plt.cm.jet((z.flatten() - z.min()) / (z.max() - z.min()))

bar = ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color= colors)

#plt.imshow(mat, origin="lower", cmap='gray', interpolation='nearest')

fig.colorbar(plt.cm.ScalarMappable(cmap = 'jet'), ax = ax)
plt.show()

为了显示颜色条,我添加了:

fig.colorbar(plt.cm.ScalarMappable(cmap = 'jet'), ax = ax)

然后,我编辑你的这行代码:

colors = plt.cm.jet((z.flatten() - z.min()) / (z.max() - z.min()))

这样 colors0 变为 1(正确归一化),因此您可以使用所有颜色条范围。
这是结果: