使用pyplot在x轴下方注释垂直线

时间:2016-06-06 18:21:12

标签: python matplotlib plot annotations

使用matplotlib,我试图注释我在顺序数据图上绘制的垂直线。用线

plt.annotate('%.2f' % 2.34, xy=(0,0), xytext=(0,-20), xycoords='axes fraction', textcoords='offset points',color='r')

我能够在我的情节下面显示文字。但是,我绘制了垂直线 - 例如,间隔为240 - 我想特别注释x轴下方的每条线。

我尝试将xycoords格式切换为'data'然后使用xy =(240,0),但是当我将xycoords格式切换为'data'时,注释文本不再出现在我的情节中。

我还尝试计算我想要放置注释的分数(例如240 /绘图长度),但这仍然没有正确放置。

为什么当我将坐标系更改为'data'而不是'axis fraction'时,注释命令会停止向我的绘图添加文本?谢谢!

1 个答案:

答案 0 :(得分:2)

如果没有可行的例子,很难说出确切的问题是什么。在任何情况下,作为您的问题的解决方案,我建议您复制您的轴(在同一图中),并只使用第二个控制附件的东西。

这是一个有效的解决方案:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

# Add some extra space for the second axis at the bottom
fig.subplots_adjust(bottom=0.2)
ax1.set_xticks(range(-100, 100, 10))
ax1.set_xlim(-100, 100)
ax1.set_xticklabels([str(i) for i in range(-100, 100, 10)], rotation=45)

ax2.spines["bottom"].set_position(("axes", -0.1))
ax2.xaxis.set_ticks_position("bottom")
ax2.spines["bottom"].set_visible(True)
ax2.set_xticks([-50,50])
ax2.set_xticklabels(['Line 1', 'Line 2'], rotation=45, color='blue')
ax2.set_xlim(-100, 100)

b1 = np.random.randint(0,100,6)
b2 = np.random.randint(0,100,6)
b3 = np.random.randint(0,100,6)
ax1.scatter(np.random.normal(0, 1, 100)*100, np.random.normal(0, 1, 100)*100, c='green', s=90)
ax1.axvline(-50)
ax1.axvline(50)

plt.show()

,结果如下:

Using a second axis in one figure to provide labels to vlines in matplotlib