[PYTHON] [Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen

das ist

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.

Umgebung

Google colaboratory

Installation

Wenn es colab ist, gibt es keine Installation, aber wenn nötig, können Sie es mit pip installieren

pip install plotly

Datenaufbereitung

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.

Grundbetrieb

Lassen Sie uns ein Diagramm erstellen

import plotly.graph_objects as go

fig = go.Figure()
fig.show()

image.png

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()

image.png

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()

image.png

Ich möchte eine wunderschöne Grafik zeichnen

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()

image.png

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 ...

Andere

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()

image.png

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()

image.png

das Ende

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.

Die Seite, die ich als Referenz verwendet habe

Recommended Posts

[Visualisierung] Ich möchte mit Plotly ein schönes Diagramm zeichnen
(Matplotlib) Ich möchte ein Diagramm mit einer in Pixel angegebenen Größe zeichnen
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Ich möchte ein Spiel mit Python machen
Ich möchte mit Python in eine Datei schreiben
Zeichnen Sie mit NetworkX ein Diagramm
Zeichnen Sie mit networkx ein Diagramm
[Python] Wie zeichnet man mit Matplotlib ein Liniendiagramm?
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte eine Zeichenkette mit Hiragana teilen
Ich möchte einen Quantencomputer mit Python betreiben
Ich möchte eine lokale Variable mit Lambda binden
Zeichne ein Diagramm mit Julia + PyQtGraph (2)
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
Ich möchte eine Jupyter-Umgebung mit einem Befehl starten
Zeichnen Sie mit matplotlib ein loses Diagramm
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Zeichne ein Diagramm mit Julia + PyQtGraph (1)
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Ich möchte eine virtuelle Umgebung mit Jupyter Notebook verwenden!
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter
Ich möchte ○○ mit Pandas machen
Machen Sie eine schöne Grafik mit Plotly
Ich möchte mit Python debuggen
Zeichnen Sie ein Diagramm mit der PySimple-Benutzeroberfläche
Datenvisualisierung mit Python - Die Methode zum gleichzeitigen Zeichnen von Attribut-basierten Diagrammen mit "Facet" ist zu praktisch
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte Objekte mit OpenCV erkennen
Ich möchte in der Einschlussnotation drucken
So zeichnen Sie ein Diagramm mit Matplotlib
Ich möchte einen Blog mit Jupyter Notebook schreiben
Ich möchte eine Python-Umgebung erstellen
Ich möchte eine Pip-Installation mit PythonAnywhere durchführen
Ich möchte Protokolle mit Python analysieren
Ich möchte mit aws mit Python spielen
Zeichnen Sie ein Diagramm mit PyQtGraph Part 1-Drawing
Ich möchte mit matplotlib ein Diagramm mit Wellenlinien in der Mitte erstellen (ich möchte den Eindruck manipulieren).
Ich habe versucht, "Asciichart Py" zu verwenden, mit dem mit Python ein schönes Diagramm auf der Konsole gezeichnet werden kann.
Ich habe ein Systemkonfigurationsdiagramm mit Diagrams on Docker geschrieben
Ich möchte Matplotlib zu einem dunklen Thema machen
Zeichnen Sie eine flache Oberfläche mit einem Matplotlib-3D-Diagramm
Ich möchte einfach ein Rauschmodell erstellen
Zeichnen Sie in Jupyter ein Diagramm mit japanischen Beschriftungen
Ich möchte MATLAB feval mit Python verwenden
Ich möchte einen DataFrame in MSSQL einfügen
So zeichnen Sie vor der Optimierung ein 3D-Diagramm
Memo, mit dem ein Diagramm zum Plotten animiert wurde
Ich möchte mit Python ein Fenster erstellen
Zeichnen Sie ein Diagramm, indem Sie es mit Pandas groupby verarbeiten
[Python] Zeichnen Sie mit Dash Cytoscape ein gerichtetes Diagramm
Ich möchte datetime.datetime.now () auch mit pytest verspotten!
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Ich möchte mehrere Bilder mit matplotlib anzeigen.
Ich möchte 100 Datenwissenschaften mit Colaboratory schlagen
Ich möchte OREMO mit setParam sein!