Учитывая эту горизонтальную гистограмму ниже (, обратите внимание на измененный диапазон оси 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')
Когда я пытаюсь добавить результирующееSVG для reportlab через svglib, он отлично работает, если я не изменяю диапазон оси x.Однако, если я добавлю получившуюся диаграмму с измененным диапазоном, столбцы диаграммы в выходном PDF-файле расширятся до нуля.Это не проблема в исходном выводе matplotlib и не возникает вообще, если я использую PNG, например.
Вот что я использую для создания PDF через ReportLab и svglib:
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()
Заранее спасибо!