Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matplotlib: plot multiple columns of pandas data frame on the bar chart

I am using the following code to plot a bar-chart:

import matplotlib.pyplot as pls  my_df.plot(x='my_timestampe', y='col_A', kind='bar')  plt.show() 

The plot works fine. However, I want to improve the graph by having 3 columns: 'col_A', 'col_B', and 'col_C' all on the plot. Like in the example figure below:

enter image description here

I would like the col_A displayed in blue above x-axis, col_B in red below x-axis, and col_C in green above x-axis. Is this something possible in matplotlib? How do I make changes to plot all the three columns? Thanks!

like image 471
Edamame Avatar asked Feb 09 '17 04:02

Edamame


People also ask

How do I plot multiple columns in Matplotlib?

Pandas has a tight integration with Matplotlib. You can plot data directly from your DataFrame using the plot() method. To plot multiple data columns in single frame we simply have to pass the list of columns to the y argument of the plot function.

How do I plot a grouped bar graph in Matplotlib?

To plot a Grouped Bar Chart using Matplotlib, create a subplot using subplots() function, and in this subplot call bar() function with different X-axis position to draw each of the bar graph from different individual bar graphs, so that they form groups.


2 Answers

You can plot several columns at once by supplying a list of column names to the plot's y argument.

df.plot(x="X", y=["A", "B", "C"], kind="bar") 

enter image description here

This will produce a graph where bars are sitting next to each other.

In order to have them overlapping, you would need to call plot several times, and supplying the axes to plot to as an argument ax to the plot.

import pandas as pd import matplotlib.pyplot as plt import numpy as np  y = np.random.rand(10,4) y[:,0]= np.arange(10) df = pd.DataFrame(y, columns=["X", "A", "B", "C"])  ax = df.plot(x="X", y="A", kind="bar") df.plot(x="X", y="B", kind="bar", ax=ax, color="C2") df.plot(x="X", y="C", kind="bar", ax=ax, color="C3")  plt.show() 

enter image description here

like image 60
ImportanceOfBeingErnest Avatar answered Sep 19 '22 13:09

ImportanceOfBeingErnest


Although the accepted answer works fine, since v0.21.0rc1 it gives a warning

UserWarning: Pandas doesn't allow columns to be created via a new attribute name

Instead, one can do

df[["X", "A", "B", "C"]].plot(x="X", kind="bar") 
like image 25
ayorgo Avatar answered Sep 18 '22 13:09

ayorgo