更改默认的Seaborn热图图

问题描述 投票:0回答:1

我已经从Matlab导出了一个大型矩阵到data.dat文件,该文件用制表符分隔。我将此数据导入到iPython脚本中,以使用seaborn通过以下MWE创建矩阵的热图:

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

uniform_data = np.loadtxt("data.dat", delimiter="\t")
ax = sns.heatmap(uniform_data, linewidth=0.0)
plt.show()

此代码运行正常,并输出正确的热图,生成以下输出:

latex

如何更改此输出的样式?具体来说,我想更改配色方案,并且还使用LaTeX形式的字体。这是因为我想将此输出导出为.pdf文件并导入到LaTeX文档中。

python latex seaborn
1个回答
0
投票
  1. 您可以用cmapsns.heatmap()键控制配色方案。有关可用的颜色表,请参见here
  2. 通常使绘图中的所有字体看起来都可以像乳胶字体一样>>
  3. sns.set(rc={'text.usetex': True})

它的作用是在绘图中的每个文本对象周围添加一个$,以使基础tex环境可以对其进行“ tex-ify”。这对于颜色条来说效果很好,但是,正如您所看到的here,似乎有一个(对我来说还是一个尚未解决的错误)使其不适用于坐标轴刻度标签。解决方法是,您可以在所有刻度标签周围手动添加$,以使tex解释器再次将其识别为texàla

# Collecting all xtick locations and labels and wrapping the labels in two '$'
plt.xticks(plt.xticks()[0], ['$' + label._text + '$' for label in plt.xticks()[1]])

以便演示您的示例

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

# Use tex for all labels globally in the plot
sns.set(rc={'text.usetex': True})

uniform_data = np.random.rand(30, 30)

# Adjust colormap with the cmap key (here 'cubehelix')
ax = sns.heatmap(uniform_data, linewidth=0.0, cmap='cubehelix')

# workaround wrap '$' around tick labels for x and y axis
# commenting the following two lines makes only the colorbar in latex font
plt.xticks(plt.xticks()[0], ['$' + label._text + '$' for label in plt.xticks()[1]])
plt.yticks(plt.yticks()[0], ['$' + label._text + '$' for label in plt.yticks()[1]])

plt.show()

导致

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.