结合FacetGrid和dual Yaxis在Pandas中的应用

2024-09-28 21:02:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一个面网格上绘制两个不同的变量(由因果关系联系起来),delai_jour和{}。我可以用这个代码:

g = sns.FacetGrid(df_verif_sum, col="prefecture", col_wrap=2, aspect=2, sharex=True,)
g = g.map(plt.plot, "date_sondage", "delai_jour", color="m", linewidth=2)
g = g.map(plt.bar, "date_sondage", "impossible")

这给了我这样一个结论:

FacetGrid

(总共有33个)。在

我对比较不同prefecture的模式很感兴趣,但是由于大小的不同,我看不到折线图中的变化。在

对于这个特定的工作,最好的方法是创建一个辅助的y轴,但是我似乎什么都做不到:FacetGrid看起来不可能实现,而且我不明白代码不能复制我在纯matplotlib中看到的示例。在

我该怎么做?在


Tags: 代码网格mapdfdate绘制pltcol
1条回答
网友
1楼 · 发布于 2024-09-28 21:02:09

下面是一个将自定义映射函数应用于感兴趣的数据帧的示例。在该函数中,可以调用plt.gca()以获取当前在FacetGrid中绘制的facet的当前轴。一旦有了轴,twinx()就可以像在普通的旧matplotlib打印中那样被调用。在

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

def facetgrid_two_axes(*args, **kwargs):
    data = kwargs.pop('data')
    dual_axis = kwargs.pop('dual_axis')
    alpha = kwargs.pop('alpha', 0.2)
    kwargs.pop('color')
    ax = plt.gca()
    if dual_axis:
        ax2 = ax.twinx()
        ax2.set_ylabel('Second Axis!')

    ax.plot(data['x'],data['y1'], **kwargs, color='red',alpha=alpha)
    if dual_axis:
        ax2.plot(df['x'],df['y2'], **kwargs, color='blue',alpha=alpha)


df = pd.DataFrame()
df['x'] = np.arange(1,5,1)
df['y1'] = 1 / df['x']
df['y2'] = df['x'] * 100
df['facet'] = 'foo'
df2 = df.copy()
df2['facet'] = 'bar'

df3 = pd.concat([df,df2])
win_plot = sns.FacetGrid(df3, col='facet', size=6)
(win_plot.map_dataframe(facetgrid_two_axes, dual_axis=True)
         .set_axis_labels("X", "First Y-axis"))
plt.show()

这不是最漂亮的绘图,因为您可能想要调整第二个y轴标签的存在、绘图之间的间距等。但是代码足以显示如何在FacetGrids中绘制两系列不同的量值。在

seaborn_double_y_axis

相关问题 更多 >