我试图用海运绘制一个热图,并将其导出到pgf,以便在Latex中方便地导入。这或多或少的工作,唯一困扰我的是,酒吧的颜色是作为一个额外的png输出。
因此,如果我运行到pgf的导出,就会得到以下内容:
这绝对是不可取的,因为png没有很好地扩展。一些妇女权利和平等:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.DataFrame.from_csv("test.csv", sep=',')
sns.set('paper', 'white', rc={'font.size': 10, 'axes.labelsize': 10, 'legend.fontsize': 8, 'axes.titlesize': 10,
'xtick.labelsize': 8,
'ytick.labelsize': 8, "pgf.rcfonts": False})
plt.rc('font', **{'family': 'serif', 'serif': ['Times']})
plt.rc('text', usetex=True)
fig = plt.figure()
ax = sns.heatmap(df, linewidths=.5)
fig.savefig('test.pdf')
fig.savefig('test.pgf')以及test.csv的内容:
0,1,2,3,4
1,1,1,1,1
2,2,2,2,2
3,3,3,3,3有没有人有一个解决方案,包括在pgf输出的颜色条?
发布于 2017-06-20 22:37:11
我在导出到pgf/tikz的库中发现了一些特性。
首先,在matplotlib中,四边形(即热图)被正确地导出到pgf,但是颜色条被导出为png ( op遇到了什么)。
我在matplotlib2tikz库中也尝试过同样的方法。在这种情况下,四边形被导出为一个png,但是颜色映射可以正确地导出。但是,如果您抑制热图,例如,通过将颜色映射绘制到单独的Axes并清除热映射轴,则颜色条将被导出为png。
因此,如果将两种出口的输出组合在一起,就可以两者兼得。
热图:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.DataFrame.from_csv("test.csv", sep=',')
sns.set('paper', 'white',
rc={'font.size': 10, 'axes.labelsize': 10,
'legend.fontsize': 8, 'axes.titlesize': 10,
'xtick.labelsize': 8,'ytick.labelsize': 8,
"pgf.rcfonts": False,
})
plt.rc('font', **{'family': 'serif', 'serif': ['Times']})
plt.rc('text', usetex=True)
fig, ax = plt.subplots(figsize=(6,6))
ax = sns.heatmap(df, linewidths=.5, ax=ax, cbar=False)
fig.savefig('heatmap_nocbar.pgf')请注意,我禁止用cbar=False绘制彩色条。
然后拿上彩色条:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from matplotlib2tikz import save as tikz_save
df = pd.DataFrame.from_csv("test.csv", sep=',')
sns.set('paper', 'white',
rc={'font.size': 10, 'axes.labelsize': 10,
'legend.fontsize': 8, 'axes.titlesize': 10,
'xtick.labelsize': 8,'ytick.labelsize': 8,
"pgf.rcfonts": False,
})
plt.rc('font', **{'family': 'serif', 'serif': ['Times']})
plt.rc('text', usetex=True)
fig, ax = plt.subplots()
ax = sns.heatmap(df, linewidths=.5, ax=ax, )
tikz_save('colormap.tex', figure=fig, strict=True)解决方案现在需要一些肮脏的工作。我知道这确实不是很好的做法,但这是我唯一能找到的方法。
在colormap.tex文件中,您需要删除除颜色映射所需的行之外的所有行。
colormap.tex的起源
\begin{tikzpicture}
\begin{axis}[
... % definition of axis: delete these lines
colorbar,
colormap={mymap}{[1pt]
...这样你就能得到这个
\begin{tikzpicture}
\begin{axis}[
hide axis,
colorbar,
colormap={mymap}{[1pt]
...在文件末尾,删除方括号结束和\end{axis}之间的所有内容。
]
... %delete these lines
\end{axis}文件中的此更改可以自动完成,我在github上的代码中包含了一个示例
在主tex文件中,可以添加这两个数字。
\input{heatmap_nocbar.pgf}
\input{colorbar.tex}如果您想要一个完整的示例和完整的输出,我已经将这个答案的所有内容都放在了github上。
对于您来说,这可能不是一个完美的答案,但我缺乏更深入地研究matplotlib和matplotlib2tikz后端的python技能,从而给出了一个更好的例子。
https://stackoverflow.com/questions/44649887
复制相似问题