2017-09-30 103 views
0

我有一個很簡單的例子,如果freq ='D',但如果freq ='T'則不會奏效。python matplotlib Bar plot適用於D freq,但不適用於T

波紋管例如:

import numpy as np 
import pandas as pd 
from matplotlib import pyplot as plt 
import time 

periods = 10 

data = [x for x in range(periods)] 
data[4:7] = np.nan, np.nan, np.nan 
idx = pd.date_range(start='2017-01-01 00:00:00', periods = periods, freq='T') 

df = pd.DataFrame(data, index = idx, columns=['value']) 

fig, ax = plt.subplots() 
fig.autofmt_xdate() 

ax.bar(df.index, df['value']) 

plt.show() 
time.sleep(5) 

返回下列圖:

enter image description here

改變頻率到d,

idx = pd.date_range(start='2017-01-01 00:00:00', periods = periods, freq='D') 

產生了良好的曲線圖。

enter image description here

什麼是第一張圖的問題?

回答

1

問題是酒吧的寬度(太寬)。 嘗試:

ax.bar(df.index, df['value'], width=1/24/60/2) 

您可能還需要調整刻度標籤格式,例如:

ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%T')) 
+0

您的解決方案很好地工作。非常感謝你。 如果我想讓酒吧彼此相鄰,我相信寬度應該是1/24/60,並且對於8H 1/3。 我將使用edgecolor屬性來提供視覺邊界。 非常感謝您再次。最好的祝福。 – user3225309

+0

是否有動態設置顏色的方法? 例如,如果該值低於5,則color = blue,否則color = red。 – user3225309

+0

是的,顏色屬性也需要數組:color_mask = ['red'if v <5 else'blue'for v in df ['value'] .value]'and then'ax.bar(df.index,df ['value'],width = 1/24/60/1,color = color_mask)' – piiipmatz

相關問題