2016-02-29 171 views
2

我有一個python matplotlib圖顯示如下。Python繪圖x軸顯示只選項

X軸上有超過100個項目,我想把它們全部繪製出來,但只需要大約25個左右(也許是自動的),這樣就很清楚了。

你能幫忙嗎?

由於

我的代碼也如下:

l1 = plt.plot(b) 
plt.setp(l1, linewidth=4, color='r') 
l2 = plt.plot(c) 
plt.setp(l2, linewidth=4, color='k') 
l3 = plt.plot(d) 
plt.setp(l3, linewidth=4, color='g') 
plt.xticks(range(len(a)), a) 
plt.xticks(rotation=30) 
plt.show() 
plt.savefig('a.png') 

注:我也有數據列(X軸變量)的形式

u' 2016-02-29T00:01:30.000Z CHEPSTLC0007143 CDC-R114-DK' 

其拋出這個錯誤invalid literal for float()。這就是我使用plt.xticks(range(len(a)), a)的原因。

回答

1

這是MPL是做什麼你告訴它的情況下,但你告訴它做的是有點不方便。

plt.xticks(range(len(a)), a) 

告訴MPL把蜱在每一個整數,並使用字符串a標記蜱(它是做正確)。我想,而不是你想要做像

import matplotlib.pyplot as plt 
import matplotlib.ticker as mticker 

# synthetic data 
a = list(range(45)) 
d = ['the label {}'.format(i) for i in range(45)] 

# make figure + axes 
fig, ax = plt.subplots(tight_layout=True) 
ax.set_xlabel('x label') 
ax.set_ylabel('y label') 

# draw one line 
ln1, = ax.plot(range(45), lw=4, color='r') 


# helper function for the formatter 
def listifed_formatter(x, pos=None): 
    try: 
     return d[int(x)] 
    except IndexError: 
     return '' 

# make and use the formatter 
mt = mticker.FuncFormatter(listifed_formatter) 
ax.xaxis.set_major_formatter(mt) 

# set the default ticker to only put ticks on the integers 
loc = ax.xaxis.get_major_locator() 
loc.set_params(integer=True) 

# rotate the labels 
[lab.set_rotation(30) for lab in ax.get_xticklabels()] 

example output

東西,如果你平移/縮放ticklabels將是正確的和MPL將選擇蜱顯示的一個明智的數量。

[方面說明,此輸出來自2.x分支並顯示一些新的默認造型]