How to Display Dataframe next to Plot in Jupyter Notebook
I'm not aware of how to control the location of where the DataFrame will display directly - but one work around I have used in the past is to render the DataFrame as a matplotlib table and then it should behave like any other matplotlib plot. You can use:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df = pd.DataFrame()
df['x'] = np.arange(0,11)
df['y'] = df['x']*2
fig = plt.figure(figsize=(8,5))
ax1 = fig.add_subplot(121)
ax1.scatter(x=df['x'],y=df['y'])
ax2 = fig.add_subplot(122)
font_size=14
bbox=[0, 0, 1, 1]
ax2.axis('off')
mpl_table = ax2.table(cellText = df.values, rowLabels = df.index, bbox=bbox, colLabels=df.columns)
mpl_table.auto_set_font_size(False)
mpl_table.set_fontsize(font_size)
You can always use ipwidgets:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import binom
n = 12[enter image description here][1]
p = 0.5
x = np.arange(0, n+1)
binomial_pmf = binom.pmf(x, n, p)
binomial_cdf = binom.cdf(x, n, p)
import ipywidgets as widgets
from ipywidgets import GridspecLayout
out_box1 = widgets.Output(layout={"border":"1px solid green"})
out_box2 = widgets.Output(layout={"border":"1px solid green"})
with out_box1:
display(pd.DataFrame({'k':x,'binom pmf':np.round(binomial_pmf,4),'binom cdf':np.round(binomial_cdf,4)}).set_index('k'))
with out_box2:
fig, ax1 = plt.subplots(figsize=(10,6))
ax2 = ax1.twinx()
ax1.plot(x, binomial_pmf, 'b-')
ax2.plot(x, binomial_cdf, 'r-')
plt.title(f"Binomial Distribution (n={n}, p={p})")
ax1.grid(color = 'green', linestyle = '--', linewidth = 0.5,b=None, which='major', axis='both')
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
ax1.set_ylabel('binomial mdf', color='b')
ax2.set_ylabel('binomial cdf', color='r')
plt.show()
grid = GridspecLayout(10, 4)
grid[:, 0] = out_box1
grid[:, 1:4] = out_box2
grid
DataFrame - Plot side by side
Another possibility is to use the html to order things, following https://stackoverflow.com/a/44923103/4908900.
Here is a working example, (there are probably more elegant ways to do it):
prefix = \
"""
<!DOCTYPE html>
<html>
<head>
<style>
* {
box-sizing: border-box;
}
.column {
float: left;
width: 33.33%;
padding: 5px;
}
/* Clearfix (clear floats) */
.row::after {
content: "";
clear: both;
display: table;
}
</style>
</head>
<body>
<h2>title</h2>
<div class="row">
<div class="column">
"""
suffix = \
"""
</div>
<div class="column">
<img src="pic_file.png" alt="Graph" style="width:100%">
</div>
</div>
</body>
</html>
"""
df = pd.DataFrame(np.arange(36).reshape((6,6)),columns=['A','B','C','D','E','F'])
ax = df.plot(lw=4)
title = "mock data"
fig = ax.get_figure()
fig.savefig(title+".png")
html = prefix.replace('title', title)+df.to_html()+suffix.replace('pic_file.png', title+".png")
display_html(html, raw=True)