#python
#питон
Вопрос:
Я просматриваю пример Titanic в Kaggle, и я просто хотел спросить о Python — я искал это, но, похоже, ничего не нашел.
Допустим, у меня есть фрейм данных со столбцами, которые содержат числовые и категориальные данные. Я пытаюсь создать 3 подзаголовка, каждый из которых отображает эти данные. Что — то вроде этого:
fig, ax = plt.subplots(3,1, figsize=(20,20))
ax[0].hist(train_data['Age'])
ax[1].scatter(train_data.PassengerId,train_data.Cabin)
ax[2].scatter...
У меня нет проблемы с созданием этих графиков отдельно, pyplot отображает строки в номерах Cabin vs PassengerId, но он просто не может справиться с построением их на одном рисунке. Даже зацикливание и создание новых фигур для каждого графика, похоже, не работает.
Я делаю что-то не так, или это то, как работает pyplot? «Устанавливает» ли он тип данных в первой строке кода? Могу ли я использовать какой-то метод .astype() для решения этой проблемы?
Комментарии:
1. Что вы имеете в виду, говоря, что matplotlib «не может справиться с построением их на одной фигуре» — что происходит по сравнению с тем, что вы ожидаете? Судя по вашему описанию, вполне вероятно, что вы делаете что-то не так, но описания недостаточно, чтобы можно было сказать наверняка.
Ответ №1:
Я не совсем уверен, что вы пытаетесь сделать, но построение разных объектов на разных панелях фигуры (или разных объектов на одной панели) — это то, что можно легко сделать с помощью matplotlib. Смотрите пример ниже, используя копию данных titanic от seborn (в нем также показано, как использовать seaborn для простого создания статистических графиков).:
import matplotlib.pyplot as plt
import seaborn as sns
titanic = sns.load_dataset('titanic')
fig, ax = plt.subplots(3, 1, figsize=(8, 10))
ax[0].hist(titanic['age'])
ax[1].scatter(titanic.age, titanic.fare)
sns.pointplot(x='class', y='survived', data=titanic, hue='sex', axis=ax[2])
Это изображение, которое вы должны увидеть (при условии, что у вас установлен seaborn).:
Комментарии:
1. Это именно то, что я пытался сделать. Но я вижу, что вы используете sns. Для построения категориальных данных. Я имел в виду, что ваша строка sns.pinplot() была [2].scatter(), и это не работает. Если я строю только категориальные данные, скажем, просто использую plt.plot() на одном рисунке, это работает.
2. Под «не работает» вы подразумеваете, что получаете сообщение об ошибке? Если вы хотите распределить текстовые данные по диаграмме рассеяния, вы должны получить сообщение об ошибке, потому что это не совсем точно определено. Для работы с такими категориальными данными использование seaborn является хорошим решением — оно фактически использует matplotlib под капотом, но избавляет вас от некоторых проблем.
3. Вы можете увидеть больше примеров использования seaborn здесь: seaborn.pydata.org/examples/index.html
4. Итак, я понятия не имею, что я делал раньше, потому что не могу воссоздать это заново. Я на 100% не использовал sns, я использовал только plt. Я создал одну фигуру, где по оси y были имена всех названий кают, а по x — номер пассажира.