2013-08-06 47 views
1

我正在繪製沒有座標軸的條形圖。我只想顯示非零值的酒吧。如果它是零,我根本不需要任何酒吧。目前它將在零軸上顯示一條細線,我希望它消失。我怎樣才能做到這一點?如果高度爲零,matplotlib不可見的條形圖

import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

data = (0, 1890,865, 236, 6, 1, 2, 0 , 0, 0, 0 ,0 ,0 ,0, 0, 0) 
ind = range(len(data)) 
width = 0.9 # the width of the bars: can also be len(x) sequence 

p1 = plt.bar(ind, data, width) 
plt.xlabel('Duration 2^x') 
plt.ylabel('Count') 
plt.title('DBFSwrite') 
plt.axis([0, len(data), -1, max(data)]) 

ax = plt.gca() 

ax.spines['right'].set_visible(False) 
ax.spines['top'].set_visible(False) 
ax.spines['left'].set_visible(False) 
ax.spines['bottom'].set_visible(False) 

plt.savefig('myfig') 

Sample output

參見非常薄的線在x = 0和x = 7-16?我想消除這些。

+0

你應該*包括代碼*你到目前爲止! – hooy

+0

好主意,我添加了代碼和示例輸出。 – monty0

回答

3

您可以使用numpy的陣列,並創建一個面具,你可以用它來過濾掉指數,其中data具有值爲0

import numpy as np 
import matplotlib 
matplotlib.use('Agg') 
import matplotlib.pyplot as plt 

data = np.array([0, 1890,865, 236, 6, 1, 2, 0 , 0, 0, 0 ,0 ,0 ,0, 0, 0]) 
ind = np.arange(len(data)) 
width = 0.9 # the width of the bars: can also be len(x) sequence 

mask = data.nonzero() 

p1 = plt.bar(ind[mask], data[mask], width) 
plt.xlabel('Duration 2^x') 
plt.ylabel('Count') 
plt.title('DBFSwrite') 
plt.axis([0, len(data), -1, max(data)]) 

ax = plt.gca() 

ax.spines['right'].set_visible(False) 
ax.spines['top'].set_visible(False) 
ax.spines['left'].set_visible(False) 
ax.spines['bottom'].set_visible(False) 

plt.savefig('myfig') 

enter image description here