首页 > 解决方案 > pyplot:在轴上添加点投影

问题描述

我可以使用绘图功能绘制图表。但我想通过在轴上绘制投影并将文本放在点和轴上来突出一些“特殊”点。

像这样的东西: 在此处输入图像描述

我试过这个:

import matplotlib.pyplot as plt

[...]
plt.plot(X, Y, label='data')  # draw curve, X and Y are arrays
plt.plot(Xp, Yp, c, duration), marker='o') # draw point @(Xp, Yp), Xp and Yp are scalars
plt.vlines(Xp, min(Y), Yp, linestyles='dashed')
plt.hlines(Yp, min(X), Xp, linestyles='dashed')
plt.grid(True)
plt.show()

但我得到的并不令人满意:

在此处输入图像描述

得到我想要的东西的正确方法是什么?
我也考虑过annotate,但它似乎没有做我需要的。如我错了请纠正我。

标签: pythonmatplotlibgraph

解决方案


您可以使用annotate混合转换

import matplotlib.pyplot as plt

plt.plot([1,2], [2,4], label='data')
plt.plot([1.7], [3.4], marker='o')
plt.grid(True)

x,y = 1.7, 3.4
arrowprops={'arrowstyle': '-', 'ls':'--'}
plt.annotate(str(x), xy=(x,y), xytext=(x, 0), 
             textcoords=plt.gca().get_xaxis_transform(),
             arrowprops=arrowprops,
             va='top', ha='center')
plt.annotate(str(y), xy=(x,y), xytext=(0, y), 
             textcoords=plt.gca().get_yaxis_transform(),
             arrowprops=arrowprops,
             va='center', ha='right')

在此处输入图像描述

这并不完美,因为您可能仍需要手动调整轴坐标(例如-0.05,而不是0)以将标签设置为偏离轴。


推荐阅读