В соответствии с примером, показанным в violinplot
документации следующего примера:
ax = sns.violinplot (x = "day", y = "total_bill"), data = tips)
Вы можете напрямую назначить нужные столбцы по оси x, указав имя столбца в x=
и ось y в параметре y=
.В следующем коде показана структура данных переменной tips
.
In [ ]: tips.head()
Out[ ]:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
Ваш вопрос заключается в построении графика с использованием violinplot
, с осью X для отображения ufo.State
и осью Y для отображения ufo.Year
,Поэтому я считаю, что ufo.State.value_counts()
не требуется, или даже groupby
, поскольку данные ufo
уже хорошо описаны и соответствуют формату параметров скрипки.
Выможет достичь этого, напрямую поставляя ufo.columnName
в x=
и y=
.См. Код ниже:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
ufo = pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')
ufo.head()
City Colors Reported Shape Reported State \
0 Ithaca NaN TRIANGLE NY
1 Willingboro NaN OTHER NJ
2 Holyoke NaN OVAL CO
3 Abilene NaN DISK KS
4 New York Worlds Fair NaN LIGHT NY
Time Year
0 1930-06-01 22:00:00 1930
1 1930-06-30 20:00:00 1930
2 1931-02-15 14:00:00 1931
3 1931-06-01 13:00:00 1931
4 1933-04-18 19:00:00 1933
ufo.Time = pd.to_datetime(ufo.Time)
ufo['Year'] = ufo.Time.dt.year
fig, ax = plt.subplots(figsize=(12,8))
ax = sns.violinplot(x=ufo.State, y=ufo.Year)
# ax = sns.violinplot(x='State', y='Year', data=ufo) # Works the same with the code one line above
plt.show()