web-dev-qa-db-fra.com

Comment afficher la trame de données à côté de Tracer dans le bloc-notes Jupyter

Je comprends comment afficher deux tracés côte à côte (horizontalement) dans Jupyter Notebook, mais je ne sais pas s'il existe un moyen d'afficher un tracé avec une trame de données à côté. J'imagine que cela pourrait ressembler à ceci:

enter image description here

Cependant, je ne suis pas en mesure de le faire, et chaque fois que j'imprime la trame de données, elle apparaît sous mon tracé ...

Ici est une question similaire, mais je génère également des tracés dans cette même cellule que je veux orienter verticalement.

J'ai actuellement ceci:

# line plots
df_plot[['DGO %chg','DLM %chg']].plot(figsize=(15,5),grid=True)
plt.ylim((-ylim,ylim))

df_plot[['Diff']].plot(kind='area',color='lightgrey',figsize=(15,1))
plt.xticks([])
plt.xlabel('')
plt.ylim((0,ylim_diff))
plt.show()

# scatter plots
plt.scatter(x=df_scat[:-7]['DGO'],y=df_scat[:-7]['DLM'])
plt.scatter(x=df_scat[-7:]['DGO'],y=df_scat[-7:]['DLM'],color='red')
plt.title('%s Cluster Last 7 Days'%asset)
plt.show()

# display dataframe
# display(df_scat[['DGO','DLM']][:10]) <-- prints underneath, not working

enter image description here

Où la boîte rouge indique où je veux que mon cadre de données apparaisse. Quelqu'un at-il des idées sur la façon de procéder?

Merci pour vos pensées!

16
David Yang

Je ne sais pas comment contrôler l'emplacement où le DataFrame s'affichera directement - mais une solution que j'ai utilisée dans le passé est de rendre le DataFrame comme une table matplotlib, puis il devrait se comporter comme n'importe quel autre tracé matplotlib. Vous pouvez utiliser:

import matplotlib.pyplot as plt
from matplotlib import six
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)

enter image description here

13
Charles Parr

Une autre possibilité est d'utiliser le html pour commander des choses, en suivant https://stackoverflow.com/a/44923103/49089 .

Voici un exemple de travail (il existe probablement des façons plus élégantes de le faire):

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)

enter image description here

3
Ezer K

Vous pouvez utiliser% matplotlib inline puis simplement écrire le code ex df.head () plt.plot (df ['X']) pour que% matplotlib inline trace le bloc de données ainsi que le tracé dans une cellule

0
HARSH MITTAL