Es hat die folgenden Funktionen / Merkmale. * Kein reines JavaScript-Plug-In erforderlich, funktioniert nur mit 2 JS-Dateien. * Verschiedene Diagrammtypen. * Gefaltetes Liniendiagramm. * Spline-Kurve
Es ist sehr raffiniert, aber für die kommerzielle Nutzung wird eine Gebühr erhoben.
Wie Sie dem Beispiel auf der offiziellen Website entnehmen können, können Sie ohne Einfallsreichtum ein schönes und cooles Diagramm zeichnen.
Es ist explosiv. Zeichnen wir als Beispiel ein Streudiagramm, in dem 1000 Punkte, wie unten gezeigt, in 7 Gruppen farbcodiert sind.
import numpy as np
import pandas as pd
num = 1000
x, y = np.random.random((2, num))
labels = np.random.choice(['a', 'b', 'c', 'e', 'f', 'g', 'h'], num)
df = pd.DataFrame(dict(x=x, y=y, label=labels))
Vergleichen wir es mit den folgenden drei typischen Bibliotheken.
Matplotlib
import matplotlib.pyplot as plt
groups = df.groupby('label')
colors = 'bgrcmyk'
for i, (name, group) in enumerate(groups):
plt.scatter(group.x, group.y, color=colors[i])
Bokeh
from bokeh.charts import Scatter, output_notebook, show
output_notebook()
show(Scatter(x='x', y='y', color='label', data=df))
Plotly
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode()
groups = df.groupby('label')
data = [{'x': group.x, 'y': group.y, 'mode': 'markers', 'name': name} for name, group in groups]
fig = {'data': data}
iplot(fig)
Highcharts
from highcharts import Highchart
groups = df.groupby('label')
options = {
'chart': {
'type': 'scatter',
},
}
H = Highchart()
H.set_dict_options(options)
for name, group in groups:
data = list(zip(group.x, group.y))
H.add_data_set(data, 'scatter', name)
H
Das Ergebnis sieht so aus.
Es gibt viele mögliche Gründe, aber es ist leicht.
Highcharts ist eine JavaScript-Bibliothek, daher müssen Sie etwas Einfallsreichtum zeigen, um sie mit Jupyter-Notebooks verwenden zu können. Es gibt eine Möglichkeit, eine Template-Engine usw. zu verwenden. Als einfaches Beispiel verwenden wir jedoch %% html magic.
from IPython.display import HTML
%%html
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<div id="container" style="width:300px; height:200px;"></div>
<script>
plot = function () {
$('#container').highcharts({
chart: {
type: 'line'
},
series: [{
data: [1, 2, 3]
}]
});
};
plot();
</script>
In der oben erwähnten %% html-Magie schreiben Sie nur JavaScript, nicht Python. Wenn Sie mit Variablen umgehen möchten, müssen Sie außerdem eine Vorlagen-Engine usw. verwenden, was problematisch ist.
Verwenden wir also Python-Highcharts, die Highcharts von Python aus aufrufen können.
Sie können es mit pip installieren.
pip install python-highcharts
Wenn Sie dasselbe Liniendiagramm implementieren, das von %% html magic implementiert wurde, wie oben mit Python-Highcharts beschrieben, sieht es wie folgt aus.
from highcharts import Highchart
H = Highchart(width=300, height=200)
H.add_data_set([1, 2, 3])
H
Es ist sehr sauber und jetzt kann ich in Python schreiben.
Übergeben Sie für das Erscheinungsbild des Diagramms einen Wörterbuchtypwert an "highcharts.Highchart.set_options ()". Mögliche Werte finden Sie in der Highcharts-Referenz (http://api.highcharts.com/highcharts).
from highcharts import Highchart
H = Highchart(width=300, height=200)
options = {
'title': {
'text': 'Überschrift'
},
'subtitle': {
'text': 'Untertitel'
},
'xAxis': {
'title': {'text': 'X-Achse'}
},
'yAxis': {
'title': {'text': 'Y-Achse'},
'lineWidth': 2
},
}
H.set_dict_options(options)
H.add_data_set([1, 2, 3])
H
Es ist auch möglich, für jeden einzelnen Parameter eine Einstellung vorzunehmen. Dies ist möglicherweise besser lesbar.
from highcharts import Highchart
H = Highchart(width=300, height=200)
H.set_options('title', {'text': 'Überschrift'})
H.set_options('subtitle', {'text': 'Untertitel'})
H.set_options('xAxis', {'title': {'text': 'X-Achse'}})
H.set_options('yAxis', {'title': {'text': 'Y-Achse'}, 'lineWidth': 2})
H.add_data_set([1, 2, 3])
H
Das Erscheinungsbild des Elements wird mit highcharts.Highchart.add_data_set ()
festgelegt.
from highcharts import Highchart
H = Highchart(width=300, height=200)
H.add_data_set([1, 2, 3], dashStyle='ShortDash', color='plum', lineWidth=6)
H
Geben Sie den Diagrammtyp im zweiten Argument von "highcharts.Highchart.add_data_set ()" an. Die Spezifikation jedes Positionsparameters ist wie folgt.
Positionsparameter | Objekt | Schimmel |
---|---|---|
1 | Datensatz | Liste, Taple |
2 | Diagrammtyp | String |
3 | Name | String |
Im folgenden Beispiel gibt das erste Element ein ebenes Diagramm mit dem Namen "data1" aus, und das zweite Element gibt ein Balkendiagramm mit dem Namen "data2" aus.
from highcharts import Highchart
H = Highchart(width=300, height=200)
H.add_data_set([1, 2, 3], 'area', 'data1')
H.add_data_set([4, 5, 6], 'bar', 'data2')
H
Wenn Sie auf ein Diagrammelement klicken, wird ein weiteres Diagramm angezeigt ... und so weiter.
Übergeben Sie Wörterbuchdaten an jedes Element von highcharts.Highchart.add_data_set ()
. Setzen Sie den Wörterbuchschlüssel auf "Drilldown" und den Wert auf den Namen, der dem Drilldown entspricht.
Um das Element nach dem Drilldown anzugeben, geben Sie die drei Argumente des oben in highcharts.Highchart.add_drilldown_data_set ()
beschriebenen Positionsparameters an. Entsprechen Sie dem dritten Namen mit dem höheren Element.
from highcharts import Highchart
H = Highchart(width=400, height=200)
data = [{
'y': 1,
'drilldown': 'a'
}, {
'y': 2,
'drilldown': 'b'
}, {
'y': 3,
'drilldown': 'c'
}]
H.add_data_set(data, 'column')
H.add_drilldown_data_set([0.3, 0.4, 0.3], 'pie', 'a')
H.add_drilldown_data_set([4, 5, 6], 'line', 'b')
H.add_drilldown_data_set([7, 8, 9], 'area', 'c')
H
Als Beispiel für die Verwendung von Drilldown erstellen wir ein Diagramm, in dem die Anzahl der Siege von 12 professionellen Baseballteams im Jahr 2016 in einem Balkendiagramm angezeigt wird. Klicken Sie auf jedes Element, um die Anzahl der Siege des Pitchers auszugeben.
import pandas as pd
from highcharts import Highchart
class Team:
def __init__(self):
self.team_names = ['Hawks', 'Fighters', 'Marines', 'Lions',
'Buffaloes', 'Eagles', 'Swallows', 'Giants',
'Tigers', 'Carp', 'Dragons', 'BayStars']
self.urls = [self.make_url(x) for x in self.team_names]
self.dfs = [self.load_pitcher_win_data(url) for url in self.urls]
self.wins = [df['win'].sum() for df in self.dfs]
self.team_data = [
self.make_y_dict(team_name, wins)
for team_name, wins in zip(self.team_names, self.wins)
]
self.pitcher_data = [df.values.tolist() for df in self.dfs]
def make_url(self, team_name):
def join_url(x):
return ''.join(('http://npb.jp/bis/2016/stats/idp1_', x, '.html'))
if team_name == 'Buffaloes':
return join_url('bs')
elif team_name == 'BayStars':
return join_url('db')
else:
return join_url(team_name[0].lower())
def load_pitcher_win_data(self, url):
tables = pd.read_html(url)
df = tables[0].iloc[2:, [1, 3]]
df.columns = ['pitcher', 'win']
df['win'] = df['win'].astype(float)
return df[df['win'] > 0]
def make_y_dict(self, team_name, wins):
return {'name': team_name, 'y': wins, 'drilldown': team_name}
t = Team()
options = {
'chart': {
'type': 'column'
},
'title': {
'text': 'Anzahl der Siege im Jahr 2016'
},
'subtitle': {
'text': 'Click the columns to view pitchers.'
},
'xAxis': {
'type': 'category'
},
'yAxis': {
'title': {
'text': 'win'
}
},
'legend': {
'enabled': False
},
'plotOptions': {
'series': {
'borderWidth': 0,
'dataLabels': {
'enabled': True,
}
}
},
'tooltip': {
'headerFormat':
'<span style="font-size:11px">{series.name}</span><br>',
},
}
H = Highchart(width=850, height=400)
H.set_dict_options(options)
H.add_data_set(t.team_data, 'column', "Team", colorByPoint=True)
for i, team_name in enumerate(t.team_names):
H.add_drilldown_data_set(
t.pitcher_data[i], 'column', team_name, name=team_name)
H
Sie können es mit pip installieren.
pip install pandas-highcharts
Wie der Name schon sagt, werden Pandas DataFrames mit Highcharts gezeichnet. Sie können ein Diagramm ausgeben, indem Sie dieselben Argumente wie "pandas.DataFrame.plot ()" an "pandas_highcharts.display.display_charts" übergeben.
import pandas as pd
from pandas_highcharts.display import display_charts
df = pd.DataFrame([1, 2, 3], index=[list('abc')])
display_charts(df, figsize=(300, 200))
Die Angabe des Diagrammtyps entspricht Pandas.
import pandas as pd
from pandas_highcharts.display import display_charts
df = pd.DataFrame([1, 2, 3], index=[list('abc')])
display_charts(df, kind='bar', figsize=(300, 200))
In Bezug auf die Funktionalität sind Python-Highcharts häufiger vorhanden. Wenn Sie jedoch Pandas-Daten visualisieren möchten, ist dies einfacher.
Recommended Posts