Python 使用可视化工具绘制多个子地块
我使用的是来自的IGN review数据集,我试图得到给定发布日期的每个任天堂平台x周的频率图,下面是代码Python 使用可视化工具绘制多个子地块,python,pandas,matplotlib,Python,Pandas,Matplotlib,我使用的是来自的IGN review数据集,我试图得到给定发布日期的每个任天堂平台x周的频率图,下面是代码 import pandas as pd df = pd.read_csv("ign.csv") datetime_df = pd.DataFrame({'year': df["release_year"], 'month': df["release_month"], 'day': df["release_day"]
import pandas as pd
df = pd.read_csv("ign.csv")
datetime_df = pd.DataFrame({'year': df["release_year"],
'month': df["release_month"],
'day': df["release_day"]})
df["date"] = pd.to_datetime(datetime_df)
df["week_day"] = df["date"].apply(lambda x : x.weekday_name)
nintendo = ['Wii','Nintendo DS','Nintendo 3DS','Nintendo DS',
'Game Boy', 'Game Boy Color','Nintendo 64DD','Game Boy Advance',
'New Nintendo 3DS','GameCube','Nintendo DSi','Super NES']
base_nintendo = df[df["platform"].isin(nintendo)]
data = base_nintendo.groupby(["platform","week_day"]).size()
data =data.unstack().fillna(0).stack()
data
对于输出:
platform week_day
Game Boy Friday 5.0
Monday 5.0
Saturday 0.0
Sunday 0.0
Thursday 0.0
Tuesday 4.0
Wednesday 8.0
Game Boy Advance Friday 131.0
Monday 109.0
Saturday 0.0
Sunday 1.0
Thursday 153.0
Tuesday 123.0
Wednesday 106.0
Game Boy Color Friday 89.0
Monday 43.0
Saturday 1.0
Sunday 1.0
Thursday 55.0
Tuesday 78.0
Wednesday 89.0
GameCube Friday 99.0
Monday 100.0
Saturday 3.0
Sunday 0.0
Thursday 83.0
Tuesday 124.0
Wednesday 100.0
我试过做:
data.groupby("platform").plot("barh")
但它只给了我最后一个平台(wii):
请注意,在绘图上方,每个组都有一行,例如
Super-NES….
?这些是其他绘图的matplotlib.AxesSubplot
对象
实际上,为每个组返回一个matplotlib.AxesSubplot
对象。另一方面,ipython笔记本只显示了你的最后一个情节
因此,解决方案是:将data.groupby(“平台”).plot(“barh”)更改为my_axes=data.groupby(“平台”).plot(“barh”)
,然后逐个处理它们,例如
for ax in my_axes:
ax.savefig(filename)
您可以这样做:
gp = data.groupby("platform")
f, axes = plt.subplots(5, 5) # or any other large enough subplot grid
for k, ax in zip(gp.groups, axes.ravel()):
gp.get_group(k).plot('barh', ax=ax)
请注意,在绘图上方,每个组都有一行,例如Super-NES….
?这些是其他绘图的matplotlib.AxesSubplot
对象
实际上,为每个组返回一个matplotlib.AxesSubplot
对象。另一方面,ipython笔记本只显示了你的最后一个情节
因此,解决方案是:将data.groupby(“平台”).plot(“barh”)更改为my_axes=data.groupby(“平台”).plot(“barh”)
,然后逐个处理它们,例如
for ax in my_axes:
ax.savefig(filename)
您可以这样做:
gp = data.groupby("platform")
f, axes = plt.subplots(5, 5) # or any other large enough subplot grid
for k, ax in zip(gp.groups, axes.ravel()):
gp.get_group(k).plot('barh', ax=ax)
一种解决方案是使用seaborn
并绘制barh
data = data.unstack().fillna(0).stack()
data = data.reset_index().rename(columns={0:'value'})
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10,7))
sns.barplot(y='platform',x='value', hue='week_day', data=data, orient='h')
plt.show()
一种解决方案是使用seaborn
并绘制barh
data = data.unstack().fillna(0).stack()
data = data.reset_index().rename(columns={0:'value'})
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(10,7))
sns.barplot(y='platform',x='value', hue='week_day', data=data, orient='h')
plt.show()
它起作用了,但它被污染了,它在Y轴上给了我,工作日和平台的名称。它起作用了,但它被污染了,它在Y轴上给了我,工作日和平台的名称。谢谢,伙计,我想为每个平台做一个唯一的条形图,但提前谢谢!刚刚使用sns.catplot()sns.catplot(y='week\u day',x='value',col='platform',col\u wrap=4,hue='week\u day',data=data,kind=“bar”)工作正常谢谢你,我想为每个平台制作一个唯一的条形图,但提前谢谢你!刚刚使用sns.catplot()sns.catplot(y='week\u day',x='value',col=“platform”,col\u wrap=4,hue='week\u day',data=data,kind=“bar”)实现了