如何将一个热图堆叠在另一个热图上

时间:2018-12-21 23:50:06

标签: python matplotlib plot

我分别创建了2个2D热图。无论如何,我可以在3-D图中一起显示它们吗?更具体地说,热图将放置在x-y平面上,而一个将在z = 10处,另一个将在z = 20。

----------------------------------------------------- ------

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

from matplotlib.pyplot import figure

fig1 = plt.figure()
sns.heatmap(np.random.rand(10,10), xticklabels=False, yticklabels=False, cbar=False)

fig2 = plt.figure()
sns.heatmap(np.random.rand(10,10), xticklabels=False, yticklabels=False, cbar=False)

----------------------------------------------------- ------

我希望结果与这一结果相似。红色和蓝色表面应替换为热图。

enter image description here

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则需要两个平坦的表面。这是在3d中执行此操作的示例。您可以将x,y数据替换为所需的任何值。这里的窍门是具有恒定的z值(此处为10和20)。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(8, 4))
ax = fig.gca(projection='3d')

x = np.random.rand(50)
y = np.random.rand(50)
X, Y = np.meshgrid(x, y)

Z1 = 0*X + 10
Z2 = 0*X + 20

color_values = np.random.rand(len(y), len(x))
colors = plt.cm.jet(color_values)

ax.plot_surface(X, Y, Z1, facecolors=colors, antialiased=True)
ax.plot_surface(X, Y, Z2, facecolors=colors, antialiased=True)
ax.set_zlim(8, 21)

enter image description here