seaborn gridplot/subplots 在第一列显示一个变量,在第二列显示同一行 ID 的另一个变量

Posted

技术标签:

【中文标题】seaborn gridplot/subplots 在第一列显示一个变量,在第二列显示同一行 ID 的另一个变量【英文标题】:seaborn gridplot/subplots to show one variable on the 1st column and another variable on 2nd column for the same row ID 【发布时间】:2020-04-28 17:43:00 【问题描述】:

我正在尝试绘制一个 seaborn gridplot 子图,这样 1. 图形/绘图的每一行都将包含一个试图绘制的客户实体的图形。 2. 该行的列将代表同一客户端的不同变量的折线图。

因此,例如,如果有具有历史收入趋势和历史支出趋势的客户 ABC、XYZ、PQR, 我想绘制

ABC 的收入子图,然后是支出子图

XYZ 的收入子图和旁边的费用子图

PQRS 的收入子图和旁边的费用子图。

我能够为同一变量绘制子图,但无法在第二列中包含第二个变量。 任何指针都会非常有用。

num_plots = len(clients)
fig,ax=plt.subplots(30,2,figsize=(12,96))
fig.subplots_adjust(hspace=0.4,wspace=0.4)
for x in range(num_plots):
    df = dfABC[dfABC['Client'] == clients[x]]
    row = x//2
    col = x%2
    ax_curr = ax[row,col]
    sns.lineplot(data=df,x='Year',y='Income',ax=ax_curr).set_title(clients[x])

这将创建一个 30 行乘 2 列的图,每个图仅代表收入。 我怎样才能将费用线图作为第二列?

【问题讨论】:

【参考方案1】:
import numpy as np
import pandas as pd

import matplotlib.pyplot as plt
import seaborn as sns

# Data generation
clients = ['ABC', 'XYZ', 'PQR']
n_points = 1000
dfABC = pd.DataFrame(
        'Client': np.random.choice(clients, size=n_points),
         'Year': np.random.choice([2010, 2011, 2012, 2013], size=n_points),
         'Income': np.random.exponential(size=n_points)*10,
         'Expense': np.random.exponential(size=n_points))

# Figure generation
clients = list(dfABC['Client'].unique())
n_rows = len(clients)
fig,ax=plt.subplots(n_rows,2,figsize=(12,96))
fig.subplots_adjust(hspace=0.4,wspace=0.4)
for i, client in enumerate(clients):
    df = dfABC[dfABC['Client'] == client]
    sns.lineplot(data=df,x='Year',y='Income',ax=ax[i, 0]).set_title(client)
    sns.lineplot(data=df,x='Year',y='Expense',ax=ax[i, 1]).set_title(client)

【讨论】:

您能否建议我如何合并 y 轴格式。 (例如.. ax.yaxis.set_major_formatter(ticker.EngFormatter()) ax[i, 0].yaxis.set_major_formatter(ticker.EngFormatter()), ax[i, 1].yaxis.set_major_formatter(ticker.EngFormatter()) 可能会做工作。 但是,如果我必须更改 xaxis xticklabels 的水平对齐方式,相同的方法将无济于事:(

以上是关于seaborn gridplot/subplots 在第一列显示一个变量,在第二列显示同一行 ID 的另一个变量的主要内容,如果未能解决你的问题,请参考以下文章

Python seaborn大更新,带来全新绘图方式seaborn.objects

Python seaborn大更新,带来全新绘图方式seaborn.objects

Python数据分析-可视化“大佬”之Seaborn

seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)

seaborn可视化水平箱图(Horizontal Boxplot in Python with Seaborn)

Seaborn绘图