0

I have a script that takes multiple .csv files and outputs multiple line plots. I would like for these plots to be bar charts since they're showing rainfall. But I haven't been able to get plot.bar.() to work. This is the code that works for me so far but it's not correct. Any help?

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

This is an extension of my previous question: Automate making multiple plots in python using several .csv files

1 Answer 1

1

Use DataFrame.plot.bar:

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

Or DataFrame.plot:

final[['date','rf']].plot(kind='bar')
Sign up to request clarification or add additional context in comments.

2 Comments

That was easy! Thanks!! Also do you know the code for changing the xtick labels? Right now it's trying to put all 365 dates but the axis gets clogged. It would be good if every 30 ticks (days) are labeled instead.
Thanks! Please check out my other question: stackoverflow.com/questions/42444020/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.