我正在尝试重新创建此网站上的图表:https://bumps.live/torpids/2022。我正在使用 matplotlib,但在绘制徽标时遇到了问题,我用下面的 MWE 重新创建了徽标。我正在绘制两个彼此相邻的半圆,当它们与轴的大小相同时,结果与预期一致,但是当它们小得多时,就会损失精度,并且半圆不再占据一半的空间一个圆圈。下面两幅图中两个半圆的半径都是0.1,但第一幅图的轴限制为-0.15到0.15,第二幅图的轴限制为-10到10(我放大了右图)。当使用 plt.show 并放大时,不会出现此问题。
我猜测 matplotlib 已经将楔形定义到了适当的准确度,假设没有人放大太多,尽管当我放大时,这还不够。我询问了 ChatGPT,它建议将
resolution=100
kwarg 添加到我的楔子中,但这似乎已被弃用或出现错误。我正在使用 python 3.12.3 和 matplotlib 3.9.1.post1。我需要制作大约 350 个徽标,如果性能足够好作为备份计划,我愿意将它们添加为 SVG,但理想情况下我想了解如何解决此问题。
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge
fig, ax = plt.subplots(figsize=(5, 5))
radius = 0.1
left_semicircle = Wedge((0, 0), radius, 0, 180, color="r")
right_semicircle = Wedge((0, 0), radius, 180, 360, color="b")
ax.add_patch(left_semicircle)
ax.add_patch(right_semicircle)
axis_limit = 0.15
axis_limit = 10
ax.set_xlim((-axis_limit, axis_limit))
ax.set_ylim((-axis_limit, axis_limit))
ax.set_aspect('equal')
plt.savefig(f"TwoSemicircles_{axis_limit}.pdf")
设置颜色时,您同时设置了面颜色(形状内部的颜色)和边缘颜色(轮廓的颜色)。 然后,Matplotlib 以默认线宽 1 磅绘制轮廓。 该线宽被保留用于
plt.show
中的交互式缩放,但在 pdf 中,线宽是页面大小的固定比例。 相反,你应该只是设置面部颜色
left_semicircle = Wedge((0, 0), radius, 0, 180, facecolor="r")
right_semicircle = Wedge((0, 0), radius, 180, 360, facecolor="b")
然后 Matplotlib 不会绘制边缘。
这看起来像是 matplotlib 中的一个错误,中心的坐标首先转换为图形空间,这适用于 jpg 和 png,但由于 pdf(和 svgs)接受浮动坐标,这种转换会导致准确性损失。
您可以将
figsize
做得更大(例如20,20而不是5,5),这将部分解决您的问题,但我不确定其含义,您可能需要调整许多东西的大小,例如轴以及任何标签。