【问题标题】:subplots based on records of two different pandas DataFrames ( with same structure) using Seaborn or Matplotlib基于使用 Seaborn 或 Matplotlib 的两个不同 pandas DataFrame(具有相同结构)的记录的子图
【发布时间】:2023-03-03 14:15:01
【问题描述】:

我有两个如下所示的 DataFrame。两者具有相同的结构(列名和索引),但值不同。 DataFrame 1 是观察值,DataFrame 2 是预测值。我想使用子图绘制一个图形,每个子图代表一列,Y轴是两个数据框(两条不同的线)的值,X轴是索引。

我知道我应该发布我工作的示例代码,但似乎它们都错了,这就是我不分享我的示例代码的原因。我真的很想使用 seaborn 的 sns.FacetGrid 之类的东西,因为这些图具有更高的质量。

    08FB006 08FC001 08FC003 08FC005 08GD004
----------------------------------------------
0   253      872    256      11.80    2660
1   250      850    255      10.60    2510
2   246      850    241      10.30    2130
3   241      827    235      9.32     1970
4   241      821    229      9.17     1900
5   232      819    228      8.93     1840
6   231      818    225      8.05     1710
7   234      817    225      7.90     1610
8   210      817    224      7.60     1590
9   200      816    221      7.53     1590
10  199      810    219      7.41     1550

【问题讨论】:

    标签: python pandas matplotlib seaborn subplot


    【解决方案1】:

    您可以根据需要修改以下代码-

    actual = pd.DataFrame({'a': [5, 8, 9, 6, 7, 2],
                           'b': [89, 22, 44, 6, 44, 1]})
    predicted = pd.DataFrame({'a': [7, 2, 13, 18, 20, 2],
                           'b': [9, 20, 4, 16, 40, 11]})
    
    # Creating a tidy-dataframe to input under seaborn
    merged = pd.concat([pd.melt(actual), pd.melt(predicted)]).reset_index()
    merged['category'] = ''
    merged.loc[:len(actual)*2,'category'] = 'actual'
    merged.loc[len(actual)*2:,'category'] = 'predicted'
    
    g = sns.FacetGrid(merged, col="category", hue="variable")
    g.map(plt.plot, "index", "value", alpha=.7)
    g.add_legend();
    

    【讨论】:

    • 非常感谢您的回答。我需要类别是列名,而不是 DataFrames。就像我希望实际的“a”和预测的“a”都在同一个子图中,“a”作为类别,蓝线预测为橙色。
    • 如果我得到你,那么你应该交换 colhue 值,如 g = sns.FacetGrid(merged, hue="category", col="variable")
    • 此代码有效,但 pandas.melt 更改了索引...我需要将索引保留为 x 轴 - 对于每一列,应该保留 50 个索引,但是,此代码将使索引上升到 4000,因为它会重置索引并且不保留原始索引值 - 您可以检查图表中的“b”数据帧索引是否为 5-10,这是错误的
    猜你喜欢
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多