#python #matplotlib
#python #matplotlib
Вопрос:
На этом рисунке у меня длинный заголовок вверху.
Я хочу поместить заголовок, не сжимая фигуру (сохранить в виде квадрата).
Можем ли мы добавить пробел слева и справа, сохраняя фигуру квадратной, а заголовок вверху?
from matplotlib import pyplot as plt
import numpy as np
title='A long sentence as a title'
fig= plt.figure(figsize=(12, 12), dpi=100)
plt.title(title, fontsize=75, pad=40, loc='center',fontweight='semibold')
plt.tick_params(axis='y', which='major', labelsize=75, width=3, length=10)
plt.tick_params(axis='y', which='minor', labelsize=75, width=3, length=10)
plt.style.use('ggplot')
ax = plt.gca()
ax.set_facecolor('white')
for edge_i in ['left']:
ax.spines[edge_i].set_edgecolor("black")
ax.spines[edge_i].set_linewidth(3)
# This code draws line only between [0,1]
ax.spines[edge_i].set_bounds(0, 1)
width = 0.9 # the width of the bars
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
plt.yticks(np.arange(0, 1.01, step=0.2))
plt.bar(x, y, width, color='violet', edgecolor="black", linewidth=3, zorder=1)
plt.ylim(-0.01, 1.01)
plt.tick_params(
axis='x', # changes apply to the x-axis
which='both', # both major and minor ticks are affected
bottom=False, # ticks along the bottom edge are off
top=False, # ticks along the top edge are off
labelbottom=False) # labels along the bottom edge are off
plt.show()
Ответ №1:
Это может сработать, чтобы сохранить квадрат графика, но я (по крайней мере) не вижу, как не идти на компромисс ни с «длиной заголовка», ни с «размером шрифта», ни с «размером рисунка» и при этом достичь желаемого конечного результата.
Я только что добавил этот приведенный ниже фрагмент кода в ваш код, чтобы получить результирующую фигуру
box = ax.get_position()
print('Width and height before resizing: ', box.width, box.height)
offset = 0.05
box_dim = max(box.width * (1.0 - 2*offset), box.height * (1.0 - 2*offset))
# shift the box along x-axis and then resize to maintiain aspect ratio
ax.set_position([box.x0 offset * box.width, box.y0, box_dim, box_dim])
box = ax.get_position()
print('Width and height after resizing: ', box.width, box.height)
Вывод
Width and height before resizing: 0.775 0.77
Width and height after resizing: 0.6975 0.6975
Комментарии:
1. К сожалению, это не помогает. Заголовок по-прежнему не отображается. Есть ли способ сделать это, возможно, изменив размер фигуры? Дело в том, что есть и другие похожие цифры, я хочу, чтобы размер рисунка и размер шрифта заголовка были одинаковыми среди других файлов рисунков.
2. Изменение размера фигуры сделает это, я не публиковал это решение, предполагая, что у вас тоже есть ограничения на это
3. Создание размера фигуры (16,16) работает, но на этот раз заголовок будет меньше, чем другие цифры. Я ищу решение для добавления пространства слева и справа в качестве дополнительного пространства.
4. Я не уверен, что смогу помочь с этим. Может быть, вы можете подождать, пока кто-нибудь еще ответит!
Ответ №2:
Вы можете настроить его, используя plt.text()
вместо plt.title()
.
title='A long sentence as a title'
fig= plt.figure(figsize=(12, 12), dpi=100)
# plt.title(title, fontsize=75, pad=40, loc='center',fontweight='semibold')
plt.text(-5.5,1.1, title, fontsize=55, fontweight='semibold')
plt.tick_params(axis='y', which='major', labelsize=55, width=3, length=10)
plt.tick_params(axis='y', which='minor', labelsize=55, width=3, length=10)
Комментарии:
1. Нет ли способа поместить пробел слева и справа, чтобы нам не нужно было уменьшать размер шрифта?
2. Я изменил код, понимая, что левое и правое поля являются обеими сторонами графика. Я также установил текст заголовка слева.