Python 使用“savefig”时,PDF中的“matplotlib.imshow”插入的图像丢失`

Python 使用“savefig”时,PDF中的“matplotlib.imshow”插入的图像丢失`,python,matplotlib,jupyter-notebook,imshow,Python,Matplotlib,Jupyter Notebook,Imshow,我正在尝试插入图像以注释如下所示的图形: from matplotlib import offsetbox from matplotlib import pyplot as plt from matplotlib import rcParams rcParams["figure.dpi"] = 200 rcParams["figure.figsize"] = 4,3 alphaEndo = pd.read_csv('../data/UNIT_VOL_FRACTION.ENDO_DODECAHE

我正在尝试插入图像以注释如下所示的图形:

from matplotlib import offsetbox
from matplotlib import pyplot as plt
from matplotlib import rcParams

rcParams["figure.dpi"] = 200
rcParams["figure.figsize"] = 4,3
alphaEndo = pd.read_csv('../data/UNIT_VOL_FRACTION.ENDO_DODECAHEDRON.csv', comment="#")

fig, ax = plt.subplots()
ax.grid(False)

ax.set_ylabel("$\\alpha_c(s)$")
ax.set_xlabel("$s$")

colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

def plot_polyhedron(N, xScale, yScale, ax):
    img = plt.imread("../data/UNIT_VOL_ENDO_DODECAHEDRON_IMAGES/UNIT_VOL_ENDO_DODECAHEDRON.%04d.png" % N) 
    img = offsetbox.OffsetImage(img, zoom=0.07)
    img.image.axes = ax
    ab = offsetbox.AnnotationBbox(img, xy=(alphaEndo['S'].loc[N], alphaEndo['ALPHA_STAR'].loc[N]),
                                  xybox=(xScale*alphaEndo['S'].loc[N], yScale*alphaEndo['ALPHA_STAR'].loc[N]),
                                  frameon=False, arrowprops=dict(arrowstyle="Simple",facecolor=colors[0]),pad=False)
    ax.add_artist(ab)      

plot_polyhedron(5, 2, 0.6, ax)
plot_polyhedron(50,0.65, 0.35, ax)
plot_polyhedron(95, 0.7, 3, ax)
ax.plot(alphaEndo['S'], alphaEndo['ALPHA_STAR'], lw=2)


figBaseName = "ENDO_DODECAHEDRON_ALPHA_S"
fig.savefig(figBaseName + ".png")
fig.savefig(figBaseName + ".pdf")

if "GEOP" in os.environ:
    pathName = os.path.join(os.environ["GEOP"], "figures", figBaseName)
    fig.savefig(pathName + ".png")
    fig.savefig(pathName + ".pdf")
对于PNG文件,我得到以下结果:

但在PDF中,缺少多面体的小图像:


我发现缺少图像,但答案对我的情况没有帮助,因为我没有在“plt.savefig()”之前显式调用“plt.show()”,而是使用axes。代码来自Jupyter笔记本电脑的电池

请尝试此修改:

def plot_polyhedron(N, xScale, yScale, ax):
    img = plt.imread("../data/UNIT_VOL_ENDO_DODECAHEDRON_IMAGES/UNIT_VOL_ENDO_DODECAHEDRON.%04d.png" % N) 
    imagebox = offsetbox.OffsetImage(img, zoom=0.07)
    imagebox.image.axes = ax
    ab = offsetbox.AnnotationBbox(imagebox, xy=(alphaEndo['S'].loc[N], alphaEndo['ALPHA_STAR'].loc[N]),
                                  xybox=(xScale*alphaEndo['S'].loc[N], yScale*alphaEndo['ALPHA_STAR'].loc[N]),
                                  frameon=False, arrowprops=dict(arrowstyle="Simple",facecolor=colors[0]),pad=False)
    ax.add_artist(ab)   

很有趣,但是您是否介意提供一个,这样您就可以运行它并测试它失败的原因了?