python文本到第二个y轴

时间:2017-04-28 08:16:50

标签: python matplotlib

我试图使用matplotlib在python中创建我的第一个图,但我希望图中的文字是"在"外面"该图即紧邻该线而不是在其上方或下方。

plt.figure()
plt.scatter(mean, diff, color='k')

plt.axhline(md,           color='black', linestyle='-', lw=3)
plt.axhline(md + 1.96*sd, color='black', linestyle='--')
plt.axhline(md - 1.96*sd, color='black', linestyle='--')
plt.axhline(0, color='black', linestyle='--')

plt.ylim(-max(diff)*2, max(diff)*2)
plt.xlabel('Mean')
plt.ylabel('Difference')
plt.title('Bland altman plot for ' + variable)

txt1=('+1.96 SD')
txt2=('-1.96 SD')
txt3 =('Mean')

x = max(mean)
plt.text(x, md+1.96*sd, txt1, horizontalalignment='left', verticalalignment='bottom', fontweight='bold')
plt.text(x, md-1.96*sd, txt2, horizontalalignment='left', verticalalignment='top', fontweight='bold')
plt.text(x, 0.1, txt3)

结果是:

enter image description here

1 个答案:

答案 0 :(得分:0)

您仍需要将标签定位在轴边缘的主要成分是轴边缘的坐标。您可以通过plt.gca().get_xlim()获取这些内容。然后可以将上限用作文本标签的x位置。

import matplotlib.pyplot as plt
import numpy as np

X = np.random.normal(size=(12))
Y = np.random.normal(size=(12))

plt.figure()
plt.scatter(X, Y, color='k')

plt.axhline(Y.mean(),           color='black', linestyle='-', lw=3)
plt.axhline(Y.mean() + 1.96*Y.std(), color='black', linestyle='--')
plt.axhline(Y.mean() - 1.96*Y.std(), color='black', linestyle='--')
plt.axhline(0, color='black', linestyle='--')

txt1=(' +1.96 SD')
txt2=(' -1.96 SD')
txt3 =(' Mean')

x0,x1 = plt.gca().get_xlim()
plt.text(x1, Y.mean() + 1.96*Y.std(), txt1, ha='left', va='center', fontweight='bold')
plt.text(x1, Y.mean() - 1.96*Y.std(), txt2, ha='left', va='center', fontweight='bold')
plt.text(x1, 0, txt3, ha='left', va='center',)

# make more space on right side to host the labels
plt.subplots_adjust(right=0.8)
plt.show()

enter image description here

请注意,这是非常基本的(但也很容易理解)版本。

如果您对转换感到满意,可以在此问题中使用该技术:

Add a label to y-axis to show the value of y for a horizontal line in matplotlib