2015-02-23 69 views
3

我在包含各種測量的一堆CSV文件中循環播放。如何一次更改多個子圖的顏色?

每個文件可能來自4個不同的數據源之一。

在每個文件中,我將數據合併到月度數據集中,然後將其繪製成3x4網格。在這個圖被保存後,循環繼續,並對下一個文件執行相同的操作。

這部分我想通了,但我想添加一個視覺線索的情節,至於它是什麼數據。據我瞭解(和嘗試了)

plt.subplot(4,3,1) 
plt.hist(Jan_Data,facecolor='Red') 
plt.ylabel('value count') 
plt.title('January') 

不工作,但是這樣一來,我就必須手動添加facecolor='Red'每12個次要情節。在這種情況下循環播放不會出現這種情況,因爲我只希望ylabel僅適用於最左邊的地塊,而xlabel適用於最下面一排。

fig = plt.figure(figsize=(20,15),facecolor='Red') 

開頭設置facecolor不起作用,因爲它只會改變20 15人物的背景顏色現在,它隨後被忽略,當我將它保存爲PNG,因爲它只有設置爲屏幕輸出。

那麼,是否只有一個簡單的setthecolorofallbars='Red'命令plt.hist(…plt.savefig(…我錯過了,或者我應該只是複製ñ粘貼到所有十二個月?

+1

你嘗試過使用'mpl.rc( 「軸」,facecolor = 「紅」)'?我不知道你的情節最終應該是什麼樣子,所以這只是一個猜測...... – cel 2015-02-23 12:27:36

+0

在這個例子中'facecolor'再次成爲背景色,但我猜如果我找到那個正確的開關,那確實是一個可行的解決方案!我會在文檔中閱讀它。 – 2015-02-23 14:06:10

+2

對不起,你想在這裏着色直方圖條?在這種情況下,應該可以使用mpl.rc(「axes」,color_cycle =「red」)。 – cel 2015-02-23 14:36:18

回答

3

您可以使用mpl.rc("axes", color_cycle="red")來設置所有軸的默認顏色循環。

在這個小玩具的例子中,我使用with mpl.rc_context塊來限制mpl.rc對塊的影響。這樣你就不會破壞整個會話的默認參數。

import matplotlib as mpl 
import matplotlib.pylab as plt 
import numpy as np 
np.random.seed(42) 

# create some toy data 
n, m = 2, 2 
data = [] 
for i in range(n*m): 
    data.append(np.random.rand(30)) 

# and do the plotting 
with mpl.rc_context(): 
    mpl.rc("axes", color_cycle="red") 
    fig, axes = plt.subplots(n, m, figsize=(8,8)) 
    for ax, d in zip(axes.flat, data): 
     ax.hist(d) 

2

可以通過使用plt.subplots來解決x和y標籤(當您使用循環時)的問題,因爲您可以單獨訪問每個軸。

import matplotlib.pyplot as plt 
import numpy.random 

# creating figure with 4 plots 
fig,ax = plt.subplots(2,2) 

# some data 
data = numpy.random.randn(4,1000) 

# some titles 
title = ['Jan','Feb','Mar','April'] 

xlabel = ['xlabel1','xlabel2'] 
ylabel = ['ylabel1','ylabel2'] 

for i in range(ax.size): 
    a = ax[i/2,i%2] 
    a.hist(data[i],facecolor='r',bins=50) 
    a.set_title(title[i]) 

# write the ylabels on all axis on the left hand side 
for j in range(ax.shape[0]): 
    ax[j,0].set_ylabel(ylabel[j]) 

# write the xlabels an all axis on the bottom 
for j in range(ax.shape[1]): 
    ax[-1,j].set_xlabel(xlabels[j]) 


fig.tight_layout() 

不是常數的所有特徵(如標題)都可以放入數組中並放置在適當的軸上。

+0

這應該有效,但爲12個地塊設置三個循環對我來說並不合適。因此,我的問題是設置所有顏色的「全​​局」方式。 – 2015-02-23 14:08:41