Idenya
Tabel angka membuat orang menyipitkan mata. Grafik membuat mereka mengangguk. Plotly Express (di-import sebagai px) adalah cara tercepat mengubah DataFrame pandas menjadi grafik interaktif: satu pemanggilan fungsi, dan kamu mendapat grafik yang bisa di-hover, di-zoom dan diunduh sebagai gambar.
Setiap fungsi Plotly Express mengikuti pola yang sama, itulah sebabnya ia sangat mudah dipelajari:
fig = px.chart_type(data_frame, x="column", y="column", ...)
fig.show()
Kamu memberinya DataFrame, memberi tahu kolom mana untuk sumbu mana, dan ia mengembalikan objek figure. fig.show() menggambarnya. Di situs ini, grafik muncul di tab Output.
Modul ini membahas dua grafik yang paling sering akan kamu pakai: grafik garis untuk perubahan dari waktu ke waktu, dan scatter plot untuk hubungan antara dua angka.
Grafik garis: bagaimana sesuatu berubah dari waktu ke waktu
Ini revenue Toko Kita di paruh pertama 2024:
import pandas as pd
import plotly.express as px
monthly = pd.DataFrame({
"month": ["2024-01", "2024-02", "2024-03", "2024-04", "2024-05", "2024-06"],
"revenue": [1693000, 1957000, 1517000, 4227000, 2552000, 1680000],
"orders": [6, 5, 3, 8, 5, 3],
})
fig = px.line(monthly, x="month", y="revenue", title="Monthly revenue")
fig.show()
Tekan Try it. Kamu akan melihat garis dengan lonjakan jelas di bulan April. Arahkan kursor ke sebuah titik dan Plotly menampilkan bulan dan revenue persisnya, tanpa kode tambahan.
px.line()menggambar grafik garis.- Argumen pertama adalah DataFrame. Plotly Express selalu menginginkan DataFrame (atau sesuatu yang mirip).
x="month"dany="revenue"adalah nama kolom, sebagai string. Kamu tidak memberikan nilainya, kamu memberi tahu Plotly di mana menemukannya.title=mengatur judul grafik.
Menambahkan marker
Garis polos bisa menyembunyikan berapa banyak titik datanya. markers=True menambahkan titik di setiap data:
fig = px.line(monthly, x="month", y="orders", title="Orders per month", markers=True)
fig.show()
Dengan data hanya enam bulan, marker membuat jelas bahwa setiap titik adalah satu bulan, sehingga pembaca tidak membayangkan ada data di antara titik-titiknya.
Pakai grafik garis saat sumbu x punya urutan alami (hari, bulan, tahun) dan kamu peduli pada tren-nya. Menghubungkan titik dengan garis berarti "titik-titik ini berurutan". Jangan pakai garis untuk kategori seperti nama produk, karena tidak ada apa pun "di antara" mug dan kettle.
Scatter plot: adakah hubungannya?
Scatter plot menaruh satu titik per baris, dengan satu angka di setiap sumbu. Ia menjawab pertanyaan seperti "apakah produk yang lebih murah terjual lebih banyak unit?"
products = pd.DataFrame({
"product": ["Arabica Gayo 250g", "USB-C Hub", "Notebook A5 Dotted", "Pour-over Kettle",
"Gel Pen Set", "Desk Lamp LED", "Ceramic Mug", "Toraja Kalosi 250g"],
"price": [95000, 289000, 45000, 320000, 38000, 245000, 55000, 110000],
"units_sold": [12, 14, 11, 10, 3, 10, 1, 10],
})
fig = px.scatter(products, x="price", y="units_sold", hover_name="product",
title="Price vs units sold")
fig.show()
px.scatter()menggambar satu marker per baris.hover_name="product"menaruh nama produk dengan huruf tebal di bagian atas kotak hover. Tanpa itu, pembaca melihat titik di (289000, 14) dan tidak tahu produk apa itu.
Di data ini tidak ada pola yang jelas: produk mahal seperti USB-C Hub terjual sama baiknya dengan notebook yang murah. Itu juga sebuah temuan. Scatter plot sering menjadi cara tercepat untuk menemukan bahwa hubungan yang kamu asumsikan ternyata tidak ada.
Objek figure
px.line() dan px.scatter() tidak menggambar apa pun dengan sendirinya. Mereka mengembalikan figure, objek Python yang mendeskripsikan grafiknya. Menggambarnya adalah langkah terpisah. Pemisahan itu berguna: kamu bisa membangun figure, memeriksanya, menyesuaikannya dan baru kemudian menampilkannya.
fig = px.line(monthly, x="month", y="revenue")
print(type(fig))
print(fig.data[0].type, fig.data[0].mode)
print(fig.data[0].y.tolist())
<class 'plotly.graph_objs._figure.Figure'>
scatter lines
[1693000, 1957000, 1517000, 4227000, 2552000, 1680000]
Dua hal yang perlu diperhatikan:
fig.dataadalah list trace, satu per seri tanda. Grafik sederhana punya satu trace,fig.data[0].- Plotly menggambar grafik garis sebagai trace
scatterdenganmodebernilai"lines". Trace scatter denganmode="markers"adalah titik-titik. Dalam model Plotly, garis dan titik adalah dua gaya dari jenis trace yang sama.
Kamu akan bekerja langsung dengan trace di modul Graph Objects. Untuk sekarang, cukup ketahui bahwa figure adalah data yang bisa kamu periksa, dan begitulah situs ini memeriksa grafikmu.
Typo di nama kolom memunculkan error seperti ValueError: Value of 'x' is not the name of a column in 'data_frame'. Expected one of ['month', 'revenue', 'orders'] but received: Month. Baca bagian akhir pesannya: Plotly mendaftar nama-nama kolom yang sebenarnya untukmu.
Mengapa ini penting untuk kode yang bersih
Pisahkan persiapan data dan penggambaran: bangun DataFrame yang tidy dulu (satu baris per titik, nama kolom yang jelas), lalu buat grafiknya dalam satu pemanggilan px yang mudah dibaca. Saat grafiknya salah, kamu akan tahu apakah harus memperbaiki data atau grafiknya. Dan beri nama figure sesuai apa yang ditampilkannya, seperti revenue_trend atau price_vs_units, begitu kamu punya lebih dari satu.
Rangkuman
import plotly.express as px, lalufig = px.function(df, x="col", y="col"), lalufig.show().- Grafik garis (
px.line) menunjukkan perubahan di sepanjang sumbu yang berurutan seperti waktu.markers=Truemenampilkan setiap titik data. - Scatter plot (
px.scatter) menunjukkan hubungan antara dua angka.hover_name=memberi label setiap titik. title=mengatur judul. Kolom diberikan berdasarkan nama, sebagai string.- Figure adalah objek:
fig.databerisi trace-nya. Grafik garis adalah tracescatterdenganmode="lines".