Hướng dẫn dùng python ploty python

Plotly (plotly.py) trong Python là một thư viện đồ họa tương tác, mã nguồn mở, và dựa trên nền tảng trình duyệt. So với các thư viện đồ họa phổ biến khác của Python như Matplotlib, Pandas Visualization, ggplot hay Seaborn thì Plotly có một lợi thế lớn khi tạo ra các biểu đồ tương tác nhất.

Lí do nên sử dụng Plotly

Tính tương tác mà Plotly đem đến giúp các biểu đồ thêm trực quan và thú vị hơn. Không những thế Plotly còn nhanh, dễ sử dụng (nhờ tài liệu hướng dẫn tuyệt vời), và kết hợp tốt với các thư viện khác của Python như NumPy và pandas. Đây sẽ là một lựa chọn tuyệt vời để tạo ra các biểu đồ tương tác, đồ thị chất lượng cao trong xử lý dữ liệu địa lý, khoa học, thống kê và tài chính. 

Hãy cùng bắt đầu với bước đầu tiên:

Cài đặt thư viện Plotly

  •  Sử dụng pip và gõ lệnh: pip install plotly 
  •  Hoặc bằng Anaconda, dùng lệnh: conda install -c plotly plotly=4.7.1 (nếu bạn chọn cài đặt phiên bản 4.7.1)

Lưu ý: Bạn nên cài đặt hai thư viện NumPy và pandas trước khi cài plotly. 

Các loại biểu đồ trong Plotly

Hiện tại thư viện Plotly hỗ trợ đa dạng các loại biểu đồ với 15 loại biểu đồ cơ bản, 12 loại biểu đồ Thống kê, 20 loại biểu đồ Khoa học, 8 loại biểu đồ Tài chính, 12 loại bản đồ, 14 loại biểu đồ 3D và nhiều tiện ích khác. Với một lượng lớn biểu đồ như vậy nên trong bài viết này mình chỉ giới thiệu một số biểu đồ cơ bản. Đối với các loại biểu đồ khác các bạn hãy truy cập vào các link trong bài để có thêm thông tin. 

1. Các loại biểu đồ cơ bản trong Plotly

Ở mục 1 này, mình sẽ giới thiệu với các bạn một số biểu đồ cơ bản: biểu đồ tán xạ, biểu đồ đường, biểu đồ cột và biểu đồ tròn.

1.1. Biểu đồ phân tán (Scatter Plot) với Plotly Express

Plotly Express là giao diện cấp cao, dễ sử dụng của Plotly, hoạt động trên dữ liệu "gọn gàng" ("tidy" data) và tạo ra các số liệu dễ tạo kiểu.

Với px.scatter (px as plotly.express), mỗi điểm dữ liệu được biểu diễn dưới dạng điểm đánh dấu, có vị trí được cho bởi các cột x và y.

# x và y là các đối tượng dạng mảng
import plotly.express as px
fig = px.scatter(x=[0, 1, 1, 2, 3, 4], y=[0, 1, 4, 16, 9, 16])
fig.show()

Output:

Hướng dẫn dùng python ploty python

Biểu đồ được vẽ trong trình duyệt mặc định. Khi bạn rê chuột vào mỗi điểm thì giá trị x và y của điểm đó sẽ được hiển thị. Vì vậy các loại biểu đồ trong Plotly có tính tương tác tốt. Phía trên biểu đồ có các icon với các chức năng khác nhau cho bạn sử dụng.


Bên cạnh px.scatter chức năng go.Scatter (go as plotly.graph_objects) cũng cung cấp nhiều kiểu vẽ biễu đồ phân tán. Với Scattergl() trong Scatter() bạn có thể một lượng lớn dữ liệu.
import plotly.graph_objects as go
import numpy as np

''' Vẽ 150,000 điểm dữ liệu ngẫu nhiên được tạo ra nhờ numpy
Dãy màu rainbow với màu sắc mỗi điểm là ngẫu nhiên
'''
N = 150000
fig = go.Figure(data=go.Scattergl(
    x = np.random.randn(N),
    y = np.random.randn(N),
    mode='markers',
    marker=dict(
        color=np.random.randn(N),
        colorscale='rainbow',
        line_width=1
    )
))

fig.show()

Output:


Các bạn có thể tìm hiểu thêm về biểu đồ phân tán tại đây.

1.2. Đồ thị đường thẳng (Line Charts)

a. Biểu đồ đường thẳng với plotly.express

Với px.line mỗi điểm dữ liệu được biểu diễn dưới dạng một đỉnh (vị trí được cho bởi các cột x và y) của dấu đa tuyến (polyline mark) trong không gian 2D. 
Ví dụ: Đồ thị Tuổi thọ trung bình ở Việt Nam. Mình lấy dữ liệu từ gapminder, một DataFrame trong pandas.

"""
x và y là các cột DataFrame
"""
import plotly.express as px
df = px.data.gapminder().query("country=='Vietnam'")
fig = px.line(df, x="year", y="lifeExp", title='Tuổi thọ trung bình ở Việt Nam')
fig.show()

