gpt4 book ai didi

python - Matplotlib 输出为 PDF 用于 Corel Draw

转载 作者:太空宇宙 更新时间:2023-11-04 00:50:00 24 4
gpt4 key购买 nike

更新:字体问题实际上是通过使用 rc("pdf", fonttype=42) 解决的,但不幸的是它与另一个结合使用 - 无论何时使用我尝试过的任何类型的标记 CorelDraw 附带错误“文件已损坏”。

当我将我的图表从 Matplotlib 输出为 PDF 时,我无法在 Corel Draw 中打开它。我高度怀疑主要问题可能出在文本/字体上。

我需要更新的简单代码示例,以便在 Corel Draw 中正确导入带有文本和标记的 PDF:

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
from matplotlib import rc
rc("pdf", fonttype=42)

with PdfPages("simple.pdf") as pdf:
points_y = points_x = [1,2,3]
plt.plot(points_x, points_y, marker="o")
pdf.savefig()
plt.close()

未使用 rc("pdf", fonttype=42) 和标记时,Corel 与 Matplotlib/PDF 阅读器的示例。如果使用标记的 PDF 无法打开并且 CorelDraw 显示“文件已损坏”。 Example of Corel vs Matplotlib / PDF Reader

最佳答案

事实证明,有两个重要问题会破坏将 Matplotlib 生成的 PDF 导入 CorelDraw 的过程。

  1. 设置字体类型从默认的 rc("pdf", fonttype=3)rc("pdf", fonttype=42)
  2. 不使用多个标记。每个地 block 只允许一个标记!可以用文本替换。(没有 pyplot.scatter,不在 pyplot.plot 等中)。当每个绘图使用 2 个或更多数量的任何标记时,CorelDraw 发现 PDF 已损坏并且根本无法打开它。

重写代码以在每个图上仅绘制一个标记,在图例中仅绘制一个标记:

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
from matplotlib import rc
rc("pdf", fonttype=42)

with PdfPages("simple.pdf") as pdf:
points_y = points_x = [1,2,3]
plt.plot(points_x, points_y,color="r")
# plot points one be one otherwise "File is corrupted" in CorelDraw
# also plot first point out of loop to make appropriate legend
plt.plot(points_x[0], points_y[0],marker="o",color="r",markerfacecolor="b",label="Legend label")
for i in range(1,len(points_x)):
plt.plot(points_x[i], points_y[i],marker="o",markerfacecolor="b")
plt.legend(numpoints=1) #Only 1 point in legend because in CorelDraw "File is corrupted" if default two or more
pdf.savefig()
plt.close()

作为点(标记)的可能替代品,可以使用 pyplot.text,对于我所讨论的示例,更新后的代码如下所示:

from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
from matplotlib import rc
rc("pdf", fonttype=42)

with PdfPages("simple.pdf") as pdf:
points_y = points_x = [1,2,3]
plt.plot(points_x, points_y)
# print points as + symbol
for i in range(len(points_x)):
plt.text(points_x[i], points_y[i],"+",ha="center", va="center")
pdf.savefig()
plt.close()

关于python - Matplotlib 输出为 PDF 用于 Corel Draw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37538040/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com