使用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'时,注释命令会停止向我的绘图添加文本?谢谢!
答案 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()
,结果如下: