-
Tuần 1 - Ngày 10 tháng 7 năm 2019
- Giới thiệu về khóa học
- Hướng dẫn viết chương trình Python trên web
- Hướng dẫn sử dụng PyCharm
- Tổng quan về Python
- Kỹ năng sử dụng Google search
- Viết tài liệu kỹ thuật dùng Markdown
- Hàm xây dựng sẵn trong Python – math và random
- Cài đặt các công thức toán cơ bản
- Xây dựng hàm trong python
- Điều kiện if-else
- Những lỗi thường gặp trong Python
- Reading assignment
-
Tuần 2 - Ngày 17 tháng 7 năm 2019
-
Tuần 3 - Ngày 24 tháng 7 năm 2019
-
Tuần 4 - Ngày 31 tháng 7 năm 2019
-
Tuần 5 - Ngày 7 tháng 8 năm 2019
-
Advanced Python
-
Tuần 6 - Ngày 14 tháng 8 năm 2019
-
Tuần 7 - Ngày 28 tháng 8 năm 2019
-
Tuần 8
-
Tuần 9
Đọc thêm về matplotlib
Matploblib là một thư viện trực quan hoá dữ liệu phổ biến trong Python. Nó có thể vẽ được nhiều loại đồ thị khác nhau, và rất hữu ích khi làm việc cùng với NumPy.
Hướng dẫn này nhằm giúp các bạn nhanh chóng cách sử dụng được các chức năng cơ bản của Matplotlib.
1. Hướng dẫn cài đặt
– Nếu bạn có Anacoda, bạn có thể cài đặt dễ dàng từ Terminal:
conda install matplotlib
– Hoặc cài đặt Matplotlib từ Terminal bằng:
pip install matplotlib
2. Cấu trúc của Plot
Gồm 2 phần chính là: Figure & Axes
– Figure: là cửa sổ chứa tất cả mọi thứ được vẽ trên nó. Nó có thể chứa nhiều thành phần độc lập nhau như: các Axes khác nhau, tiêu đề, chú thích.
– Axes: là khu vực chứa dữ liệu được vẽ lên và các tiêu đề, chú thích gắn với nó.
3. Làm việc với matplotlib
Chúng ta sẽ bắt đầu bằng việc Import thư viện
# Chúng ta có thể sử dụng cách Import này from matplotlib import pyplot as plt # Hoặc một cách ngắn gọn hơn import matplotlib.pyplot as plt
Có 2 cách tiếp cận để vẽ 1 Plot
Cách 1: Sử dụng lệnh Matplotlib cơ bản
Một vài cú pháp cơ bản:
– plt.figure()
: tạo một figure
– plt.plot()
: vẽ đồ thị với giá trị trục x so với trục y
– plt.xlabel()
: đặt tên cho trục x
– plt.ylabel()
: đặt tên cho trục y
– plt.title()
: đặt tên cho figure
– plt.grid()
: hiển thị các đường lưới
– plt.legend()
: hiển thị chú thích cho đồ thị
– plt.savefig()
: lưu hình về máy
– plt.show()
: hiển thị hình vẽ
– plt.clf()
: xoá hình hiện tại (hữu ích khi có nhiều figure trong 1 chương trình)
Ví dụ: vẽ đồ thị hàm số: \(y = x^3\)
import numpy as np x = np.arange(-5, 5, 0.01) y = x ** 3 # Đặt tên plt.title('Hàm y = x^3') plt.xlabel('Trục x') plt.ylabel('Trục y') # Hiển thị lưới plt.grid() # Vẽ plt.plot() plt.plot(x, y, label='y = x^3') # HIển thị chú thích plt.legend() # Hiển thị hình vẽ plt.show()
Hình kết quả cho đoạn code trên
Hơn nữa, Matplotlib còn cho chúng ta có thể vẽ nhiều hình trên 1 Figure:
– Chúng ta có thể sử dụng phương thức subplot()
gồm có 3 thông số sau
– nrows
: số lượng hàng trên Figure
– ncols
: số lượng cột trên Figure
– plot_number
: vị trí của plot trong Figure
import numpy as np import matplotlib.pyplot as plt x = np.arange(-5, 5, 0.01) y = x ** 3 # plt.subplot(nrows, ncols, plot_number) # nrows = 1, ncols = 2 (1 hàng, 2 cột) plt.subplot(1, 2, 1) # vẽ ở vị trí 1 plt.plot(x, y, 'red') plt.subplot(1, 2, 2) # vẽ ở vị trí 2 plt.plot(x, y, 'green') plt.show()
Hình kết quả cho đoạn code trên
Cách 2: Phương thức hướng đối tượng
Như đã nói ở trên, thành phần chính của figure
là các axes
. Một figure
có thể chứa một hoặc nhiều axes
. Hay nói cách khác, figure
chỉ là khung chứa, chính xác axes
mới thật sự là nơi các hình được vẽ lên.
Bây giờ chúng ta thêm các axes
vào figure
, bằng phương thức add_axes()
gồm 4 đối số: (bên trái, phía dưới, chiều rộng, chiều cao)
.
import numpy as np import matplotlib.pyplot as plt x = np.arange(-5, 5, 0.01) y = x ** 3 # Khởi tạo figure trống fig = plt.figure() # Có thể gọi tắt subplot(1,1,1) thành subplot(111) fig.add_subplot(111) # facecolor là màu nền ax = fig.add_axes([0, 0.5, 0.5, 0.5], facecolor='#BECAFB') ax.plot(x, y, 'red') # Hiển thị figure hiện tại plt.show()
Hình kết quả cho đoạn code trên
Thêm tiêu đề cho các axes bằng cách dùng các hàm
– set_xlabel()
: tiêu đề trục x
– set_ylabel()
: tiêu đề trục y
– set_title()
: tiêu đề axes
Code sau tạo hai subplot
import numpy as np import matplotlib.pyplot as plt x = np.arange(-5, 5, 0.01) y = x ** 3 # Khởi tạo figure trống fig = plt.figure() # Có thể gọi tắt subplot(1,1,1) thành subplot(111) fig.add_subplot(111) ax = fig.add_axes([0, 0.5, 0.5, 0.5], facecolor='#BECAFB') ax.plot(x, y, 'red') ax.set_xlabel('Trục x') ax.set_ylabel('Trục y') ax.set_title('Hình thứ 1') # Tạo thêm 1 axes trong cùng 1 figure ax2 = fig.add_axes([0.5, -0.1, 0.5, 0.5]) x = np.linspace(0, 2, 100) ax2.plot(x, x, label='linear') ax2.plot(x, x**2, label='quadratic') ax2.plot(x, x**3, label='cubic') ax2.set_xlabel('Trục x') ax2.set_ylabel('Trục y') ax2.set_title('Hình thứ 2') ax2.legend() # Hiển thị figure hiện tại plt.show()
Hình kết quả cho đoạn code trên
Một số thuộc tính khác của Figure
1. Chỉnh kích thước của Figure
bằng phương thức figsize()
(đơn vị inch).
2. dpi
độ phân giải của hình, giá trị mặc định là 100. dpi
càng cao thì chất lượng ảnh càng cao.
3. Lưu Figure bằng fig.savefig()
Code ví dụ
import numpy as np import matplotlib.pyplot as plt x = np.arange(-5, 5, 0.01) y = x ** 3 # Khởi tạo nhanh Figure và Axes -> plt.subplots() fig, ax = plt.subplots(figsize=(10,5)) x = np.linspace(0, 2, 100) ax.plot(x, x, label='linear') ax.plot(x, x**2, label='quadratic') ax.plot(x, x**3, label='cubic') ax.set_xlabel('Trục x') ax.set_ylabel('Trục y') ax.set_title('Hình thứ 2') ax.legend() plt.show() # Lưu figure cùng thư mục với code fig.savefig('my_figure.png')
Hình kết quả cho đoạn code trên
Kiểm tra Figure đã lưu hay chưa?
import matplotlib.image as mpimg # Hiển thị hình ảnh lưu trong máy plt.imshow(mpimg.imread('my_figure.png'))
Để xoá nội dung của figure, chúng ta dùng hàm fig.clf()
hay plt.clf()
. Để đóng một figure, chúng ta dùng hàm plt.close(<Tên fig>)
.
Chỉnh trục toạ độ trong Figure ( Spines và Ticks của đồ thị )
Axis spine: đường ghi nhận ranh giới khu vực dữ liệu. Spine là đường kết nối các dấu ticks trên trục và ghi nhận ranh giới của khu vực dữ liệu. Chúng ta có thể cài đặt tuỳ ý.
Ví dụ: khảo sát và vẽ đồ thị hàm số \(y = sin(x)\)
Trong trường hợp chưa chỉnh các trục toạ độ
# Trong trường hợp chưa chỉnh các trục toạ độ import numpy as np import matplotlib.pyplot as plt x = np.arange(-10., 10., 0.2) y = np.sin(x) plt.plot(x, y) plt.show()
Hình kết quả cho đoạn code trên
Chỉnh lại trục toạ độ
# Chỉnh lại trục toạ độ import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(10,6)) x = np.arange(-10., 10., 0.2) y = np.sin(x) # Biến đường biên bên trên và bên phải -> vô hình ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') # Di chuyển đường bên dưới vào giữa & ở vị trí y = 0 ax.xaxis.set_ticks_position('bottom') ax.spines['bottom'].set_position(('data',0)) # Di chuyển đường bên trái vào giữa & ở vị trí x = 0 ax.yaxis.set_ticks_position('left') # ax.spines['left'].set_position(('data', 0)) # Hoặc thay ('data', 0) thành 'center' ax.spines['left'].set_position('center') ax.plot(x, y) plt.show()
Hình kết quả cho đoạn code trên
Vẽ đồ thị kiểu điểm
Trong nhiều trường hợp, ta muốn hiển thị từng điểm thay vì đường thẳng, việc chuyển đường thẳng sang điểm chúng ta sử dụng thêm các marker
trong plot()
.
Các marker
thông dụng:
Code ví dụ
import numpy as np import matplotlib.pyplot as plt t = np.arange(0., 10., 0.5) plt.plot(t, t**2, 'X') plt.show()
Hình kết quả cho đoạn code trên
Cách vẽ nối các điểm bằng đường
Một số kiểu linestyle
Code ví dụ
import numpy as np import matplotlib.pyplot as plt x = [1, 2, 3, 5] y = [4, 5, 6, 7] plt.plot(x, y, linestyle='--', marker='o', color='b') # Một cách ngắn hơn plt.plot(x, y, '--bo') plt.show()
Hình kết quả cho đoạn code trên
Cách vẽ một vài điểm trên đường
Code ví dụ
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-np.pi, np.pi, 30) y = np.sin(x) markers_on = [0, 19, 12, 5] plt.plot(x, y, '-gD', markevery=markers_on) plt.show()
Hình kết quả cho đoạn code trên
Tài liệu tham khảo
[1] Matploblib User’s Guide:
https://matplotlib.org/3.1.1/users/index.html
[2] Introduction to Matplotlib — Data Visualization in Python by Ehi Aigiomawu:
https://heartbeat.fritz.ai/introduction-to-matplotlib-data-visualization-in-python-d9143287ae39
[3] Matplotlib: Những điều cần biết để tùy chỉnh Figure như ý muốn:
https://texmath.com/matplotlib-nhung-lenh-can-biet-de-tuy-chinh-figure-nhu-y-muon/
Bài viết chia sẻ từ bạn Nguyễn Trung Thành
AIVIETNAM cám ơn sự đóng góp của bạn.
=========================================