gpt4 book ai didi

python - seaborn 热图中的离散图例

转载 作者:太空狗 更新时间:2023-10-29 17:58:33 24 4
gpt4 key购买 nike

我正在使用此处显示的数据使用 seaborn 和 pandas 构建此热图。

代码:

    import pandas
import seaborn.apionly as sns

# Read in csv file
df_trans = pandas.read_csv('LUH2_trans_matrix.csv')

sns.set(font_scale=0.8)
cmap = sns.cubehelix_palette(start=2.8, rot=.1, light=0.9, as_cmap=True)
cmap.set_under('gray') # 0 values in activity matrix are shown in gray (inactive transitions)
df_trans = df_trans.set_index(['Unnamed: 0'])
ax = sns.heatmap(df_trans, cmap=cmap, linewidths=.5, linecolor='lightgray')

# X - Y axis labels
ax.set_ylabel('FROM')
ax.set_xlabel('TO')

# Rotate tick labels
locs, labels = plt.xticks()
plt.setp(labels, rotation=0)
locs, labels = plt.yticks()
plt.setp(labels, rotation=0)

# revert matplotlib params
sns.reset_orig()

正如您从 csv 文件中看到的那样,它包含 3 个离散值:0、-1 和 1。我想要一个离散图例而不是颜色条。将 0 标记为 A,将 -1 标记为 B,将 1 标记为 C。我该怎么做?

最佳答案

嗯,实现这一目标的方法肯定不止一种。在这种情况下,只需要三种颜色,我会通过创建 LinearSegmentedColormap 自己挑选颜色,而不是使用 cubehelix_palette 生成它们。如果有足够的颜色可以保证使用 cubehelix_palette,我会使用 cbar_kws 参数的 boundaries 选项在颜色图上定义段。无论哪种方式,都可以使用 set_ticksset_ticklabels 手动指定刻度。

以下代码示例演示了如何手动创建 LinearSegmentedColormap,并包含有关在改用 cubehelix_palette 时如何指定边界的注释。

import matplotlib.pyplot as plt
import pandas
import seaborn.apionly as sns
from matplotlib.colors import LinearSegmentedColormap

sns.set(font_scale=0.8)
dataFrame = pandas.read_csv('LUH2_trans_matrix.csv').set_index(['Unnamed: 0'])

# For only three colors, it's easier to choose them yourself.
# If you still really want to generate a colormap with cubehelix_palette instead,
# add a cbar_kws={"boundaries": linspace(-1, 1, 4)} to the heatmap invocation
# to have it generate a discrete colorbar instead of a continous one.
myColors = ((0.8, 0.0, 0.0, 1.0), (0.0, 0.8, 0.0, 1.0), (0.0, 0.0, 0.8, 1.0))
cmap = LinearSegmentedColormap.from_list('Custom', myColors, len(myColors))

ax = sns.heatmap(dataFrame, cmap=cmap, linewidths=.5, linecolor='lightgray')

# Manually specify colorbar labelling after it's been generated
colorbar = ax.collections[0].colorbar
colorbar.set_ticks([-0.667, 0, 0.667])
colorbar.set_ticklabels(['B', 'A', 'C'])

# X - Y axis labels
ax.set_ylabel('FROM')
ax.set_xlabel('TO')

# Only y-axis labels need their rotation set, x-axis labels already have a rotation of 0
_, labels = plt.yticks()
plt.setp(labels, rotation=0)

plt.show()

Heatmap using red, green, and blue as colors with a discrete colorbar

关于python - seaborn 热图中的离散图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38836154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com