首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pandas可视化工具绘制多个子图

使用pandas可视化工具绘制多个子图
EN

Stack Overflow用户
提问于 2018-09-13 06:14:28
回答 2查看 350关注 0票数 0

我使用的是来自kaggle的IGN review数据集,我正在尝试获得每个任天堂平台的频率图x给定发布日期的星期几,代码如下

代码语言:javascript
复制
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

输出如下:

代码语言:javascript
复制
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

我试过这样做:

代码语言:javascript
复制
data.groupby("platform").plot("barh")

但它只给了我最后一个平台(wii):

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-13 08:04:59

一种解决方案是使用seaborn和plot barh

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2018-09-13 07:32:45

注意上面的图,每个组都有一条线,比如Super NES ....?这些是其他绘图的matplotlib.AxesSubplot对象。

groupby.plot实际上为您的每个组返回一个matplotlib.AxesSubplot对象。另一方面,ipython notebook只显示您的最后一幅图。

解决方案是:将data.groupby("platform").plot("barh")更改为my_axes = data.groupby("platform").plot("barh"),然后逐个处理它们,如下所示

代码语言:javascript
复制
for ax in my_axes:
    ax.savefig(filename)

或者,您可以执行以下操作:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52304186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档