python - 如何使用 python 和 matplotlib 注释行尾?

标签 python matplotlib

使用这样的数据框和基本图:

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

np.random.seed(123456)
rows = 75
df = pd.DataFrame(np.random.randint(-4,5,size=(rows, 3)), columns=['A', 'B', 'C'])
datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist 
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
df = df.cumsum()

df.plot()

enter image description here

注释线上最后一点的最佳方法是什么,以便您得到下面的结果?

enter image description here

最佳答案

为了注释一个点使用ax.annotate()。在这种情况下,指定要单独注释的坐标是有意义的。 IE。 y 坐标是直线最后一点的数据坐标(可以从 line.get_ydata()[-1] 获得),而 x 坐标与数据无关,应该是轴的右侧(即轴坐标中的 1)。然后,您可能还想稍微偏移文本,使其不与轴重叠。

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

rows = 75
df = pd.DataFrame(np.random.randint(-4,5,size=(rows, 3)), columns=['A', 'B', 'C'])
datelist = pd.date_range(pd.datetime(2017, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist 
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
df = df.cumsum()

ax = df.plot()

for line, name in zip(ax.lines, df.columns):
    y = line.get_ydata()[-1]
    ax.annotate(name, xy=(1,y), xytext=(6,0), color=line.get_color(), 
                xycoords = ax.get_yaxis_transform(), textcoords="offset points",
                size=14, va="center")

plt.show()

enter image description here

关于python - 如何使用 python 和 matplotlib 注释行尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229592/

相关文章:

python - jinja2 - 如何在 if 语句中放置一个 block ?

主线程中的 Python 套接字接受阻止退出

Python 父/子类方法调用

python - matplotlib 中的模糊圆圈和椭圆

python - 如何使用 matplotlib 生成阴影区域

python - 如何绘制多个列表的直方图?

python - NumPy 中的外部产品 : Vectorizing six nested loops

python - 使用 FFMPEG 从 Android 流式传输图像

Python matplotlib 显示

python - ImportError : No module named mpl_toolkits with maptlotlib 1. 3.0 和 py2exe