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

Community
  • 1
  • 1
JAG2024
  • 3,987
  • 7
  • 29
  • 58

1 Answers1

1

Use DataFrame.plot.bar:

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

Or DataFrame.plot:

final[['date','rf']].plot(kind='bar')
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
  • 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. – JAG2024 Feb 24 '17 at 15:17
  • Thanks! Please check out my other question: http://stackoverflow.com/questions/42444020/change-frequency-of-x-axis-tick-label-of-datetime-data-in-python-bar-chart-using – JAG2024 Feb 25 '17 at 05:47