首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个热图合并在一个图表中

将两个热图合并在一个图表中
EN

Stack Overflow用户
提问于 2022-10-26 18:44:42
回答 1查看 58关注 0票数 0

在我手头的问题中,我想将两个热图合并到一个图表中。下面的示例创建一个热图,它捕获x轴上的存储单元和y轴上的书籍的销售数量。现在,我们可以合理地假设这些单位是通过两种不同的分销渠道销售的:商店(S)和在线(O)。

我不想在两个不同的热图中显示不同的通道,而是同时显示两个通道(分割机制由存储A的蓝线显示)。这也意味着同一商店的颜色可能会因分销渠道的不同而有所不同,如第2册和第4册分别为存储A所示。理想情况下,我也会有两个共格,但如果这不是很容易实现,类似的颜色图可能就足够了。

示例地图:

复制此地图的代码:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

data = np.random.randint(2, 100, size=(7, 6))
x = ["Store {}".format(i) for i in list("ABCDEF")]
y = ["Book {}".format(i) for i in range(1, 8)]

fig, ax = plt.subplots()
im = ax.imshow(data, cmap="Wistia")

# set xlabels
ax.set_xticks(list(range(0, 6, 1)))
ax.set_xticklabels(x, rotation=45)
# set ylabels
ax.set_yticks(list(range(0, 7, 1)))
ax.set_yticklabels(y)
# white grid
ax.set_xticks(np.arange(-0.5, 6, 1), minor=True)
ax.set_yticks(np.arange(-0.5, 7, 1), minor=True)
ax.grid(which='minor', axis='both', linestyle='-', color='white', linewidth=2)
#resize
ax.set_aspect('auto')
# add colorbar
plt.colorbar(im)
plt.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 21:46:06

可以通过创建一个数据帧来实现预期的输出(具有相似的颜色条),其中交替列是来自S和A通道的数据。

然后,您编写的代码已经处于适当的状态,可以得到预期的输出,只需做一些小的更改:

代码:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

# Arrange alternate columns with data from channel S and A
data = np.random.randint(2, 100, size=(7, 12))

x = ["Store {}".format(i) for i in list("AABBCCDDEEFF")] 
y = ["Book {}".format(i) for i in range(1, 8)]

fig, ax = plt.subplots()
im = ax.imshow(data, cmap="Wistia")

# set xlabels
ax.set_xticks(list(np.arange(0.5, 12.5, 2)))
ax.set_xticklabels(x[::2], rotation=45)

# set ylabels
ax.set_yticks(list(range(0, 7, 1)))
ax.set_yticklabels(y)

# white grid
ax.set_xticks(np.arange(-0.5, 12, 1), minor=True)
ax.set_yticks(np.arange(-0.5, 7, 1), minor=True)
ax.grid(which='minor', axis='both', 
linestyle='-', color='white', linewidth=2)

for i in range(0, 12, 2):
    ax.text(-0.25 + i , -0.65, "S")
    ax.axvline(i + 0.5, lw=1, color='black', linewidth=0.7)
    ax.text(0.75 + i , -0.65, "O")

ax.set_aspect('auto')

plt.colorbar(im).ax.set_title("O")
plt.colorbar(im).ax.set_title("S")
plt.subplots_adjust(hspace=0, wspace=0)
plt.show()  

图:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74212782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档