Car*_*ang 1 matplotlib python-3.x pandas seaborn
我试图在每个方面图上应用共享的 x 轴,'total_bill'
左侧 y 轴和'tip'
右侧 y 轴。使用tips
数据框进行演示。
tip
使用以下数据集:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
date_today= datetime.now()
days = pd.date_range(date_today, date_today + timedelta(tips.shape[0]-1), freq='D')
tips = sns.load_dataset("tips")
tips['date'] = days
Run Code Online (Sandbox Code Playgroud)
数据集预览:
tips.head()
Run Code Online (Sandbox Code Playgroud)
总帐单 | 提示 | 性别 | 吸烟者 | 天 | 时间 | 尺寸 | 日期 | |
---|---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | 女性 | 不 | 太阳 | 晚餐 | 2 | 2021-01-19 16:39:38.363600 |
1 | 10.34 | 1.66 | 男性 | 不 | 太阳 | 晚餐 | 3 | 2021-01-20 16:39:38.363600 |
2 | 21.01 | 3.5 | 男性 | 不 | 太阳 | 晚餐 | 3 | 2021-01-21 16:39:38.363600 |
3 | 23.68 | 3.31 | 男性 | 不 | 太阳 | 晚餐 | 2 | 2021-01-22 16:39:38.363600 |
4 | 24.59 | 3.61 | 女性 | 不 | 太阳 | 晚餐 | 4 | 2021-01-23 16:39:38.363600 |
我努力了:
g = sns.FacetGrid(tips, row='smoker', col='time')
g.map(sns.lineplot, 'date', 'tip', color='b')
for ax in g.axes.flat:
ax.twinx()
for label in ax.get_xticklabels():
label.set_rotation(60)
g.map(sns.lineplot, 'date', 'total_bill', color='g')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我无法找出将 传递ax.twinx()
到辅助右 y 轴图的最佳方法'tip'
。
我希望实现的目标:
Asns.FacetGrid()
与sns.lineplot
s 所在的特征;'total_bill'
在左侧 y 轴上,'tip'
在右侧 y 轴上。绿线代表'total_bill'
波动,蓝线代表'tip'
每个相应 y 轴特征尺度的波动。
您需要创建一个自定义绘图函数来创建双轴并在这个新创建的轴上绘制所需的输出:
def twin_lineplot(x,y,color,**kwargs):
ax = plt.twinx()
sns.lineplot(x=x,y=y,color=color,**kwargs, ax=ax)
g = sns.FacetGrid(tips, row='smoker', col='time')
g.map(sns.lineplot, 'date', 'tip', color='b')
g.map(twin_lineplot, 'date', 'total_bill', color='g')
g.fig.autofmt_xdate()
plt.show()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1482 次 |
最近记录: |