In this post I am going to discuss a Matplotlib feature which let you add multiple plots within a figure called subplots.
Subplots are helpful when you want to show different data presentation in a single view, for instance Dashboards.
There are multiple ways you can create subplots but I am here going to discuss the one which let you add graphs in grids by using
subplot2grid takes two mandatory parameters, the first one is size and the next is location. A typical
subplot2grid call will look like below:
ax = plt.subplot2grid((2, 2), (0, 0))
The first parameter is the size that is a 2 x 2 grid, the 2nd is the location or quadrant where the graph will be plotted. The illustration will help you to understand it further.
So first graph in
0,0, 2nd in
0,1 and so on..
Now let’s get into code. The data I am going to use is the Crypto Trading Data of my favorite coins on Bittrex Exchange. We will fetch data latest 5-min interval data from bittrex for Ethereum, Stratis, Ark and TenX coins and display as subplots within a figure.
import json import time import matplotlib.pyplot as plt import pandas as pd if __name__ == '__main__': # ETH data_eth_btc = get_data('BTC-ETH', 'fivemin') last_few = data_eth_btc.tail(50) close_eth = last_few['Close'] last_few['Time'] = pd.to_datetime(last_few['T']) del last_few['T'] # STRAT data_strat_btc = get_data('BTC-STRAT', 'fivemin') last_few_strat = data_strat_btc.tail(50) close_strat = last_few_strat['Close'] last_few_strat['Time'] = pd.to_datetime(last_few_strat['T']) del last_few_strat['T'] # ARK data_ark_btc = get_data('BTC-ARK', 'fivemin') last_few_ark = data_ark_btc.tail(50) close_ark = last_few_ark['Close'] last_few_ark['Time'] = pd.to_datetime(last_few_ark['T']) del last_few_ark['T'] # PAY data_pay_btc = get_data('BTC-PAY', 'fivemin') last_few_pay = data_pay_btc.tail(50) close_pay = last_few_pay['Close'] last_few_pay['Time'] = pd.to_datetime(last_few_pay['T']) del last_few_pay['T']
I am using a custom
get_data() function which takes interval and crypto pair and returns data in Pandas dataframe format. Since the objective is not to teach how data being fetched so I am not giving
get_data() code for sake of simplicity.
OK data is fetched in dataframe and I am picking last 50 entries thus using
tail() here. In order to show time data we need to use
pd.to_datetime to convert in internal datetime format and delete the original time data provided by the API by calling
Our required data is available and now we have to plot 4 graphs for different coins.
ax = plt.subplot2grid((2, 2), (0, 0)) ax.plot(last_few['Time'], close_eth) plt.title('BTC-ETH') ax1 = plt.subplot2grid((2, 2), (0, 1)) ax1.plot(last_few['Time'], close_strat) plt.title('BTC-STRAT') ax2 = plt.subplot2grid((2, 2), (1, 0)) ax2.plot(last_few_ark['Time'], close_ark) plt.title('BTC-ARK') ax3 = plt.subplot2grid((2, 2), (1, 1)) ax3.plot(last_few_pay['Time'], close_pay) plt.title('BTC-PAY') plt.show()
First, the grid was set and location is set and assigned to
ax variable and then the graph was plotted. Once all 4 graphs plotted they were then displayed by calling
show() once and something like below appears:
The graphs were plotted as of Dec, 25,2017 around 1PM(GMT+5) and you can see only ARK is on uptrend.
Alright and this sums up the Python Graph series in matplotlib. I might cover the candlestick graph but can’t commit so consider this series done here. As always, do give your feedback in comments below.