2011-10-15 83 views
2

我正在繪製一個帶有兩個y軸的雙重繪圖。第二軸ax2twinx創建。問題在於通過yticks的第二個Y軸着色不再起作用。相反,我必須單獨使用set_color標籤。下面是相關代碼:twinx殺死勾號標籤顏色

fig = plt.figure() 
fill_between(data[:,0], 0, (data[:,2]), color='yellow') 
yticks(arange(0.2,1.2,0.2), ['.2', '.4', '.6', '.8', ' 1'], color='yellow') 
ax2 = twinx() 
ax2.plot(data[:,0], (data[:,1]), 'green') 
yticks(arange(0.1,0.6,0.1), ['.1 ', '.2', '.3', '.4', '.5'], color='green') 
# color='green' has no effect here ?! 
# instead this is needed: 
for t in ax2.yaxis.get_ticklabels(): t.set_color('green') 
show() 

,導致:

colored_ticklabels

此問題僅如果我設置蜱字符串發生。

yticks(arange(0.1,0.6,0.1), ['.1 ', '.2', '.3', '.4', '.5'], color='green') 

忽略它,喜歡這裏

yticks(arange(0.1,0.6,0.1), color='green') 

和着色工作正常。

這是一個錯誤(找不到任何報告),一個功能(?!)或 我錯過了什麼嗎?我在Ubuntu上使用python 2.6.5和matplotlib 0.99.1.1。

+0

我不太清楚你在做什麼......(你是指「雙重情節」,「雙胞胎」或「雙胞胎」,子情節或其他什麼東西?)你能舉一些例子嗎?代碼或問題的示例圖像和/或您期望發生的事情? –

+0

對不清楚的描述。我把這個問題追溯到使用'twinx'並壓縮了問題描述。還添加了一個圖形。 – Boffin

回答

2

無論值多少錢,即使沒有for循環來設置標籤顏色,您的代碼也能在我的系統上正常工作。只是作爲參考,這裏有一個獨立的例子試圖按照你貼本質到底是什麼:

import matplotlib.pyplot as plt 
import numpy as np 

# Generate some data 
num = 200 
x = np.linspace(501, 1200, num) 
yellow_data, green_data = np.random.random((2,num)) 
green_data -= np.linspace(0, 3, yellow_data.size) 

# Plot the yellow data 
plt.fill_between(x, yellow_data, 0, color='yellow') 
plt.yticks([0.0, 0.5, 1.0], color='yellow') 

# Plot the green data 
ax2 = plt.twinx() 
ax2.plot(x, green_data, 'g-') 
plt.yticks([-4, -3, -2, -1, 0, 1], color='green') 

plt.show() 

enter image description here

我的猜測是,你的問題主要是由混合了不同的對象引用過來。我猜你的代碼有點複雜,當你撥打plt.yticks,ax2不是當前軸。在調用yticks之前,您可以通過明確調用sca(ax2)(將當前軸設置爲ax2)來驗證該想法,並查看是否改變了事情。

一般來說,最好堅持使用完全的matlab-ish狀態機界面或者OO界面,不要混合太多。 (就個人而言,我更喜歡只是堅持的OO接口。使用pyplot建立圖形對象和show,否則使用的軸的方法。對每一個他自己的,雖然)。

無論如何,與matplotlib> = 1.0,tick_params函數使這個更方便一些。 (我還使用plt.subplots這裏,這是隻有在> = 1.0,也是如此。)

import matplotlib.pyplot as plt 
import numpy as np 

# Generate some data 
yellow_data, green_data = np.random.random((2,2000)) 
yellow_data += np.linspace(0, 3, yellow_data.size) 
green_data -= np.linspace(0, 3, yellow_data.size) 

# Plot the data 
fig, ax1 = plt.subplots() 
ax2 = ax1.twinx() 

ax1.plot(yellow_data, 'y-') 
ax2.plot(green_data, 'g-') 

# Change the axis colors... 
ax1.tick_params(axis='y', labelcolor='yellow') 
ax2.tick_params(axis='y', labelcolor='green') 

plt.show() 

enter image description here

等效代碼爲舊版本matplotlib會看起來更象這樣:

import matplotlib.pyplot as plt 
import numpy as np 

# Generate some data 
yellow_data, green_data = np.random.random((2,2000)) 
yellow_data += np.linspace(0, 3, yellow_data.size) 
green_data -= np.linspace(0, 3, yellow_data.size) 

# Plot the data 
fig = plt.figure() 
ax1 = fig.add_subplot(1,1,1) 
ax2 = ax1.twinx() 

ax1.plot(yellow_data, 'y-') 
ax2.plot(green_data, 'g-') 

# Change the axis colors... 
for ax, color in zip([ax1, ax2], ['yellow', 'green']): 
    for label in ax.yaxis.get_ticklabels(): 
     label.set_color(color) 

plt.show() 
+0

僅當我明確設置標籤字符串時,纔會出現(忽略)忽略'color ='標籤的問題:'yticks(arange(0.1,0.4,0.1),['.1','.2','.3 '],color ='green')'。設置的字符串工作,顏色沒有。如果你指定它,你的第一個小例子是否也工作?例如。 'plt.yticks([ - 4,-3,-2,-1,0,1],['foo','bar'],color ='green')'。 感謝您指出不同的matplotlib樣式(matlab與oo)。爲了提高我的代碼的一致性,我會再讀一遍。 – Boffin