2016-03-01 107 views
2

我有下面的代碼,它適用於某個點。但是,它只會改變其中一個子圖的xticks大小。我如何改變它來改變它們的大小?控制所有子圖上的x軸刻度標記大小

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

input_file = 'CSP.csv' 
output_file = 'sub_plots.png' 
df = pd.read_csv(input_file, header = 0) 
classes = ['SD','SC','FIR','MD','UA','LB'] 

f, axarr = plt.subplots(2, 3) 
f.tight_layout() 

i=0 
for r in range(2): 
    for c in range(3): 
     axarr[r][c].hist(df.CSP_change[(df.Class==classes[i])].values,10,rwidth=1, alpha=0.3) 
     axarr[r][c].set_title(classes[i]) 
     axarr[r][c].spines['top'].set_visible(False) 
     axarr[r][c].spines['right'].set_visible(False) 
     axarr[r][c].spines['bottom'].set_visible(True) 
     axarr[r][c].spines['left'].set_visible(True) 
     axarr[r][c].get_xaxis().tick_bottom() 
     axarr[r][c].get_yaxis().tick_left() 
     plt.xticks(fontsize=6) 
     i += 1 

#save 
plt.savefig(output_file) 

histogram

我試圖改變PLT到axarr [R] [C],但它給我關於不具有屬性xticks錯誤消息。

+0

你嘗試移動'plt.xticks(字體大小= 6)循環外線? –

+0

@KunalVyas只會改變它創建的最後一個子圖(如現在的樣子) – tom

回答

3

plt.xticks只作用於所創建的最後插曲軸。你想把它設置在所有的子圖上。您有兩種選擇:

1)您可以使用軸的tick_params屬性爲每個軸設置刻度標籤大小。使用此行代替plt.xticks行,你目前擁有的:

axarr[r][c].tick_params(axis='x',labelsize=6) 

2)可以在全局設置使用rcParams所有次要情節(由@DavidG的建議)。在創建人物和軸之前,就把這行:

plt.rcParams['xtick.labelsize'] = 6 
+0

我想用第一種方法改變單個圖形的刻度大小而不是全局設置會更「pythonic」?但兩者都會得到我想的結果。 – DavidG

+0

是的,在這種情況下都會得到相同的結果。這取決於你想要做什麼 - 例如,你可能在同一個腳本中創建了其他的子圖,你想要一個不同的大小標籤,在這種情況下你不想在全局設置它們。 – tom

3

我認爲,最簡單的方法就是做:

import matplotlib as mpl 

# some code here 

f, axarr = plt.subplots(2, 3) 
f.tight_layout() 

label_size = 6 
mpl.rcParams['xtick.labelsize'] = label_size #add these lines in 

# the rest of your code 
+0

謝謝,完美的工作。接受了另一個答案,因爲它有點更靈活,儘管這不是我的問題。 – TaxpayersMoney

+0

沒問題,另一個答案更完整,並給出了另一種(可能更好)做同樣的事情。 – DavidG

1

下面的方法將讓你把它放在一個次要情節每基礎:

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

input_file = 'CSP.csv' 
output_file = 'sub_plots.png' 
df = pd.read_csv(input_file, header = 0) 
classes = ['SD','SC','FIR','MD','UA','LB'] 

f, axarr = plt.subplots(2, 3) 
f.tight_layout() 
i=0 

plt.tick_params(axis='both', which='major', labelsize=6) 

for rows in axarr: 
    for ax_c in rows: 
     ax_c.hist(df.values, 10, rwidth=1, alpha=0.3) 
     ax_c.set_title(classes[i]) 
     ax_c.spines['top'].set_visible(False) 
     ax_c.spines['right'].set_visible(False) 
     ax_c.spines['bottom'].set_visible(True) 
     ax_c.spines['left'].set_visible(True) 
     ax_c.get_xaxis().tick_bottom() 
     ax_c.get_yaxis().tick_left() 
     ax_c.tick_params(labelsize=6) 
     i += 1 

#save 
plt.savefig(output_file) 
+0

注意這也會改變'yticklabel'的大小 – tom