2017-02-24 132 views
0

我有一個腳本,它需要多個.csv文件並輸出多行圖。我想讓這些地塊成爲條形圖,因爲它們顯示降雨。但我一直無法獲得plot.bar.()的工作。這是迄今爲止適用於我的代碼,但它不正確。任何幫助?將折線圖轉換爲python代碼for循環中的條形圖matplotlib

import pandas as pd 
import time 
import os 
import matplotlib.pyplot as plt 

files = ['w.pod.csv', 
    't.pod.csv', 
    'r.pod.csv', 
    'n.pod.csv', 
    'm.pod.csv', 
    'k.pod.csv', 
    'j.pod.csv', 
    'h.pod.csv', 
    'g.pod.csv', 
    'c.pod.csv', 
    'b.pod.csv'] 

for f in files: 
    fn = f.split('.')[0] 
    dat = pd.read_csv(f) 
    df0 = dat.loc[:, ['TimeStamp', 'RF']] 
    # Change time format 
    df0["time"] = pd.to_datetime(df0["TimeStamp"]) 
    df0["day"] = df0['time'].map(lambda x: x.day) 
    df0["month"] = df0['time'].map(lambda x: x.month) 
    df0["year"] = df0['time'].map(lambda x: x.year) 
    df0.to_csv('{}_1.csv'.format(fn), na_rep="0") # write to csv 

    # Combine for daily rainfall 
    df1 = pd.read_csv('{}_1.csv'.format(fn), encoding='latin-1', 
        usecols=['day', 'month', 'year', 'RF', 'TimeStamp']) 
    df2 = df1.groupby(['day', 'month', 'year'], as_index=False).sum() 
    df2.to_csv('{}_2.csv'.format(fn), na_rep="0", header=None) # write to csv 

    # parse date 
    df3 = pd.read_csv('{}_2.csv'.format(fn), header=None, index_col='datetime', 
       parse_dates={'datetime': [1,2,3]}, 
       date_parser=lambda x: pd.datetime.strptime(x, '%d %m %Y')) 

    def dt_parse(date_string): 
     dt = pd.datetime.strptime(date_string, '%d %m %Y') 
     return dt 

    # sort datetime 
    df4 = df3.sort() 
    final = df4.reset_index() 

    # rename columns 
    final.columns = ['date', 'bleh', 'rf'] 

    final[['date','rf']].plot() 
    plt.suptitle('{} Rainfall 2015-2016'.format(fn), fontsize=20) 
    plt.xlabel('Date', fontsize=18) 
    plt.ylabel('Rain/mm', fontsize=16) 
    plt.savefig('{}.png'.format(fn)) 

enter image description here

這是我剛纔的問題的延伸:Automate making multiple plots in python using several .csv files

回答

1

使用DataFrame.plot.bar

final[['date','rf']].plot.bar() 

或者DataFrame.plot

final[['date','rf']].plot(kind='bar') 
+0

這很容易!謝謝!!你也知道更改xtick標籤的代碼嗎?現在它試圖把所有365日期,但軸被堵塞。如果每30個標記(天)標記,那就太好了。 – JAG2024

+0

我想你可以查看這個[回答](http://stackoverflow.com/q/2849286/2901002) – jezrael

+0

謝謝!請查看我的其他問題:http://stackoverflow.com/questions/42444020/change-frequency-of-x-axis-tick-label-of-datetime-data-in-python-bar-chart-using – JAG2024