在Pandas

时间:2016-11-25 15:50:12

标签: python pandas matplotlib seaborn facet

我试图在单个FacetGrid上绘制两个不同的变量(通过因果关系链接),delai_jourdate_sondage。我可以用这段代码来完成:

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中看到的例子。

我应该怎么做?

2 个答案:

答案 0 :(得分:1)

我知道这很老,但是我正在尝试做类似的事情。我通过遍历轴并绘制次轴来工作,就像在典型的Seaborn图中一样。

使用OP示例:

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)
for ax, (_, subdata) in zip(g.axes, df_verif_sum.groupby('prefecture'):
    ax2=ax.twinx()
    subdata.plot(x='data_sondage',y='impossible', ax=ax2,legend=False,color='r')

如果对x轴进行任何格式化,则可能必须同时对ax和ax2进行格式化。

答案 1 :(得分:0)

在此示例中,您将自定义映射功能应用于目标数据框。在函数内,您可以调用plt.gca()来获取当前在FacetGrid中绘制的构面上的当前轴。一旦有了轴,就可以像在普通的旧matplotlib绘图中一样调用twinx()

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