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
seaborn使用FacetGrid函数可视化山脊图(Ridgeline Plot with Seaborn)