Zeichnet Plotly schöne Grafiken mit einer kleinen Menge Code, aber da ich nur matplotlib verwendet habe und nicht viel wusste, ist es ein Memorandum der Person, die versucht hat, beim Überprüfen loszulegen.
Google colaboratory
Wenn es colab ist, gibt es keine Installation, aber wenn nötig, können Sie es mit pip installieren
pip install plotly
Ich habe Zeitreihendaten, die sofort mit Seaborn verwendet werden können, daher werde ich sie verwenden. Das Folgende ist die Datenvorbereitung, also überspringen Sie sie
import seaborn as sns
import pandas as pd
from calendar import month_name
month_name_mappings = {name[:3]: n for n, name in enumerate(month_name)}
#Nur Datenaufbereitung
df = sns.load_dataset('flights')
df["month"] = df.month.apply(lambda x: month_name_mappings[x])
df["year-month"] = pd.to_datetime(df.year.astype(str) + "-" + df.month.astype(str))
ts_data = df[["passengers", "year-month"]].set_index("year-month")["passengers"]
ts_data
year-month
1949-01-01 112
1949-02-01 118
1949-03-01 132
1949-04-01 129
1949-05-01 121
...
1960-08-01 606
1960-09-01 508
1960-10-01 461
1960-11-01 390
1960-12-01 432
Name: passengers, Length: 144, dtype: int64
Einfache Daten zur Anzahl der Passagiere pro Monat.
Lassen Sie uns ein Diagramm erstellen
import plotly.graph_objects as go
fig = go.Figure()
fig.show()
Ich habe eine Grafik. Ich werde hier verschiedene Dinge hinzufügen.
#Liniendiagramm
fig = go.Figure()
fig.add_trace(go.Scatter(x=ts_data.index, y=ts_data.values, name="passengers"))
fig.show()
Versuchen Sie, den Speicher in logarithmischer Anzeige anzuzeigen
#Liniendiagramm
fig = go.Figure()
fig.add_trace(go.Scatter(x=ts_data.index, y=ts_data.values, name="passengers"))
#Spielen Sie mit dem Layout, um das Erscheinungsbild anzupassen
fig.update_layout(yaxis_type="log")
fig.show()
Ich möchte es luxuriöser machen, also werde ich versuchen, es auf verschiedene Arten zu visualisieren
#Knete ein paar Daten
ts_data_monthly = df.groupby("month")["passengers"].apply(list)
ts_sum_yearly = df.groupby("year")["passengers"].sum()
#Ich möchte mehrere Liniendiagramme erstellen
ts_data_monthly
month
1 [112, 115, 145, 171, 196, 204, 242, 284, 315, ...
2 [118, 126, 150, 180, 196, 188, 233, 277, 301, ...
3 [132, 141, 178, 193, 236, 235, 267, 317, 356, ...
4 [129, 135, 163, 181, 235, 227, 269, 313, 348, ...
5 [121, 125, 172, 183, 229, 234, 270, 318, 355, ...
6 [135, 149, 178, 218, 243, 264, 315, 374, 422, ...
7 [148, 170, 199, 230, 264, 302, 364, 413, 465, ...
8 [148, 170, 199, 242, 272, 293, 347, 405, 467, ...
9 [136, 158, 184, 209, 237, 259, 312, 355, 404, ...
10 [119, 133, 162, 191, 211, 229, 274, 306, 347, ...
11 [104, 114, 146, 172, 180, 203, 237, 271, 305, ...
12 [118, 140, 166, 194, 201, 229, 278, 306, 336, ...
Name: passengers, dtype: object
#Ich möchte ein Balkendiagramm erstellen
ts_sum_yearly
year
1949 1520
1950 1676
1951 2042
1952 2364
1953 2700
1954 2867
1955 3408
1956 3939
1957 4421
1958 4572
1959 5140
1960 5714
Name: passengers, dtype: int64
#Etikette(x-Achse)
ts_labels = ts_sum_yearly.index
ts_labels
Int64Index([1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959,
1960],
dtype='int64', name='year')
Lassen Sie es uns visualisieren. Ich habe ein wenig mit dem Layout gespielt.
fig = go.Figure()
#Machen Sie monatliche Zeitreihendaten zu einem Faltliniendiagramm
for month, passengers in ts_data_monthly.iteritems():
fig.add_trace(go.Scatter(x=ts_labels, y=passengers, name=str(month)+"Mond", yaxis='y2'))
#Erstellen Sie ein Balkendiagramm für die jährliche Gesamtsumme
fig.add_trace(go.Bar(x=ts_labels, y=ts_sum_yearly.values, name="gesamt", yaxis="y1"))
#Spielen Sie mit dem Layout, um das Erscheinungsbild anzupassen
#Da es zwei Achsen gibt, gibt es keinen Speicher
fig.update_layout(
title={
"text": "Anzahl der Zeitreihendaten der Passagiere",
"x":0.5,
"y": 0.9
},
legend={
"orientation":"h",
"x":0.5,
"xanchor":"center"
},
yaxis1={
"title": "Anzahl der Passagiere(gesamt)",
"side": "left",
"showgrid":False
},
yaxis2={
"title": "Anzahl der Passagiere(Nach Monaten)",
"side": "right",
"overlaying": "y",
"showgrid":False
}
)
fig.show()
Sie können die Legende flattern lassen. Es ist erstaunlich, ein Diagramm zeichnen zu können, das mit so wenig Code ein wenig verschoben werden kann ...
Donuts (süß)
import numpy as np
ts_sum_monthly = df.groupby("month")["passengers"].sum()
#Lassen Sie es wie eine mondgeschnittene Pizza mit den meisten Passagieren aussehen
pull=[0]*12
pull[np.argmax(ts_sum_monthly.values)] = 0.2
fig = go.Figure()
fig.add_trace(go.Pie(
labels=[str(month) + "Mond" for month in ts_sum_monthly.index],
values=ts_sum_monthly.values,
hole=.3,
pull=pull
)
)
fig.update_layout(
title={
"text": "Prozentsatz der Passagiere(1949~1960 insgesamt)",
"x":0.5,
"y": 0.9
}
)
fig.show()
Erstellen Sie ein Kreisdiagramm für die Gesamtzahl der Passagiere pro Jahr
from plotly.subplots import make_subplots
specs = [[{'type':'domain'}, {'type':'domain'}, {'type':'domain'}, {'type':'domain'}] for _ in range(3)]
# 3*Teilen Sie das Diagramm in 4 Gitter
fig = make_subplots(rows=3, cols=4, specs=specs)
#Position des Etikettentitels auf jedem Kreisdiagramm des Etiketts
pos_x = [0.09, 0.37, 0.63, 0.91]
pos_y = [0.9, 0.5, 0.1]
annotations = []
# (row, col)Platzieren Sie ein Kreisdiagramm an der Position von
row = 0
for i, (year, df_yearly) in enumerate(df.groupby(["year"])[["month","passengers"]]):
pull=[0]*12
pull[np.argmax(df_yearly.passengers.values)] = 0.2
col = i%4+1
if col == 1:
row += 1
annotations.append({
"text": str(year)+"Jahr",
"x": pos_x[col-1],
"y": pos_y[row-1],
"font_size": 10,
"showarrow":False
})
fig.add_trace(go.Pie(
labels=[str(month) + "Mond" for month in df_yearly.month.values],
values=df_yearly.passengers.values,
name=str(year)+"Jahr",
hole=.3,
pull=pull
),
row, col
)
fig.update_layout(
title={
"text": "Prozentsatz der Passagiere(Jährlich)",
"x":0.5,
"y": 0.9
},
annotations=annotations
)
fig.show()
Bin ich der einzige, der froh ist, dass die Grafiken funktionieren? Das nächste Mal möchte ich ein Webframework namens dash zusammenfassen, mit dem Sie Dashboards mit Plot erstellen können.
Recommended Posts