Es scheint, dass Leute, die Datenanalysen durchführen, häufig Jupyter verwenden. Vielleicht ist Python allein nicht gut darin, Daten sofort als Grafik zu zeichnen, daher denke ich, dass dies im Browser erfolgt. Anzeigemethoden (HTML-Zeichnung) wie die Anzeige sind jedoch nur für Jupyter verfügbar und können in anderen Umgebungen nicht ausgeführt werden. Selbst wenn Sie sich auf den Artikel zur Datenanalyse von Qiita beziehen, funktioniert dieser möglicherweise nicht gut, wenn es sich bei der Zeichnungsumgebung um Ihre eigene Umgebung handelt. Dieses Mal habe ich einen Artikel verfasst, weil es notwendig war, die Grafik zu sehen, die von Pandas-Highcharts aus der Pycharm-Umgebung angezeigt wird.
Ich habe die folgende Funktion unter Bezugnahme auf den Quellcode von pandas-highcharts ausgeführt. Da display_charts von pandas-highcharts so eingestellt wurde, dass es bei Rückgabe angezeigt wird, lautet der Rückgabewert None. Kurz zuvor habe ich das Gefühl, dass ich es in eine HTML-Vorlage einbette und zurückkehre. (Referenz) https://github.com/gtnx/pandas-highcharts/blob/master/pandas_highcharts/display.py
def my_display_charts(df, chart_type="default", render_to=None, **kwargs):
from pandas_highcharts.core import serialize
from pandas_highcharts.display import _generate_div_id_chart
if chart_type not in ("default", "stock"):
raise ValueError("Wrong chart_type: accept 'default' or 'stock'.")
chart_id = render_to if render_to is not None else _generate_div_id_chart()
json_data = serialize(df, render_to=chart_id, chart_type=chart_type, **kwargs)
content = """
<div id="{chart_id}"</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.1/highstock.min.js"></script>
<script type="text/javascript">{data}</script>
"""
html = """
<!DOCTYPE html>
<html lang="ja">
<head>
<title>My Result</title>
</head>
<body>
{content}
</body>
</html>
"""
return html.format(content=content.format(chart_id=chart_id, data=json_data))
Die Verwendung ist wie folgt.
import pandas as pd
import webbrowser
import os
def my_display_charts(df, chart_type="default", render_to=None, **kwargs):
from pandas_highcharts.core import serialize
from pandas_highcharts.display import _generate_div_id_chart
if chart_type not in ("default", "stock"):
raise ValueError("Wrong chart_type: accept 'default' or 'stock'.")
chart_id = render_to if render_to is not None else _generate_div_id_chart()
json_data = serialize(df, render_to=chart_id, chart_type=chart_type, **kwargs)
content = """
<div id="{chart_id}"</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highcharts/8.1.1/highstock.min.js"></script>
<script type="text/javascript">{data}</script>
"""
html = """
<!DOCTYPE html>
<html lang="ja">
<head>
<title>My Result</title>
</head>
<body>
{content}
</body>
</html>
"""
return html.format(content=content.format(chart_id=chart_id, data=json_data))
df = pd.DataFrame([1, 2, 3, 5, 4], index=[list('abcde')])
html_data = my_display_charts(df, chart_type="stock", title="Mt Result", figsize=(640, 480), grid=True)
path = 'index.html'
with open(path, mode='w') as f:
f.write(html_data)
webbrowser.open_new_tab('file:///' + os.getcwd() + '/' + path_w)
Hoffentlich wird es im Standardbrowser Ihres PCs so gezeichnet. Es ist ärgerlich, dass der Browser jedes Mal geöffnet wird, aber ich kann es vorerst sehen. Das Diagramm ist umständlich, da es sich um einen ordnungsgemäß generierten Datenrahmen handelt.
Warum ist die horizontale Achse standardmäßig der Zeitstempel? Es wäre großartig, wenn das HTML-Element als Zeichenfolge an den Webbrowser übergeben werden könnte, aber anscheinend gibt es nur eine Möglichkeit, den Pfad zu übergeben. Deshalb habe ich ihn diesmal als index.html geschrieben. Auf die gleiche Weise können IPython.display und python-higchart auf die gleiche Weise angezeigt werden, solange das HTML-Element extrahiert werden kann. Dieses Mal musste ich nur highstock.min.js laden, aber in einigen Fällen kann auch highchart.js benötigt werden. Was highstock.min.js betrifft, wusste ich nicht, wo die Formel war, also habe ich sie aus dem Folgenden mitgebracht. https://cdnjs.com/libraries/highcharts
Klicken Sie hier für die offizielle Seite https://www.highcharts.com/
Recommended Posts