我已经从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形式的字体。这是因为我想将此输出导出为.pdf文件并导入到LaTeX文档中。
cmap
的sns.heatmap()
键控制配色方案。有关可用的颜色表,请参见here。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()
导致