2024-06-07 16:50:11 发布
网友
如何将matplotlib绘图作为emf或wmf文件在msoffice(Word和PowerPoint)中用作矢量图形?在
我尝试过使用Inkscape和LibreOffice Draw导出到svg并转换为emf,但是这两个选项似乎都会导致图像质量的损失,从而导致光栅图像。在
我也尝试过导出为pdf并转换为emf/wmf,但也有相同的问题。在
下面是我创建WMF和SVG的解决方案。您可以安装Inkscape并使用以下类,'SaveAndClosePlot'创建SVG,然后使用它转换为WMF的Inkscape。TestPlot函数可以根据您的需要进行定制。在
import os from pathlib import Path from ConfigParserM import logging import subprocess from matplotlib import pyplot as plt class SVG_WMF_Plot: def __init__(self): self.__folderNameGraph = 'Graphs' self.__WMF_SVGSaving = True self.__inkScapePath = "C://Program Files//inkscape//inkscape.exe" self.__figureDPI = 500 def getRootDirectory(self): try: return Path(os.path.dirname(os.path.realpath('__file__'))) except Exception as e: logging.exception(e) raise def getAddressTo(self, Main=None, FolderName=None, FileName=None, Extension=None): try: if Main is None: Main = self.getRootDirectory() if FolderName: Path1 = Path(Main) / Path(FolderName) else: Path1 = Path(Main) if not os.path.exists(Path1): os.makedirs(Path1) if FileName: if Extension: File_Address = Path1 / Path(FileName + "." + Extension) else: File_Address = Path1 / Path(FileName) else: File_Address = Path1 return File_Address except Exception as e: logging.exception(e) raise def TestPlot(self): try: fig, ax1 = plt.subplots() x = [1, 2] y = [1, 2] F1 = 'test' ax1.plot(x, y) self.SaveAndClosePlot(folderName=self.__folderNameGraph, fileName=F1) except Exception as e: logging.exception(e) raise def SaveAndClosePlot(self, folderName, fileName): try: Address = self.getAddressTo(FolderName=self.__folderNameGraph + f"\{folderName}", FileName=fileName, Extension="jpg") plt.savefig(Address, format='jpg', dpi=self.__figureDPI, bbox_inches='tight') if self.__WMF_SVGSaving: Address = self.getAddressTo(FolderName=self.__folderNameGraph + f"\{folderName}", FileName=fileName, Extension="svg") plt.savefig(Address, format='svg', dpi=self.__figureDPI, bbox_inches='tight') # add removing SVG if needed AddressWMF = self.getAddressTo(FolderName=self.__folderNameGraph + f"\{folderName}", FileName=fileName, Extension="wmf") subprocess.call([self.__inkScapePath, str(Address.resolve()), ' export-wmf', str(AddressWMF.resolve())]) plt.clf() plt.close() except Exception as e: logging.exception(e) raise
下面是我创建WMF和SVG的解决方案。您可以安装Inkscape并使用以下类,'SaveAndClosePlot'创建SVG,然后使用它转换为WMF的Inkscape。TestPlot函数可以根据您的需要进行定制。在
相关问题 更多 >
编程相关推荐