Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python seaborn模型的非透明置信区间_Python_Matplotlib_Seaborn_Eps - Fatal编程技术网

Python seaborn模型的非透明置信区间

Python seaborn模型的非透明置信区间,python,matplotlib,seaborn,eps,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.s

上下文:
我想提交论文的杂志只接受
.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()


在不丢失重叠置信区间的信息的情况下,将其保存为.eps文件的最简单/最佳方法是什么?

问题在于,您需要透明度来显示重叠的两个置信区间。需要对图像进行光栅化处理

如果《华尔街日报》接受jpg,我实际上看不出使用它有什么问题。您可以使用以下命令控制图像质量:

plt.savefig(__file__+".jpg", quality=95)
使用eps也是可能的,在这里,您可以只光栅化-曲线之间的置信区间
fill\u,而不是光栅化所有内容。其优点是轴、标签和点仍然是矢量图形,在不同的缩放级别上看起来不会像素化

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文件如下所示:


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

哦,我不知道你只能光栅化图像的一部分。那太好了。谢谢该杂志对文件大小要求非常严格,这就是为什么我不想使用大部分未压缩的JPG。对于首次提交,我使用了一种变通方法,用虚线替换seaborn源代码中的
fill_-between
部分,但您的解决方案看起来更加优雅。PS为什么您要比较该类型的字符串repr而不是使用
isinstance
?此外,我认为matplotlib轴有一个函数可以返回给定类型的所有美工人员,但我忘记了它的名称。@mwaskom您指的函数名为
ax.findobj
。我只是太懒了,从输出中复制了str repr。但我现在改了。关于jpg,它当然不理想,但是如果jpg的质量足够高,png和jpg之间就没有什么区别。你将始终需要遵守《华尔街日报》的要求,不管这些要求是否合理。