2015-02-24 57 views
1

我想修改MPL example每列和y每行共享x和我喜歡把在y刻度標記的右側。 我試過類似this一個解決方案,即Y標誌在matplotlib陰謀右側與共享x和y

import matplotlib.pyplot as plt 
import numpy as np 

# Simple data to display in various forms 
x = np.linspace(0, 2 * np.pi, 400) 
y = np.sin(x ** 2) 

plt.close('all') 

# row and column sharing 
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex='col', sharey='row') 
ax1.plot(x, y) 
ax1.set_title('Sharing x per column, y per row') 
ax2.scatter(x, y) 
ax3.scatter(x, 2 * y ** 2 - 1, color='r') 
ax4.plot(x, 2 * y ** 2 - 1, color='r') 

#my "contribution" to the code: 

for ax in [ax1,ax3]: 
    ax.yaxis.set_ticks_position('both') 
    ax.set_yticklabels([]) 
for ax in [ax2,ax4]: 
    ax.yaxis.set_ticks_position('both') 
    ax.yaxis.tick_right()#right hand side tickslabels 

plt.show() 

這對於一個情節的作品,而不是在這裏:沒有Ÿ刻度標記的。 建議?將x標籤放在最前面的同樣的問題。

如果我只用第二個循環,我得到的第一列和至少右手y側刻度標記輸出例如在第二列,但左側蜱在第二列中消失。爲什麼會發生?

+0

請提供完整的最簡單示例。這將使它更容易helpp。 – hitzg 2015-02-24 15:12:10

+0

@hitzg在這裏你去,但正如我上面鏈接,它只是複製從[matplotlib演示]貼(http://matplotlib.org/examples/pylab_examples/subplots_demo.html)加我2 for循環。 – mikuszefski 2015-02-25 13:44:06

回答

0

當您保持第一個循環時,對ax.set_yticklabels([])的調用會殺死所有您的標籤,因爲當共享座標軸時,勾號標籤文本將變爲鏈接狀態。使用axes_grid1的演示here演示了一些方法來實現它,如果你想要不同的刻度/標籤。

然而,這個簡單的例子,你可以把具體的設置ticklabels到右側,並拉動其他相關標籤單獨對象關掉自己的知名度。如果您用以下內容替換您的修改部分:

for ax in [ax1,ax3]: 
    for label in ax.get_yticklabels(): 
     label.set_visible(False) 
for ax in [ax2,ax4]: 
    # Change the labelling only 
    ax.yaxis.set_tick_params(labelright='on', labelleft='off') 

您會在右側獲得標記標籤。我不確定這是否是最有效的方式,但它有效。

example with ticks on the right side

+0

我明白了。但是,您注意到左側沒有刻度。你通過放置網格來隱藏這一點。爲什麼左側蜱會消失?如何讓他們回來? – mikuszefski 2015-02-26 09:00:43

+0

對不起,我以爲你*想要*左邊的勾號消失。如果你想保留它們,你爲什麼把你的標籤設置爲null?也許更準確地解釋,我會解決它。 – Ajean 2015-02-26 14:17:07

+0

嗨,澄清,我分辨beween'set_yticks()'和'set_yticklabels()'。我已經在一個簡單的情節中使用了他們,他們按我預期的那樣工作,即:第一個定義了蜱的位置,第二個標籤是他們得到的。我只想刪除標籤,或者在這種情況下保留所有標記,但將標籤放在右側。 – mikuszefski 2015-02-26 15:27:27