在多线图上为每列注释数据点
Annotate data points for each column on multi-line plot
我有一个包含多列的数据框(列代表月份),每一行都是一个组,例如
OCT20 NOV20 DEC20 JAN21
A 20 24 19 18
B 45 29 33 46
C 19 11 13 11
(这只是获得可重现解决方案的虚拟数据)。
我正在绘制此数据框的线图,其中列作为 x 刻度,索引中的每一行作为图中的一条线,每行每个月的值是 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()
输出是这样的:
但我希望每个数据点都对应于图中的正确标记。
有人知道如何解决这个问题吗?
你太接近了!您已转置 DataFrame,但随后尝试通过 un-transposed 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}
})
我有一个包含多列的数据框(列代表月份),每一行都是一个组,例如
OCT20 NOV20 DEC20 JAN21
A 20 24 19 18
B 45 29 33 46
C 19 11 13 11
(这只是获得可重现解决方案的虚拟数据)。
我正在绘制此数据框的线图,其中列作为 x 刻度,索引中的每一行作为图中的一条线,每行每个月的值是 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()
输出是这样的:
但我希望每个数据点都对应于图中的正确标记。
有人知道如何解决这个问题吗?
你太接近了!您已转置 DataFrame,但随后尝试通过 un-transposed 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}
})