如何在3D条形图中添加条形图?

时间:2019-01-22 10:15:54

标签: python matplotlib colormap

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.colors as colors
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
from matplotlib.cm import ScalarMappable



result=[['4', '24', '16','22', '13'],
 ['13', '41', '25','31', '30'],
 ['83', '91', '83','98', '60']]

result = np.array(result, dtype=np.int)

"""Se define lo que va a ser el dibujo o el plot"""
fig=plt.figure(figsize=(5, 5), dpi=150)
#First subplot
ax1=fig.add_subplot(111, projection='3d')

xlabels = np.array(['9','12','16a','16b','16c'])
xpos = np.arange(xlabels.shape[0])
ylabels = np.array(['ACN', 'ETOH', 'C-HEX'])
ypos = np.arange(ylabels.shape[0])

xposM, yposM = np.meshgrid(xpos, ypos, copy=False)

zpos=result
zpos = zpos.ravel()

dx=0.5
dy=0.5
dz=zpos

ax1.w_xaxis.set_ticks(xpos + dx/2.)
ax1.w_xaxis.set_ticklabels(xlabels)

ax1.w_yaxis.set_ticks(ypos + dy/2.)
ax1.w_yaxis.set_ticklabels(ylabels)

values = np.linspace(0.1, 1., xposM.ravel().shape[0])

ax1.bar3d(xposM.ravel(), yposM.ravel(), dz*0, dx, dy, dz)

plt.show()
plt.savefig("ICT.png")

所以,问题是我无法在结果中放入翠绿颜色图,而无法在右侧绘制颜色条。谁能帮我? 我通过此代码获得的结果如下: enter image description here

1 个答案:

答案 0 :(得分:0)

很好的问题!

有时候,matplotlib文档可能会有些混乱,并且库在3D漂亮绘图中可能不是最大的。在查看了该线程(how to plot gradient fill on the 3d bars in matplotlib)并对代码进行了一些调整之后:

> years
    [1] 1976 1980 1983 1985

我设法得到了这个结果:

enter image description here

我想这还不是您所需要的,但是借助内置的自定义功能,您也许可以完成工作。