#python #numpy #seaborn
#python #тупой #сиборн
Вопрос:
Я работаю на python и пытаюсь изменить пределы диаграммы рассеяния. У меня есть следующий код:
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=[12, 11])
ax2a = sns.lmplot('LOC_X',
'LOC_Y',
data=curry_data,
fit_reg=False,
height=10,
aspect=2)
plt.title('Steph Curry shot attempt')
# Set x-axis label
plt.xlabel('LOC X')
# Set y-axis label
plt.ylabel('LOC Y')
# Set x/y limits and labels
ax2a.set(xlim=(-300,300),ylim=(-100,500))
plt.show()
Я получаю этот вывод, поэтому визуально ось была успешно изменена.
Однако при попытке запустить следующий код, чтобы убедиться, что диапазоны были изменены:
ax2a.axes.get_ylim()
ax2a.axes.get_xlim()
Я получаю следующие ошибки
AttributeError: 'numpy.ndarray' object has no attribute 'get_ylim'
AttributeError: 'numpy.ndarray' object has no attribute 'get_xlim'
Насколько я понимаю, я успешно изменил ограничения, однако я немного смущен тем, как подойти к этому для осей. Обычно я хочу построить диаграмму рассеяния и изменить границы осей диаграммы рассеяния. Как я могу сделать это так, чтобы при запуске последних двух строк кода я не получал ошибку и возвращал надлежащие ограничения? насколько я понимаю, код, который я запустил, должен был изменить оси.
Комментарии:
1. Некоторые из способов, которые вы установили
ax2a.axes
, чтобы быть массивом numpy, когда он должен бытьaxes
объектом плоттера. Массив не имеет методов построения, таких какget_ylim
.
Ответ №1:
Вы используете lmplot()
, который использует a FacetGrid
для отображения «набора данных на несколько осей, расположенных в сетке строк и столбцов, которые соответствуют уровням переменных в наборе данных». (цитируется по документации).
Свойство FacetGrid.axes
всегда является 2D-массивом подзаголовка Axes
, даже если FacetGrid имеет только один график. Поэтому, чтобы получить доступ к подзаголовку, вам необходимо выполнить
ax2a.axes[0,0].get_xlim()
При этом, если вам не нужны функции, предоставляемые a FacetGrid
, вам было бы лучше использовать более простой sns.regplot()
, или sns.scatterplot()
, поскольку вы, похоже, тоже не заинтересованы в регрессии. Эти функции воздействуют на текущие оси и возвращают объект Axes напрямую.
Комментарии:
1. Хорошо, но как я могу настроить диаграмму рассеяния, чтобы при запуске ax2a.axes.get_xlim () она возвращала ограничение. По сути, я хотел бы изменить свою диаграмму рассеяния, чтобы ax2a.axes.get_xlim () работал и ax2a.axes.get_ylim () также работал
2.
ax2a = sns.scatterplot(...); ax2a.set_xlim(-300,300); ax2a.get_xlim()
3. Большое вам спасибо, использование функции диаграммы рассеяния сделало свое дело