Мне нужно создать последовательность файлов .pdf, где каждый файл .pdf содержит фигуру с пятью графиками.
Поскольку я собираюсь включить их в статью о LaTeX, я хотел, чтобы все они были одинаковой ширины и высоты, чтобы углы каждой фигуры были выровнены по вертикали как с левой, так и с правой стороны.
Я думал, что этого будет достаточно, но, видимо, нет:
common_figsize=(6,5)
fig, ax = plt.subplots(figsize = common_figsize)
# five plots in a loop for the first figure.
# my_code()...
plt.savefig("Figure-1.pdf", transparent=True)
plt.close(fig)
fig, ax = plt.subplots(figsize = common_figsize)
# five plots in a loop for the new figure.
# my_code()...
plt.savefig("Figure-2.pdf", transparent=True)
plt.close(fig)
Если я правильно понимаю, это не совсем то, что я хочу из-за разных масштабов, возникающих при разных разрешениях yticks.
Для обоих рисунков pyplot получает один и тот же список для xticks.
В данном случае это список из 50 значений, от 1 до 50.
CHUNK_COUNT = 50
x_step = CHUNK_COUNT / 10
new_xticks = list(range(x_step, CHUNK_COUNT + x_step, x_step)) + [1]
plt.xticks(new_xticks)
ax.set_xlim(left=1, right=CHUNK_COUNT)
Это создает обе фигуры с осью X, которая идет от 1 до 50.
Пока все хорошо.
Однако я так и не понял, как справиться с проблемой разрешения утиков.
У одной из фигур было yticks
меньше, чем у другой, поэтому я переопределил ее, чтобы иметь столько тиков, сколько у другой:
# Add yticks to Figure 1.
y_divisor = 6
y_step = (100 - min_y_tick) / y_divisor
new_yticks = [min_y_tick + y_step * i for i in range(0, y_divisor + 1)]
plt.yticks(new_yticks)
Это привело к следующим изображениям:
(нажмите на каждую, чтобы открыть в новой вкладке, чтобы увидеть, что на самом деле ограничивающий квадрат каждой фигуры отличается)
Рисунок 1:

Рисунок 2:

Таким образом, я считаю, что matplotlib принимает параметр figsize
, но затем перераспределяет элементы графика для соответствия разным значениям тиков и длины текста.
Возможно ли, чтобы он работал в обратном порядке? Чтобы изменить метки и повороты текста автоматически , чтобы квадраты были абсолютно одинаковой длины и высоты?
Извините, если это дубликат, и спасибо за помощь.
EDIT:
Наконец-то удалось представить минимальный, полный и проверяемый пример.
Среди тестов я удалил пользовательский код yticks
, и проблема все еще сохраняется:
from matplotlib.lines import Line2D
import matplotlib.ticker as mtick
import matplotlib.pyplot as plt
from matplotlib import rc
# activate latex text rendering
rc('text', usetex=True)
from matplotlib import rcParams
rcParams.update({'figure.autolayout': True})
CHUNK_COUNT = 50
common_figsize=(6,5)
plot_counter = 5
x_step = int(int(CHUNK_COUNT) / 10)
new_xticks = list(range(x_step, int(CHUNK_COUNT) + x_step, x_step)) + [1]
##### Plot Figure 1
fig, ax = plt.subplots(figsize = common_figsize)
plt.ylabel("Summary of a simple YY axis")
plt.yticks(rotation=45)
ax.yaxis.set_major_formatter(mtick.PercentFormatter(is_latex=False))
for i in range(0, plot_counter):
xvals = range(1, CHUNK_COUNT + 1)
yvals = []
for j in xvals:
yvals.append(j + i)
plt.plot(xvals, yvals)
plt.xticks(new_xticks)
ax.set_xlim(left=1, right=int(CHUNK_COUNT))
plt.savefig("Figure_1.png", transparent=True)
plt.close(fig)
##### Plot Figure 2
fig, ax = plt.subplots(figsize = common_figsize)
plt.ylabel("Summary of another YY axis")
plt.yticks(rotation=45)
ax.yaxis.set_major_formatter(mtick.PercentFormatter(is_latex=False))
for i in range(0, plot_counter):
xvals = range(1, CHUNK_COUNT + 1)
yvals = []
for j in xvals:
yvals.append((j + i) / 100)
plt.plot(xvals, yvals)
plt.xticks(new_xticks)
ax.set_xlim(left=1, right=int(CHUNK_COUNT))
plt.savefig("Figure_2.png", transparent=True)
plt.close(fig)