2016-08-30 90 views
0

我已經搜索了類似的問題,沒有找到任何,所以我很抱歉。小區大小/滴答間距pyplot

我有這樣的:

import matplotlib.pyplot as plt 

yearlymean_gm = np.load('ts_globalmean_annualmean.npz') 
ts = yearlymean_gm['ts_aqct'] 

time = np.arange(0., 45 , 1) 
plt.figure(figsize=(12, 5), dpi=80, facecolor='w', edgecolor='k') 

ax = plt.subplot(3, 4, 1) 

data = ts[0, :] 
plt.plot(time, data) 
plt.title('Annual Mean Global Mean Temperature', fontsize=14) 
plt.xlabel('year', fontsize=12) 
plt.ylabel(modnames[0], fontsize=12) 
plt.xlim(0, 50), plt.ylim(275, 310) 
ax.set_xticks(time) 
ax.set_xticklabels(time, fontsize = 8) 

ax= plt.subplot(3, 4, 2) 

data = ts[1, :] 
plt.plot(time, data) 
plt.title('Annual Mean Global Mean Temperature', fontsize=14) 
plt.xlabel('year', fontsize=12) 
plt.ylabel(modnames[1], fontsize=12) 
plt.xlim(0, 50), plt.ylim(275, 310) 
ax.set_xticks(time) 


ax = plt.subplot(3, 4, 3) 

data = ts[2, :] 
plt.plot(time, data) 
plt.title('Annual Mean Global Mean Temperature', fontsize=14) 
plt.xlabel('year', fontsize=12) 
plt.ylabel(modnames[2], fontsize=12) 
plt.xlim(0, 50), plt.ylim(275, 310) 
ax.set_xticks(time) 


plt.tight_layout() 
plt.show() 
plt.close 

目前有9個缺少情節,因爲我敢肯定,你可以猜測,Here's what it's spitting out right now

這裏有三個問題,是明確的: 1)每個subplot是tiny與圖的大小相比較(並且,你知道...什麼是容易看見的)。減小圖的大小並不會使得子圖更容易被讀取。

2)它們太靠近了。我對如何解決這個問題有一些想法,但我覺得我需要先解決1)。

3)軸是如此之小,在xticks出現在所有揉成

我搜索,發現沒有解釋如何做到這一點,在真實的水平,我可以理解書面的。 pyplot文檔對我來說基本上是一句胡言亂語。

在此先感謝您的幫助(如果有人可以就我正在做的事情提供更多的一般性建議以及有關解決此問題的具體建議,我將非常感激啓蒙)。

回答

2

好吧,這裏發生了幾件事情。讓我們一次一個地通過它們。在你實例化繪圖之後,你可以撥打ax = plt.subplot(3, 4, _)三次。但是,.subplot(3,4,_)將繪圖分解爲3行和4列,並且下劃線選擇從1開始(而不是0)的該網格的哪一部分。我們可以用下面的代碼數得過來嗎

plt.figure(figsize=(12, 5), dpi=80, facecolor='w', edgecolor='k') 
for N in range(1,13): 
    ax = plt.subplot(3, 4, N) 
    ax.annotate(s=str(N), xy=(.4,.4), fontsize=16) 

enter image description here

所以但使用.subplot(3,4,1).subplot(3,4,2).subplot(3,4,3)您只選擇了12個部分的前3。

當您將數據添加到圖中時,ax.set_xticks(time)將xaxis添加了45個滴答聲(這是很多),並且ax.set_xticklabels(time, fontsize = 8)在每個滴答滴答添加了一個標籤。這就是爲什麼它看起來如此擁擠。一種選擇是減少滴答聲的數量,另一種是將x軸拉伸出來。既然你有3個子圖,我想你想要3排垂直堆放。您可能並不需要plt.xlim(0, 50)plt.ylim(275, 310)。除非您有重寫它們的特定原因,否則軸將爲您調整繪圖極限。

我的建議是使用plt.subplots(3,1)(注意額外的「s」),而不是重複調用plt.subplot。有什麼區別? plt.subplots(3,1)返回對象的一個​​元組和一個axis對象的數組。在這種情況下,它是一維數組,因爲我們只需要1列。 (注:我創建假數據用於說明的目的。)

fig, axes = plt.subplots(3,1, figsize=(12,5), dpi=80, facecolor='w', 
         edgecolor='k', sharex=True) # sharex shares the x-axis 

for i, ax in enumerate(axes): # need to enumerate to slice the data 
    data = ts[i, :] 
    ax.plot(time, data) 
    ax.set_ylabel(modnames[i], fontsize=12) 
    ax.set_xticks(time) 
    ax.set_xticklabels(time, fontsize = 8) 

# set xlabel outside of for loop so only the last axis get an xlabel 
ax.set_xlabel('year', fontsize=12) 
fig.tight_layout() 

# set the title, adjust the spacing 
fig.suptitle('Annual Mean Global Mean Temperature', fontsize=14) 
fig.subplots_adjust(top=0.90) 

enter image description here