2012-12-16 65 views
3

請原諒我可憐的python技巧,我對這門語言頗爲陌生!pyplot twinx()tickmark重疊

無論如何,我對目前從twinx()獲得的結果感到困惑。我不知道爲什麼當我孿生x軸時,右側y軸上的嘀嗒聲似乎翻了一番。

import matplotlib.pyplot as plt 

x = linspace(0,2*pi,100) 
y = sin(x) + 100*rand(len(x)) 
z = cos(x) + 100*rand(len(x)) 
data = [] 
data.append(y) 
data.append(z) 

fig = plt.figure(1) 
for kk in range(len(data)): 
    ax1 = fig.add_subplot(111) 
    ax1.plot(x.T, data[kk], 'b.-') 

plt.show() 

第一條曲線顯示(在我看來),正確的行爲 left Y axis

fig2 = plt.figure(2) 
for kk in range(len(data)): 
    ax3 = fig2.add_subplot(111) 
    ax4 = ax3.twinx() 
    ax4.plot(x.T, data[kk], 'b.-') 

plt.show() 

雖然第二個圖(所有我做的是翻轉軸)似乎也差ÿ剔行爲其中兩條「曲線」各自得到它們自己的刻度標記。 right y axis

任何想法,爲什麼這可能會發生將不勝感激!

回答

2

,因爲這是twinx是應該做的:)

嚴重的是,雖然中twinx點是在同一地塊建立一個獨立的y軸。默認情況下,它會在曲線的右側顯示第二個獨立的y軸的刻度。

的想法是,(如果你希望兩個獨立的X軸或twiny),你可以使用twinx做這樣的事情:

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 
ax2 = ax.twinx() 

x = np.linspace(0, 10, 100) 

ax.plot(x, np.sin(x), color='blue') 
ax.set_ylabel(ylabel='Y-Value 1', color='blue') 
ax.set_xlabel('Same X-values') 

ax2.plot(x, x**3, color='green') 
ax2.set_ylabel('Y-Value 2', color='green') 

plt.show() 

enter image description here

如果你只是想共享兩條曲線相同的軸,只是將它們繪製在相同的軸上。例如: -

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots() 

x = np.linspace(0, 10, 100) 
ax.plot(x, x, label='$y=x$') 
ax.plot(x, 3 * x, label='$y=3x$') 
ax.legend(loc='upper left') 

ax.set(xlabel='Same X-values', ylabel='Same Y-values') 

plt.show() 

enter image description here

+0

感謝您的回覆。請看看我的更新後的帖子與情節。我想知道這與我的安裝有什麼關係。我在Python 2.7.3和Ipython中使用OS X 10.8.2 0.12.1 –

+0

感謝您添加顯示問題的圖像。這絕對不是正常的行爲。你是如何安裝matplotlib的? (例如'homebrew',matplotlib站點的二進制文件之一等) –

+0

實際上,可能有一個更簡單的解釋。不要使用像'plt.figure(1)'這樣的調用,因爲它不會創建一個新圖形,它只是返回圖形編號1.只需使用'fig = plt.figure()'而不用編號參數完全。當您打算創建新圖形時,您可能在現有人物的舊軸上添加新軸。這會導致來自之前軸的滴答從剛添加的新軸後​​面「戳出」。 –

2

如果你接電話到twinx()add_subplot()圈外的,我想你會得到你所追求的身影。像這樣:

fig2 = plt.figure(2) 
ax3 = fig2.add_subplot(111) 
ax4 = ax3.twinx() 
for kk in range(len(data)): 
    ax4.plot(x.T, data[kk], 'b.-') 

plt.show() 

通過你的循環結束時,你所呼叫twinx()兩次,所以你自然得到兩個孿生軸。由於它們有不同的尺度,這些數字以一種尷尬的方式重疊。

+0

爲我解決了這個問題,我在循環中調用twinx(),它似乎已經多次寫入y-ticks。 – Mansweet