【问题标题】:Annotate data points for each column on multi-line plot在多线图上注释每列的数据点
【发布时间】:2021-09-08 02:03:26
【问题描述】:

我有一个包含多列(列代表月份)的数据框,每一行都是一个组,例如

    OCT20  NOV20  DEC20  JAN21
A   20     24     19     18
B   45     29     33     46
C   19     11     13     11

(这只是获得可重复解决方案的虚拟数据)。

我正在绘制这个数据框的线图,列作为 x-ticks,索引中的每一行作为图中的一条线,每个月每行的值是 y 值。

以下是我用于绘图的代码,效果很好。但是,我想用数据框中的值注释每个数据点,但是使用下面的代码,我将所有数据点放在一个地方。

%matplotlib inline

labels = ['OCT20', 'NOV20', 'DEC20', 'JAN21', 'FEB21', 'MAR21']

ax = df.T.plot(grid = True, figsize=(20,15), marker='o')

for col in df.columns:
    for id, val in enumerate(df[col]):
        ax.text(id, val, str(val))

x = [0,1,2,3,4,5]
plt.xticks(x, labels, rotation=45)
    
plt.show()

输出是这样的:

但我希望每个数据点与图中的正确标记相对应。

有人知道怎么解决吗?

【问题讨论】:

    标签: python pandas dataframe matplotlib line-plot


    【解决方案1】:

    你离得太近了!您已经转置了 DataFrame,然后尝试通过未转置的 DataFrame df 应用文本:

    plot_df = df.T  # Save the Transposition
    ax = plot_df.plot(grid=True, figsize=(20, 15), marker='o')
    
    for col in plot_df.columns:  # Use the Transposition
        for idx, val in enumerate(plot_df[col]):
            ax.text(idx, val, str(val))
    
    x = [0, 1, 2, 3]
    labels = ['OCT20', 'NOV20', 'DEC20', 'JAN21']
    plt.xticks(x, labels, rotation=45)
    


    使用的数据框:

    df = pd.DataFrame({
        'OCT20': {'A': 20, 'B': 45, 'C': 19},
        'NOV20': {'A': 24, 'B': 29, 'C': 11},
        'DEC20': {'A': 19, 'B': 33, 'C': 13},
        'JAN21': {'A': 18, 'B': 46, 'C': 11}
    })
    

    【讨论】:

    • 哎呀,我忽略了这么一个小细节。谢谢,效果很好!
    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 2020-09-27
    • 2021-09-29
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多