亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將多類別數據框繪制為單個箱線圖

如何將多類別數據框繪制為單個箱線圖

慕尼黑8549860 2023-10-26 15:36:08
我可以使用 SPSS 軟件輕松繪制下面的箱線圖。但對于Python來說,這對我來說有點困難。我一直在嘗試子情節,但我很困惑如何做到這一點。這是 SPSS 的箱線圖。我想知道如何繪制類似于seaborn或matplotlib的東西?獨特的價值觀是:公司:TAM、GOL目的地:SSA、SLZ、FOR、MCZ、NAT、JPA、REC工作日:周一、周五、周六、周四、周二、周三我很感激任何答案。
查看完整描述

2 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

映射seaborn.boxplotseaborn.Facetgrid

  • AFacetgrid是用于繪制條件關系的多圖網格。

  • 可以使用參數將標題WEEKDAY放置在右邊距,但這也需要更多的垂直空間。FacetGridmargin_titles=True

import pandas as pd

import calendar

import seaborn as sns


# given your data in dataframe df, read from a csv

df = pd.read_csv('test.csv', index_col=0)


# create the FacetGrid with boxplot

g = sns.FacetGrid(data=df, col='COMPANY', row='WEEKDAY', height=1.5, aspect=4, margin_titles=True, row_order=calendar.day_name)

g.map(sns.boxplot, 'DESTINATION', 'COST', order=sorted(df.DESTINATION.unique()))

https://img1.sycdn.imooc.com/653a171b0001e7b208600748.jpg

進一步定制

  • 歸因于在seaborn FacetGrid圖中編輯正確的ylabel

import pandas as pd

import calendar

import seaborn as sns


# given your data in dataframe df, read from a csv

df = pd.read_csv('test.csv', index_col=0)


# create the FacetGrid with boxplot

g = sns.FacetGrid(data=df, col='COMPANY', row='WEEKDAY', height=1.5, aspect=4, margin_titles=True, row_order=calendar.day_name)

g.map(sns.boxplot, 'DESTINATION', 'COST', order=sorted(df.DESTINATION.unique()))

https://img1.sycdn.imooc.com/653a172e00017d3309540758.jpg

查看完整回答
反對 回復 2023-10-26
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

以下方法創建一個沒有間距的 7x2 子圖網格,并用于sns.boxplot每個子圖內的箱線圖:


import matplotlib.pyplot as plt

import seaborn as sns

import pandas as pd

import numpy as np


# df = pd.read_csv(...)


fig, axes = plt.subplots(ncols=2, nrows=7, sharex=True, sharey=True, figsize=(10, 16),

                         gridspec_kw={'wspace': 0, 'hspace': 0})


companies = ['GOL', 'TAM']

for comp_index, company in enumerate(companies):

    axes[0, comp_index].set_title(company)

    for weekd_index, weekd in enumerate(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']):

        ax = axes[weekd_index, comp_index]

        sns.boxplot(data=df[(df['WEEKDAY'] == weekd) & (df['COMPANY'] == company)],

                    x='DESTINATION', y='COST', color='skyblue', ax=ax)

        if comp_index != 0:

            ax.set_ylabel('')

        if comp_index == len(companies) - 1:

            ax.text(1.02, 0.5, weekd, ha='left', va='center', rotation=90, transform=ax.transAxes)


plt.tight_layout()

plt.show()

https://img1.sycdn.imooc.com/653a1741000161f206541051.jpg

查看完整回答
反對 回復 2023-10-26
  • 2 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號