2014-09-03 38 views
2

我有一個包含2x2 3-D圖的子圖。在這個圖表中,我想放置一個文本框,以提供一些附加信息。 爲此,我找到了matplotlib.pyplot.text函數。 但是,此函數使用數據座標作爲輸入。由於我的四個小插圖都具有不同的z值範圍,因此將文本放置在單個z座標上會給他們其他相對位置。將文本標籤放置在不依賴於數據的3D座標中

MWE

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

def randrange(n, vmin, vmax): 
    return (vmax-vmin)*np.random.rand(n) + vmin 

fig = plt.figure() 
for plotnr in [1,2,3,4]: 
    ax = fig.add_subplot(2, 2, plotnr, projection='3d') 
    n = 10 
    for c, m, zl, zh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]: 
     xs = randrange(n, 23, 32) 
     ys = randrange(n, 0, 100) 
     zs = np.divide(randrange(n, zl, zh),1000/(10**(plotnr-1))) 
     ax.scatter(xs, ys, zs, c=c, marker=m) 
     ax.text(27, 60,3,'matplotlib', ha='center', va='center',transform=ax.transAxes) 
plt.show() 

你可以從圖像中看到「matplotlib」到處移動,或者甚至沒有出現在所有。我有這樣的想法,這是因爲z的變化值。 text-label misalignment

是否可以將文本框放置在相對於圖像的座標上,而不是相對於數據的座標?

回答

2

我已經找到了答案here,有可能使用切換到2D標籤位置:

ax.text2D(0.05, 0.95, "2D Text", transform=ax.transAxes)