我正在学习熊猫,(看these helpful videos)并且正在玩一个不明飞行物的目击桌
import pandas as pd
ufo = pd.read_csv('https://raw.githubusercontent.com/justmarkham/pandas-videos/master/data/ufo.csv')
ufo.head()
ufo.Time = pd.to_datetime(ufo.Time)
ufo['Year'] = ufo.Time.dt.year
ufo.head()
现在,我想使用Seaborn为每个状态(在x轴上)和年份(在y轴上)制作violinplot。因此,该图显示了在任何给定年份任何给定年份的目击频率密度。
如果我使用
ufo.State.value_counts()
我可以获得每个州的所有罪名的熊猫系列。但是,如何按年分隔这些数据呢?我不知何故需要每个州每年获得不明飞行物的数据吗?
我是否正在创造一个Seaborn小提琴情节?还是走错了路?
答案 0 :(得分:2)
根据以下示例的violinplot
文档中显示的示例:
ax = sns.violinplot(x =" day",y =" total_bill",data = tips)
您可以通过将列名称x=
和y轴提供给y=
参数,将所需的列直接分配到x轴。以下代码显示了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()