Output:

b. Đồ thị đường thẳng với go.Scatter

Ngoài việc sử dụng Plotly Express thì bạn có thể sử dụng hàm go.Scatter từ plotly.graph_objects. Trong khi plotly.express có hai hàm scatter và line thì go.Scatter có thể được sử dụng cả cho các điểm vẽ (makers) hoặc các đường, tùy thuộc vào giá trị của mode
Ví dụ 1: Đồ thị đơn giản của hàm bậc hai y(x)= x2+3x+2

import plotly.graph_objects as go
import numpy as np
# Lấy vùng giá trị x từ 0 đến 14
x = np.arange(15)

# Vẽ đồ thị
fig = go.Figure(data=go.Scatter(x=x, y=x**2+3*x+2))

# Chỉnh sửa Layout
fig.update_layout(title='Hàm y(x)=x^2+3x+2',
                   xaxis_title='x',
                   yaxis_title='y(x)')
fig.show()

Output:


Ví dụ 2: Các mode trong go.Scatter: lines (đường), markers (điểm vẽ) và lines+markers (đường + điểm vẽ)
import plotly.graph_objects as go

# Tạo dữ liệu ngẫu nhiên với numpy
import numpy as np
np.random.seed(1)

N = 101
random_x = np.linspace(0, 10, N)
random_y0 = np.random.randn(N) + 10
random_y1 = np.random.randn(N) + 5
random_y2 = np.random.randn(N)

# Biểu đồ được vẽ theo các mode markers, lines và lines+markers được hiển thị tương ứng từ trên xuống 
fig = go.Figure()
fig.add_trace(go.Scatter(x=random_x, y=random_y0,
                    mode='markers',
                    name='điểm vẽ'))
fig.add_trace(go.Scatter(x=random_x, y=random_y1,
                    mode='lines',
                    name='đường'))
fig.add_trace(go.Scatter(x=random_x, y=random_y2,
                    mode='lines+markers',
                    name='đường và điểm vẽ'))

fig.show()

Output:

  

Các bạn có thể tìm hiểu thêm về biểu đồ đường tại đây.

1.3. Biểu đồ cột (Bar Charts)

Tương tự với biểu đồ đường thẳng, bạn có thể vẽ biểu đồ cột với plotly.express hoặc plotly.graph_objects. Dưới đây mình sẽ giới thiệu một số biểu đồ cột vẽ bằng plotly.graph_objects.
Ví dụ 1: Biểu đồ cột đơn giản về số lượng thú cưng một dãy phố.

import plotly.graph_objects as go
thu_cung=['chó', 'mèo', 'chuột Hamster']

fig = go.Figure([go.Bar(x=thu_cung, y=[73, 91, 5])])
fig.show()

Output:

 
Ví dụ 2: Biểu đồ nhóm cột - Số lượng thú cưng ở 3 dãy phố A, B và C.
import plotly.graph_objects as go
thu_cung=['chó', 'mèo', 'chuột Hamster']

fig = go.Figure(data=[
    go.Bar(name='Phố A', x=thu_cung, y=[73, 91, 5]),
    go.Bar(name='Phố B', x=thu_cung, y=[112, 181, 2]),
    go.Bar(name='Phố C', x=thu_cung, y=[57, 18, 33])
])
# Thay đổi kiểu cột thành nhóm cột bằng update_layout
fig.update_layout(barmode='group')
fig.show()

Output:


Ví dụ 3: Bạn có thể chuyển biểu đồ nhóm cột trên thành biểu đồ cột chồng bằng việc chuyển kiểu cột (barmode) sang stack.
import plotly.graph_objects as go
thu_cung=['chó', 'mèo', 'chuột Hamster']

fig = go.Figure(data=[
    go.Bar(name='Phố A', x=thu_cung, y=[73, 91, 5]),
    go.Bar(name='Phố B', x=thu_cung, y=[112, 181, 2]),
    go.Bar(name='Phố C', x=thu_cung, y=[57, 18, 33])
])
# Thay đổi kiểu cột sang kiểu cột chồng
fig.update_layout(barmode='stack')
fig.show()

Output:


Các bạn có thể tìm hiểu thêm về biểu đồ cột tại đây.

1.4 Biểu đồ tròn (Pie Charts)

Biểu đồ hình tròn là biểu đồ thống kê vòng tròn, được chia thành các lĩnh vực để minh họa tỷ lệ số. Mình sẽ giới thiệu biểu đồ tròn trong plotly được vẽ  bằng px.pie. Trong px.pie giá trị dữ liệu của vùng trong biểu đồ được đặt là values. Nhãn dán của vùng được đặt là names
Ví dụ 1: Biểu đồ tròn đơn giản - Thành phần không khí theo thể tích

import plotly.express as px

khi = ['Khí Nitơ','Khí Ôxy','Khí Agon','Khí Cacbonic','Khác']
values = [78.08, 20.94, 0.93, 0.035, 0.015]

