matplotlib绘图时插入图片,输出结果保存为.svg,再用inkscape转成.emf,背景变黑的解决办法

期刊要求提供矢量图,并给出常用软件绘制的图文件插入Word文档方法参考:“matplotlib:保存为svg格式,再用inkscape转成emf格式,在word中插入图片——选择emf格式的文件。”

于是我采用如下代码绘图:

import matplotlib.pyplot as plt
from PIL import Image

fig = plt.figure(figsize=(6, 3), dpi=100)
ax = fig.add_subplot(111)
# 横纵坐标范围
MaxX, MaxY = 10, 5
plt.xlim(0, MaxX)
plt.ylim(0, MaxY)
# 加载图片
img_test = Image.open('测试图片.png')
# 指定位置放置图片
ax.imshow(img_test, extent=(1, 2, 3, 4))    # extent为图片位置范围(左x,右x,下y,上y)
ax.imshow(img_test, extent=(8, 9, 2, 3))
ax.imshow(img_test, extent=(4, 6, 1, 3))
# 结果显示
plt.tight_layout()
plt.savefig('test.svg', format='svg')
plt.show()

输出.svg图片在inkscape中打开如下所示:

然而转换成.emf图片后,插入word,变成这个鬼样子:

 原代码是图fig中插入子图ax,然后在子图ax的指定位置插入图片。现将代码修改为在子图ax的指定位置再插入子图(去掉子图的边框和坐标轴),将这个子图的背景填充为图片,代码如下(只修改了中间图片的插入方式):

import matplotlib.pyplot as plt
from PIL import Image

fig = plt.figure(figsize=(6, 3), dpi=100)
ax = fig.add_subplot(111)
# 横纵坐标范围
MaxX, MaxY = 10, 5
plt.xlim(0, MaxX)
plt.ylim(0, MaxY)
# 加载图片
img_test = Image.open('测试图片.png')
# 指定位置放置图片
ax.imshow(img_test, extent=(1, 2, 3, 4))    # extent为图片位置范围(左x,右x,下y,上y)
ax.imshow(img_test, extent=(8, 9, 2, 3))
# ax.imshow(img_test, extent=(4, 6, 1, 3))
# 修改后的图片插入方式
SIZE = 2    # 图片大小
temp_axes = ax.inset_axes([4 / MaxX, 1 / MaxY, SIZE / MaxX, SIZE / MaxY])   # 按比例确定位置
temp_axes.imshow(img_test)
temp_axes.axis('off')   # 关闭轴线和标签
# 结果显示
plt.tight_layout()
plt.savefig('test.svg', format='svg')
plt.show()

 再次用inkscape转换成.emf图片,插入word,如下所示:

 可以看出中间图片的转换已经没有问题了。

希望能有大佬给解释一下原理,或者提供更好的方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值