Изменение меток оси x на графике панели ошибок: без атрибута 'get_xticklabels' - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь построить некоторые данные, основная информация о графике которых равна

ax1 = plt.errorbar(df1.index, df1['Mean'],
               yerr=df1['SD'], color='black', linestyle='-')
ax2 = plt.errorbar(df2.index, df2['Mean'],
               yerr=df2['SD'], color='grey', linestyle='-')

Проблема в том, что каждый индекс фрейма данных составляет 5% приращения целого (т. Е. Индекс df1 равен 0,5,10 ...100 как и df2) в результате сюжет пытается втиснуть 40 меток по оси x

Я пробовал несколько разных подходов, но пока ни один из них не сработал.Например, пытаясь повернуть метки и уменьшить размер шрифта, например:

plt.setp(ax1.get_xticklabels(), rotation='vertical', fontsize=7)

возвращает

AttributeError: 'ErrorbarContainer' object has no attribute 'get_xticklabels'

Я получаю ту же ошибку, если пытаюсь изменить ось x у ax1 и ax2используя tick_params

Я думаю, что это может быть потому, что график видит ось X как категоричную, но я не знаю, как это исправить?

В идеале я хотел бы просто показатьметки 0, 25, 50, 75 и 100% для ax1 и ax2, но в этот момент я был бы рад просто повернуть их, чтобы они выглядели лучше.

1 Ответ

0 голосов
/ 04 октября 2018

Проблема в том, что вы используете дескриптор графика (из errorbar), а не дескриптор оси.Есть два способа получить дескриптор оси:

  1. При создании фигуры (или фактически оси).
  2. В любой момент вы можете получить дескриптор текущей осииспользование plt.gca().

Пример:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.errorbar([0,1,2], [0,1,2], yerr=[.01,.05,.1])
ax.errorbar([0,1,2], [0,2,4], yerr=[.01,.05,.1])

plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=7)

plt.show()

Это приведет к:

enter image description here

Если вы хотите использовать ручку текущей оси, вы также могли бы использовать:

plt.setp(plt.gca().get_xticklabels(), rotation='vertical', fontsize=7)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...