seaborn

时间:2017-06-01 09:15:17

标签: python matplotlib seaborn eps

上下文
我想提交论文的期刊仅接受.tiff(不适用于LaTeX),.jpg(不适合图表)和.eps(不适用于alpha透明度,除非我光栅化图像,这会导致巨大的文件大小)。我的许多情节使用了seaborn的regplot,它绘制了透明的置信区间。是否可以在不完全手动重新执行所有图形的情况下绘制非透明CI(例如,虚线或背景中的纯色)?

示例:

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

sns.set_style("ticks")
np.random.seed(0)
n = 50

fig, ax = plt.subplots(figsize=(8,6))

x = np.random.randn(n)
y1 = np.random.randn(n)
y2 = np.random.randn(n)

sns.regplot(x, y1, ax=ax)
sns.regplot(x, y2, ax=ax)

plt.show()

Example of a regplot with transparent overlapping confidence intervals

将此保存为.eps文件而不丢失重叠置信区间信息的最简单/最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

问题是您需要透明度来显示两个置信区间重叠。人们需要光栅化图像。

如果期刊接受,我实际上并没有看到使用jpg的问题。您可以使用

控制图像的质量
plt.savefig(__file__+".jpg", quality=95)

使用eps也是可能的,在这里,您可以仅栅格化置信区间fill_between - 曲线,而不是栅格化所有内容。优点是轴,标签和点仍然是vecor图形,并且在不同的缩放级别上看起来不会像素化。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import PolyCollection as p
import seaborn as sns

sns.set_style("ticks")
np.random.seed(0)
n = 50

fig, ax = plt.subplots(figsize=(8,6))

x = np.random.randn(n)
y1 = np.random.randn(n)
y2 = np.random.randn(n)

sns.regplot(x, y1, ax=ax)
sns.regplot(x, y2, ax=ax)

plt.savefig(__file__+".jpg", quality=95)
for c in ax.findobj(p):
    c.set_zorder(-1)
    c.set_rasterized(True)
#everything on zorder -1 or lower will be rasterized
ax.set_rasterization_zorder(0)

plt.savefig(__file__+".eps")
plt.savefig(__file__+".png")
plt.show()

最终的eps文件如下所示:
enter image description here

虽然文件大小当然有点大,但我不确定这是否是一个真正的问题。