用axvspan

时间:2018-01-03 21:35:39

标签: matplotlib plot

我试图在一个范围为[-0.2,1.4]和[-0.2,1.4]的情节上绘制四个彩色象限。问题是我在使用plt.axvspan尝试排列象限的y轴坐标时遇到了麻烦:

roc_t = 0.43652219
roc_v = 0.82251961

plt.figure()
plt.figure(figsize=(15,12))
plt.xlim(-0.2,1.4)
plt.ylim(-0.2,1.4)
plt.scatter([nTPredict], [nVPredict], color = 'red', marker='X', s=500)

plt.plot([T_Cutoff,T_Cutoff],[-0.2,1.4],color = 'black',linestyle='dashed',lw=2)
plt.plot([1.4,-0.2],[(V_Cutoff),(V_Cutoff)],color = 'black',linestyle='dashed',lw=2)

plt.axvspan(-0.2, roc_t, 0, roc_v, alpha=0.3, color='#1F98D0')#blue
plt.axvspan(roc_t, 1.4, 0, roc_v, alpha=0.3, color='#F9D307')#yellow
plt.axvspan(-0.2, roc_t, roc_v, 1, alpha=0.3, color='#F38D25')#orange
plt.axvspan(roc_t, 1.4, roc_v, 1, alpha=0.3, color='#DA383D')#red

plt.show()
plt.close()

产生了这个:

所以顶行和底行应该以roc_v结束/开始(由水平虚线表示)。据我所知,在plt.axvspan中,ymin和ymax是[0,1]的相对比例,但我无法弄清楚如何使象限与水平虚线对齐。

如何计算ymin和ymax的roc_v值。我已经尝试过(roc_v * 1.6)但我认为这是合乎逻辑的答案,但这仍然没有排成一行。否则,我可以用另一种方式绘制这些背景象限吗?

1 个答案:

答案 0 :(得分:0)

尽管可能会对变换进行混乱,但我认为使用axvspan以外的其他东西可能会更有运气。 我建议fill_between, where the limits are simply provided in Data coordinates

PS:对于您的虚线,您可能需要查看专门为此目的制作的axvline()axhline()

roc_t = 0.43652219
roc_v = 0.82251961

T_Cutoff = roc_t
V_Cutoff = roc_v

fig,ax = plt.subplots(figsize=(15,12))
ax.set_xlim(-0.2,1.4)
ax.set_ylim(-0.2,1.4)


ax.axvline(T_Cutoff,color = 'black',linestyle='dashed',lw=2)
ax.axhline(V_Cutoff,color = 'black',linestyle='dashed',lw=2)

ax.fill_between([-0.2, roc_t],-0.2,roc_v,alpha=0.3, color='#1F98D0')  # blue
ax.fill_between([roc_t, 1.4], -0.2, roc_v, alpha=0.3, color='#F9D307')  # yellow
ax.fill_between([-0.2, roc_t], roc_v, 1.4, alpha=0.3, color='#F38D25')  # orange
ax.fill_between([roc_t, 1.4], roc_v, 1.4, alpha=0.3, color='#DA383D')  # red

plt.show()

enter image description here