【发布时间】:2018-12-16 23:01:21
【问题描述】:
鉴于下面的水平条形图(请注意修改后的 x 轴范围,从 6 开始而不是 0):
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
np.random.seed(19680801)
plt.rcdefaults()
fig, ax = plt.subplots(figsize=(3,2))
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
y_pos = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))
ax.barh(y_pos, performance, xerr=error, align='center',
color='green', ecolor='black')
ax.set_xlim((6,14)) #THIS IS THE KEY ISSUE
ax.set_yticks(y_pos)
ax.set_yticklabels(people)
ax.invert_yaxis() # labels read top-to-bottom
ax.set_xlabel('Performance')
plt.yticks(size=10)
ax.set_title('How fast do you want to go today?',size=10, fontname='Arial')
plt.tight_layout()
plt.savefig('image.svg')
当我尝试通过 svglib 将生成的 SVG 添加到 reportlab 时,如果我不修改 x 轴范围,它可以正常工作。但是,如果我添加具有修改范围的结果图表,则输出 PDF 中图表的条形将一直延伸到零。这在 matplotlib 的原始输出中不是问题,例如,如果我使用 PNG,则根本不会出现。
这是我用来通过 ReportLab 和 svglib 创建 PDF 的内容:
from reportlab.graphics import renderPDF
from reportlab.pdfgen import canvas
from svglib.svglib import svg2rlg
my_canvas = canvas.Canvas('svg_on_canvas.pdf')
drawing = svg2rlg('image.svg')
renderPDF.draw(drawing, my_canvas, 0, 40)
my_canvas.save()
提前致谢!
【问题讨论】:
-
这似乎是 svglib 或 reportlab 中的错误,会从输入 svg 中删除剪辑。
标签: python-3.x matplotlib svg reportlab