在我手头的问题中,我想将两个热图合并到一个图表中。下面的示例创建一个热图,它捕获x轴上的存储单元和y轴上的书籍的销售数量。现在,我们可以合理地假设这些单位是通过两种不同的分销渠道销售的:商店(S)和在线(O)。
我不想在两个不同的热图中显示不同的通道,而是同时显示两个通道(分割机制由存储A的蓝线显示)。这也意味着同一商店的颜色可能会因分销渠道的不同而有所不同,如第2册和第4册分别为存储A所示。理想情况下,我也会有两个共格,但如果这不是很容易实现,类似的颜色图可能就足够了。
示例地图:

复制此地图的代码:
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()发布于 2022-10-26 21:46:06
可以通过创建一个数据帧来实现预期的输出(具有相似的颜色条),其中交替列是来自S和A通道的数据。
然后,您编写的代码已经处于适当的状态,可以得到预期的输出,只需做一些小的更改:
代码:
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() 图:

https://stackoverflow.com/questions/74212782
复制相似问题