Seaborn relplot(): не удается изменить положение субтитров по y

#python #matplotlib #plot #seaborn

#python #matplotlib #сюжет #seaborn

Вопрос:

Итак, я создаю relplot и хочу, чтобы заголовки (a, b, c, d, e, f) были под каждым подзаголовком, но не могу этого сделать. На самом деле, я вообще не могу переместить заголовок по оси y. Пример кода выглядит следующим образом:

 g = sns.relplot(x="X", y="Y",
                hue="Label", palette=palette,
                col='Dataset', col_wrap=3,
                legend='full', height=4, aspect=1,
                kind="scatter", data=data, facet_kws={'sharex': False, 'sharey': False},
                s=15
                )
for ax in g.axes.flat:
    ax.set_ylabel('')
    ax.set_xlabel('')
    ax.set_xticklabels([])
    ax.set_yticklabels([])
for ax, title in zip(g.axes.flat, ['a', 'b', 'c', 'd', 'e', 'f']):
    ax.set_title(title)
    ax.title.set_position([0.3, -0.01])
sns.despine(top=False, right=False, left=False, bottom=False, offset=None, trim=False)
plt.show()
  

И это создает изображение, подобное этому:
Изображение
Изменение -0.01 (аргумент y) в ax.title.set_position([0.3, -0.01]) ничего не делает, однако изменение 0.3 (аргумент x) перемещает заголовок вдоль оси x…

Также пытался передать kwargs x и y в ax.set_title(): та же история, x работает, y ничего не делает.

Есть мысли?

Комментарии:

1.В новейшем API set_title matplotlib 3.3.1 есть y аргумент для настройки расположения вертикальных осей для заголовка. Судя по исходному коду, я думаю, что это y именно тот текст y .

2. Если я не задам y аргумент в set_title() , y in set_position() не будет работать так, как вы описываете, даже если print(ax.title) сообщает, что он вычислен. Интересно, что если я установлю y в set_title() , y установленный в set_position() вступит в силу. Я не смог найти ничего полезного в исходном коде, вы можете сообщить об ошибке в matplotlib.

3. Вы могли бы использовать ax.set_title(title, x=0.3, y=0.92) для настройки положения заголовка, хотя я все еще не понимаю, почему ax.set_title(title, position=[0.3, 0.92]) это не работает. На этот раз y даже не изменен.

4. @Ynjxsjmh Извините, я не совсем понимаю: вам удалось изменить положение y текста или нет? Поскольку я вообще не могу это изменить, любое число, которое я пытаюсь использовать для аргумента y, результат один и тот же.

5. @Ynjxsjmh Что касается новейшего пакета matplotlib, боюсь, у него некоторые проблемы с совместимостью с seaborn, потому что, когда я его установил, я вообще не смог заставить этот код выводить что-либо, вызвав ошибку. Я использую Anaconda, поэтому моя версия matplotlib не самая новая.