matplotlib 导出pyplot历史图到illustrator有无限条

mwg9r5ms  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(191)

我正在将matplotlib直方图导出为矢量格式以便在illustrator中处理。这是我的操作方法

plt.savefig('figure.svg',format='svg',transparent=True)

但是,当我尝试在illustrator中复制图表时,我得到
can't paste the objects. The requested transformation would make some objects fall completely off the drawing area.

结果发现当我点击对象时,在illustrator中直方图条的长度是无限的。
我附上了复制错误的图:https://cmapreg.s3.us-east-2.amazonaws.com/figure.svg和屏幕截图。

1bqhqjot

1bqhqjot1#

∮问题是
这个问题看起来主要不是由对数比例引起的,而是由于改变了绘图的ylim。这会使绘图中原始框的长度保持不变,只会改变图中可见的"窗口"。以pdf格式导出到illustrator会给您原始框,在对数比例的特殊情况下,延伸到负无穷大。即使没有对数比例,盒子也会延伸到白色的数字画布之外。
例如:当以pdf格式导入到illustrator时,将产生上述错误:

plt.bar(np.arange(5), np.arange(5)+10, width=0.5, color='k')
plt.ylim(8, 16)
plt.show()

溶液1

一个可能的解决方案是在histbar中使用bottom参数,正如Jody的评论中提到的。问题是这会使方框向上移动。您可以通过从条形图值中减去bottom中的值或相应地更改y轴刻度来抵消这一点。
这不会产生误差,因为我们裁剪了ylim下方的柱:

bottom=8
x = np.arange(5)
y = np.arange(5)+10
plt.bar(x, y - bottom, width=0.5, color='k', bottom=bottom)
plt.ylim(8, 16)
plt.show()

它看起来和原来的情节完全一样,但没有导入问题。

溶液2

在最初的问题中,我们希望使用hist函数来绘制方框,我们需要使用第二个选项(不太优雅):因为我们不能直接调整框的高度,所以我们更改y轴标签。

plt.hist(np.random.uniform(0,5,100), width=0.5, color='k', bottom=bottom)
plt.ylim(bottom, 16 + bottom)
pl.yticks(np.arange(bottom, 16 + bottom), np.arange(0, 16))
plt.show()

(我知道这个问题是老问题了,但我在网上其他地方找不到任何解决方案。)

相关问题