Plot Different Dataframes in the Same Figure

Plot different DataFrames in the same figure

Although Chang's answer explains how to plot multiple times on the same figure, in this case you might be better off in this case using a groupby and unstacking:

(Assuming you have this in dataframe, with datetime index already)

In [1]: df
2010-01-01 1
2010-02-01 1
2009-01-01 1

# create additional month and year columns for convenience
df['Month'] = map(lambda x: x.month, df.index)
df['Year'] = map(lambda x: x.year, df.index)

In [5]: df.groupby(['Month','Year']).mean().unstack()
Year 2009 2010
1 1 1
2 NaN 1

Now it's easy to plot (each year as a separate line):


plotting two different dataframes on the same plot

You just need to store the ax handle from the first plot and pass it as ax argument to the second plot:

plt_ax = ts_rec.plot(
x=x, subplots=True, layout=(7, 4), lw=2, legend=False,
figsize=(12, 10), sharey=True, color='green')
ax=plt_ax, x=x, subplots=True, layout=(7, 4), lw=2, legend=False,
figsize=(12, 10), sharey=True, color='red')

Pandas plot three dataframes on the same figure

I solved simply by putting an array of colors... it's not specified anywhere but when you concatenate you can keep the original colors by adding an array like color=['r', 'g', 'b']).
Here is the modification I used, in case anyone would know:

    concat = pd.concat(merged_data_frames, axis=0, sort=True)
concat = concat.sort_index(key=lambda x: x.str.split().str[1].str.zfill(5))
concat.plot(kind='bar', y='total_mean', use_index=True, yerr='error_mean', edgecolor='black', color=['r', 'g', 'b'])

Plot multiple plots on same figure using loops in pandas

You can try this:

for i in range(2,5):
plt.plot(df["Time"], df[f"Amount i={i}"]

# and do not forget

How can I plot multiple dataframes on the same figure from an excel sheet using pandas?


Let us assume that you have three dataframes: df0, df1 and df2. Additionally, let us assume that in each dataframe you have two columns: x and y. If we make a list of these dataframes, dfs = [df0, df1, df2], then you could plot all three of them on the same plot as follows.

The solution here is divided into two sections:

  • Makinng dummy data (this is only needed for reproducing some dummy data).
  • Plotting the dataframes (you will need to use this code).
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

%matplotlib inline
%config InlineBackend.figure_format = 'svg' # 'svg', 'retina''seaborn-white')

# Make Dummy Data
N = [100, 125, 150]
P = [[3, 2.2], [5, 3.7], [2, 4]]
dfs = list()
for n, p in zip(N, P):
x = np.arange(n)
y = p[0]*x**p[1] + np.average(p)
df = pd.DataFrame({'x': x, 'y': y})

# Make Plots
#dfs = [df1, df2, df3]
for i,df in enumerate(dfs):
plt.plot(df['x'], df['y'],



enter image description here

Related Topics

Leave a reply