# thêm hover về khối lượng phân tử cho biểu đồ
fig = px.pie(values=values, names=khi, title='Thành phần không khí theo thể tích')

fig.show()

Output:


Ví dụ 2: Trong ví dụ này, trước tiên chúng ta tạo biểu đồ hình tròn với px.pie, sử dụng một số tùy chọn của nó như hover_data (cột nào sẽ xuất hiện trong di chuột) hoặc labels (đổi lại tên cột). Để điều chỉnh thêm, mình gọi fig.update_traces để đặt các tham số khác của biểu đồ (bạn cũng có thể sử dụng fig.update_layout để thay đổi bố cục). Biểu đồ "Dân số châu Á năm 2007" với hover_data là tuổi thọ trung bình.

import plotly.express as px
f = px.data.gapminder().query("year == 2007").query("continent == 'Asia'")
fig = px.pie(f, values='pop', names='country',
             title='Dân số châu Á năm 2007',
             hover_data=['lifeExp'], labels={'lifeExp':'life expectancy'})
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()

Output:


Các bạn có thể tìm hiểu thêm về biểu đồ tròn tại đây.

Plotly còn nhiều loại biểu đồ cơ bản khác như biểu đồ bong bóng (Bubble Charts), biểu đồ điểm (Dot Plots), biểu đồ cột ngang (Horizontal Bar Charts),v.v.. Các bạn có thể tham khảo thêm tại đây.

2. Các loại biểu đồ, chức năng khác

Ở Mục 2 này mình xin liệt kê các loại biểu đồ, chức năng khác và link tham khảo đến các bạn.

Các loại biểu đồ Thống kê (Statistical Charts)

Bạn sẽ tìm thấy trong Ploty các loại biểu đồ thống kê mà bạn cần như biểu đồ sai số chuẩn (Error Bars), biểu đồ hộp (Box Plots), biểu đồ tần suất (Histograms), biểu đồ Distplots, biểu đồ tần suất 2D (2D Histograms),v.v.. Nếu bạn đam mê Phân tích dữ liệu thì bạn không nên bỏ qua các biểu đồ này. Bạn có thể tham khảo thêm tại đây.

Các loại biểu đồ Khoa học (Scientific Charts)

Biểu đồ gần như là công cụ không thể thiếu trong khoa học. Vì vậy Plotly đã cung cấp rất nhiều loại biểu đồ Khoa học như biểu đồ đường viền (Contour Plots), bản đồ nhiệt (Heatmaps), xử lý ảnh (Imshow), biểu đồ Log (Log Plots), v.v.. Với 20 loại khác, nhóm biểu đồ Khoa học có số lượng nhiều nhất trong tất cả các loại biểu đồ. Nếu bạn yêu thích khoa học thì đây là nhóm biểu đồ dành cho bạn. Chi tiết các loại biểu đồ Khoa học tại đây.

Các loại biểu đồ Tài chính

Từ báo cáo kinh doanh từng bộ phận nhỏ đến phân tích tình hình nền Tài chính đều luôn cần các biểu đồ trực quan. Với tính tương tác cao, UI sắp xếp gọn gàng, và dễ sử dụng, các biểu đồ Tài chính trong Plotly là một lựa chọn đáng cân nhắc dành cho các bạn quan tâm đến Tài chính. Các loại biểu đồ Tài chính được trình bày chi tiết tại đây.

Các loại bản đồ và đồ thị 3D

Các bạn cón nhớ môn Địa lý không? Hỏi đến chắc các bạn sẽ nghĩ ngay đến các bản đồ, đồ thị. Plotly cũng không quên cung cấp nhiều loại bản đồ với các phân tích khác nhau rất hữu ích. Đã có đồ thị 2D thì phải có đồ thị 3D. Thư viện đồ thị 3D của Plotly không hề thu kém với các thư viện đồ thị 3D khác. Các bạn quan tâm có thể tìm hiểu thêm về bản đồ tại đây và đồ thị 3D tại đây.

Các chức năng khác

Không những có đa dạng các loại biểu đồ mà Plotly còn hỗ trợ nhiều chức năng khác như Suplots, Transforms, Add Custom Controls, Animations, Chart Studio Integration, Jupyter Widgets Interaction, và các chức năng nâng cao như Smoothing, Plot CSV Data, Peak Finding, và Random Walk. Để tham khảo thêm các chức năng này, bạn truy cập vào từng mục tương ứng tại đây.

Tạm kết

Trên đây là những nét cơ bản về thư viện Plotly trong Python. Hiện tại thư viện Plotly cũng có sẵn cho R và JavaScript. Lần tới mình sẽ giới thiệu đến các bạn một thư viện rất hay khác của Python là Scipy. Đây là bài viết đầu tiên của mình nên rất mong nhận được sự góp ý từ các bạn. Cảm ơn các bạn đã đọc hết bài viết của mình.

Tham khảo

1. https://plotly.com/python/

2. https://pypi.org/project/plotly/

3. https://wiki.python.org/moin/Plotly