# Is there a way to overlay stem plot over line plot in python?

Date        Day_Perc_Change No. of Trades
2017-05-15  0.000000        40593
2017-05-16  -0.019184       22027
2017-05-17  -0.008550       15709
2017-05-18  -0.017699       47159
2017-05-19  -0.021748       85921


I visualized "Day_Perc_Change" in stem plot and "No. of Trades" in line plot. But now i want to compare these two plots by overlaying them on each other.. How do i visualize that?

x = df["Date"]
y = df["Day_Perc_Change"]

plt.stem(x, y, bottom=0)
plt.show()


df.plot(x="Date", y="No. of Trades", figsize=(10,8))


i Want to overlay these two on each other to compare them..is there a way to do that?

Part 2: post trying the answer mentioned below: After trying the below code by @ElBurro i get the following output

The expected output should look like this

## 2 Answers

Since you just want to get a sense of distribution, Just scale the df["No. of Trades"] to the range [0, 1] and scale it up by max of df["Day_Perc_Change"].

import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
sns.set(style="darkgrid")

scaledvolume =  df["No. of Trades"] - df["No. of Trades"].min()
scaledvolume = scaledvolume/scaledvolume.max() * df.Day_Perc_Change.max()

fig, ax = plt.subplots(figsize=(12, 6))

ax.stem(df.index, df.Day_Perc_Change , 'b', markerfmt='bo', label='Percente Change')
ax.plot(df.index, scaledvolume, 'k', label='Volume')

ax.set_xlabel('Date')
plt.legend(loc=2)

plt.tight_layout()
plt.xticks(plt.xticks()[0], df.index.date, rotation=45)
plt.show()


should get, Output:

• 'RangeIndex' object has no attribute 'date'. it gave me this message as error, what does that mean? df['Date] is a datetime64 type.i converted it, still i got this error. – Vinit Sutar Jul 4 '19 at 16:10
• I think you should change the index of df to Date. Use df = df.set_index('Date') to set the index of df to be Date column. – Abdul Jul 5 '19 at 18:07

I think what you are looking for is called twinx. I just used one of the examples given and slightly modified the input parameters:

import numpy as np
import matplotlib.pyplot as plt

date_name = "Date"
stem_name = "Day_Perc_Change"
plot_name = "No. of Trades"
t = df[date_name]
data1 = df[stem_name]
data2 = df[plot_name]

fig, ax1 = plt.subplots()

color = 'tab:blue'
ax1.set_xlabel(date_name)
ax1.set_ylabel(stem_name, color=color)
ax1.stem(t, data1)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:red'
ax2.set_ylabel(plot_name, color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()

• the package doesnt have any examples for overlaying stem plot and line lot? how shall i proceed? – Vinit Sutar Jul 1 '19 at 13:48
• can you add your example code how you plot so far? – El Burro Jul 1 '19 at 13:56
• df.plot(x="Date", y="No. of Trades", figsize=(10,8)) this is for line plot – Vinit Sutar Jul 1 '19 at 14:01
• plt.stem(x, y, bottom=0) plt.show() where x was Date and y was Day_Perc_Change – Vinit Sutar Jul 1 '19 at 14:01
• @VinitSutar would you add your code to your question? That would make it easier to read and more concise. – HS-nebula Jul 1 '19 at 14:04