Как поместить длинный заголовок вверху, не сжимая фигуру?

#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. Я изменил код, понимая, что левое и правое поля являются обеими сторонами графика. Я также установил текст заголовка слева.