首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在同一图形中按组和绘制组

如何在同一图形中按组和绘制组
EN

Stack Overflow用户
提问于 2020-10-02 01:17:54
回答 3查看 1.2K关注 0票数 1

我有绘制图表的代码:

代码语言:javascript
复制
destinations = ['JPA', 'FOR']

for destiny in destinations:

    df_tmp = df[(df.DESTINY == destiny)]
    df_tmp['max'] = df_tmp.groupby('DAYS_UNTIL_DEPARTURE')['COST'].transform('max')
    df_tmp['min'] = df_tmp.groupby('DAYS_UNTIL_DEPARTURE')['COST'].transform('min')

    plt.figure(figsize=(10,2))
    sns.lineplot(x="DAYS_UNTIL_DEPARTURE", y="min", data=df_tmp, ci=None, palette="muted", label='min')
    sns.lineplot(x="DAYS_UNTIL_DEPARTURE", y="max", data=df_tmp, ci=None, palette="muted", label='max')
    plt.title(destiny , fontweight="bold", fontsize=16, pad=20)
    plt.ylabel('Cost')
    plt.show()

代码运行得很好。

我想知道如何在同一数字上绘制多个图表?换句话说,在一个数字中有两个图表。

我一直在尝试细分,但我没有得到预期的结果。

谢谢,谢谢。

以下是我的数据示例:

代码语言:javascript
复制
DAYS_UNTIL_DEPARTURE,DESTINY,COST
10,JPA,100
9,JPA,90
8,JPA,85
7,JPA,86
6,JPA,87
5,JPA,71
4,JPA,90
3,JPA,77
2,JPA,88
1,JPA,87
0,JPA,74
10,FOR,99
9,FOR,90
8,FOR,96
7,FOR,79
6,FOR,84
5,FOR,74
4,FOR,85
3,FOR,74
2,FOR,88
1,FOR,100
0,FOR,87
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-10-02 07:22:19

  • -- groupby要容易得多,而数据格式的stack则容易得多。可以在同一个time.

中聚合

  • ( minmax )。

  • seaborn是用于matplotlib的高级API,因此我建议使用seaborn.relplot,在相同的图

中绘制两个目的地。

代码语言:javascript
复制
import pandas as pd
import numpy as np  # for sample data
import random  # for sample data
import seaborn as sns
import matplotlib.pyplot as ply

# create sample data
np.random.seed(365)
random.seed(365)
rows = 300
data = {'days': np.random.randint(10, size=(rows)), 'dest': [random.choice(['JPA', 'FOR']) for _ in range(rows)], 'cost': np.random.randint(70, 120, size=(rows))}
df = pd.DataFrame(data)

# groupby, aggregate, and stack
dfg = df.groupby(['dest', 'days'])['cost'].agg(['min', 'max']).stack().reset_index().rename(columns={'level_2': 'range', 0: 'vals'})

# plot with seaborn relplot
(sns.relplot(x='days', y='vals', hue='range', col='dest', data=dfg, kind='line')
 .set_axis_labels('Day Until Departure', 'Cost')
 .set_titles('Destination: {col_name}'))

票数 1
EN

Stack Overflow用户

发布于 2020-10-02 02:40:00

使用参数ax of sns.lineplot

代码语言:javascript
复制
fig, ax = plt.subplots(1,2)
destinations = ['JPA', 'FOR']

for i, destiny in enumerate(destinations):
    df_tmp = df[(df.DESTINY == destiny)]
    df_tmp['max'] = df_tmp.groupby('DAYS_UNTIL_DEPARTURE')['COST'].transform('max')
    df_tmp['min'] = df_tmp.groupby('DAYS_UNTIL_DEPARTURE')['COST'].transform('min')

    sns.lineplot(x="DAYS_UNTIL_DEPARTURE", y="min", data=df_tmp, ci=None, palette="muted", label='min', ax=ax[i])
    sns.lineplot(x="DAYS_UNTIL_DEPARTURE", y="max", data=df_tmp, ci=None, palette="muted", label='max', ax=ax[i])
    ax[i].set_title(destiny , fontweight="bold", fontsize=16, pad=20)
    plt.ylabel('Cost')

票数 1
EN

Stack Overflow用户

发布于 2020-10-02 02:41:46

可以使用以下代码实现将多个图表组合成单个图的简单示例

代码语言:javascript
复制
import matplotlib.pyplot as plt
import seaborn as sns

fig = plt.figure(figsize=(10,2))
ax = fig.add_subplot(111)

destinations = ['JPA', 'FOR']

for destiny in destinations:

    df_tmp = df[(df.DESTINY == destiny)]
    df_tmp['max'] = df_tmp.groupby('DAYS_UNTIL_DEPARTURE')['COST'].transform('max')
    df_tmp['min'] = df_tmp.groupby('DAYS_UNTIL_DEPARTURE')['COST'].transform('min')

    sns.lineplot(x="DAYS_UNTIL_DEPARTURE", y="min", data=df_tmp, ci=None, palette="muted", label='min')
    sns.lineplot(x="DAYS_UNTIL_DEPARTURE", y="max", data=df_tmp, ci=None, palette="muted", label='max')
    
plt.title('Destiny', fontweight="bold", fontsize=16, pad=20)
plt.ylabel('Cost')
plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64165094

复制
相关文章

相似问题

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