Phân tán Matplotlib
Tạo đồ thị phân tán
Với Pyplot, bạn có thể sử dụng hàm scatter()
để vẽ biểu đồ phân tán.
Hàm scatter()
vẽ một dấu chấm cho mỗi quan sát. Nó cần hai mảng có cùng độ dài, một mảng cho các giá trị của trục x và một mảng cho các giá trị trên trục y:
Ví dụ
Một biểu đồ phân tán đơn giản:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y)
plt.show()
Kết quả:
Hãy tự mình thử »Quan sát trong ví dụ trên là kết quả của 13 ô tô đi ngang qua.
Trục X hiển thị tuổi thọ của xe.
Trục Y hiển thị tốc độ của ô tô khi đi qua.
Có mối quan hệ nào giữa các quan sát không?
Có vẻ như xe càng mới thì chạy càng nhanh nhưng đó có thể chỉ là trùng hợp thôi, dù sao chúng tôi cũng chỉ đăng ký 13 xe.
So sánh các ô
Trong ví dụ trên, dường như có mối quan hệ giữa tốc độ và tuổi tác, nhưng điều gì sẽ xảy ra nếu chúng ta vẽ đồ thị các quan sát từ một ngày khác? Biểu đồ phân tán có cho chúng ta biết điều gì khác không?
Ví dụ
Vẽ hai đồ thị trên cùng một hình:
import matplotlib.pyplot as plt
import numpy as np
#day one, the age
and speed of 13 cars:
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y)
#day two, the age and speed of 15 cars:
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y)
plt.show()
Kết quả:
Hãy tự mình thử »Lưu ý: Hai ô được vẽ bằng hai màu khác nhau, theo mặc định là xanh lam và cam, bạn sẽ học cách thay đổi màu ở phần sau của chương này.
Bằng cách so sánh hai đồ thị, tôi nghĩ có thể an toàn khi nói rằng cả hai đều cho chúng ta cùng một kết luận: chiếc xe càng mới thì lái càng nhanh.
Màu sắc
Bạn có thể đặt màu của riêng mình cho từng ô phân tán bằng color
hoặc đối số c
:
Ví dụ
Đặt màu của riêng bạn cho các điểm đánh dấu:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x,
y, color = 'hotpink')
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = '#88c999')
plt.show()
Kết quả:
Hãy tự mình thử »Tô màu từng chấm
Bạn thậm chí có thể đặt màu cụ thể cho từng dấu chấm bằng cách sử dụng mảng màu làm giá trị cho đối số c
:
Lưu ý: Bạn không thể sử dụng đối số color
cho mục này mà chỉ sử dụng đối số c
.
Ví dụ
Đặt màu của riêng bạn cho các điểm đánh dấu:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
Kết quả:
Hãy tự mình thử »Bản đồ màu
Mô-đun Matplotlib có một số bản đồ màu có sẵn.
Bản đồ màu giống như một danh sách các màu, trong đó mỗi màu có giá trị nằm trong khoảng từ 0 đến 100.
Đây là một ví dụ về bản đồ màu:
Bản đồ màu này được gọi là 'viridis' và như bạn có thể thấy, nó nằm trong khoảng từ 0, là màu tím, đến 100, là màu vàng.
Cách sử dụng Bản đồ màu
Bạn có thể chỉ định bản đồ màu với đối số từ khóa cmap
với giá trị của bản đồ màu, trong trường hợp này là 'viridis'
, một trong những bản đồ màu tích hợp sẵn có trong Matplotlib.
Ngoài ra, bạn phải tạo một mảng có các giá trị (từ 0 đến 100), một giá trị cho mỗi điểm trong biểu đồ phân tán:
Ví dụ
Tạo một mảng màu và chỉ định bản đồ màu trong biểu đồ phân tán:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
Kết quả:
Hãy tự mình thử » Bạn có thể đưa bản đồ màu vào bản vẽ bằng cách đưa vào câu lệnh plt.colorbar()
:
Ví dụ
Bao gồm bản đồ màu thực tế:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0,
10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
Kết quả:
Hãy tự mình thử »Bản đồ màu có sẵn
Bạn có thể chọn bất kỳ bản đồ màu tích hợp nào:
Name | Reverse | |||
---|---|---|---|---|
Accent | Try it » | Accent_r | Try it » | |
Blues | Try it » | Blues_r | Try it » | |
BrBG | Try it » | BrBG_r | Try it » | |
BuGn | Try it » | BuGn_r | Try it » | |
BuPu | Try it » | BuPu_r | Try it » | |
CMRmap | Try it » | CMRmap_r | Try it » | |
Dark2 | Try it » | Dark2_r | Try it » | |
GnBu | Try it » | GnBu_r | Try it » | |
Greens | Try it » | Greens_r | Try it » | |
Greys | Try it » | Greys_r | Try it » | |
OrRd | Try it » | OrRd_r | Try it » | |
Oranges | Try it » | Oranges_r | Try it » | |
PRGn | Try it » | PRGn_r | Try it » | |
Paired | Try it » | Paired_r | Try it » | |
Pastel1 | Try it » | Pastel1_r | Try it » | |
Pastel2 | Try it » | Pastel2_r | Try it » | |
PiYG | Try it » | PiYG_r | Try it » | |
PuBu | Try it » | PuBu_r | Try it » | |
PuBuGn | Try it » | PuBuGn_r | Try it » | |
PuOr | Try it » | PuOr_r | Try it » | |
PuRd | Try it » | PuRd_r | Try it » | |
Purples | Try it » | Purples_r | Try it » | |
RdBu | Try it » | RdBu_r | Try it » | |
RdGy | Try it » | RdGy_r | Try it » | |
RdPu | Try it » | RdPu_r | Try it » | |
RdYlBu | Try it » | RdYlBu_r | Try it » | |
RdYlGn | Try it » | RdYlGn_r | Try it » | |
Reds | Try it » | Reds_r | Try it » | |
Set1 | Try it » | Set1_r | Try it » | |
Set2 | Try it » | Set2_r | Try it » | |
Set3 | Try it » | Set3_r | Try it » | |
Spectral | Try it » | Spectral_r | Try it » | |
Wistia | Try it » | Wistia_r | Try it » | |
YlGn | Try it » | YlGn_r | Try it » | |
YlGnBu | Try it » | YlGnBu_r | Try it » | |
YlOrBr | Try it » | YlOrBr_r | Try it » | |
YlOrRd | Try it » | YlOrRd_r | Try it » | |
afmhot | Try it » | afmhot_r | Try it » | |
autumn | Try it » | autumn_r | Try it » | |
binary | Try it » | binary_r | Try it » | |
bone | Try it » | bone_r | Try it » | |
brg | Try it » | brg_r | Try it » | |
bwr | Try it » | bwr_r | Try it » | |
cividis | Try it » | cividis_r | Try it » | |
cool | Try it » | cool_r | Try it » | |
coolwarm | Try it » | coolwarm_r | Try it » | |
copper | Try it » | copper_r | Try it » | |
cubehelix | Try it » | cubehelix_r | Try it » | |
flag | Try it » | flag_r | Try it » | |
gist_earth | Try it » | gist_earth_r | Try it » | |
gist_gray | Try it » | gist_gray_r | Try it » | |
gist_heat | Try it » | gist_heat_r | Try it » | |
gist_ncar | Try it » | gist_ncar_r | Try it » | |
gist_rainbow | Try it » | gist_rainbow_r | Try it » | |
gist_stern | Try it » | gist_stern_r | Try it » | |
gist_yarg | Try it » | gist_yarg_r | Try it » | |
gnuplot | Try it » | gnuplot_r | Try it » | |
gnuplot2 | Try it » | gnuplot2_r | Try it » | |
gray | Try it » | gray_r | Try it » | |
hot | Try it » | hot_r | Try it » | |
hsv | Try it » | hsv_r | Try it » | |
inferno | Try it » | inferno_r | Try it » | |
jet | Try it » | jet_r | Try it » | |
magma | Try it » | magma_r | Try it » | |
nipy_spectral | Try it » | nipy_spectral_r | Try it » | |
ocean | Try it » | ocean_r | Try it » | |
pink | Try it » | pink_r | Try it » | |
plasma | Try it » | plasma_r | Try it » | |
prism | Try it » | prism_r | Try it » | |
rainbow | Try it » | rainbow_r | Try it » | |
seismic | Try it » | seismic_r | Try it » | |
spring | Try it » | spring_r | Try it » | |
summer | Try it » | summer_r | Try it » | |
tab10 | Try it » | tab10_r | Try it » | |
tab20 | Try it » | tab20_r | Try it » | |
tab20b | Try it » | tab20b_r | Try it » | |
tab20c | Try it » | tab20c_r | Try it » | |
terrain | Try it » | terrain_r | Try it » | |
twilight | Try it » | twilight_r | Try it » | |
twilight_shifted | Try it » | twilight_shifted_r | Try it » | |
viridis | Try it » | viridis_r | Try it » | |
winter | Try it » | winter_r | Try it » |
Kích cỡ
Bạn có thể thay đổi kích thước của các dấu chấm bằng đối số s
.
Cũng giống như màu sắc, hãy đảm bảo mảng cho kích thước có cùng độ dài với mảng cho trục x và y:
Ví dụ
Đặt kích thước của riêng bạn cho các điểm đánh dấu:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes)
plt.show()
Kết quả:
Hãy tự mình thử »Alpha
Bạn có thể điều chỉnh độ trong suốt của các dấu chấm bằng đối số alpha
.
Cũng giống như màu sắc, hãy đảm bảo mảng cho kích thước có cùng độ dài với mảng cho trục x và y:
Ví dụ
Đặt kích thước của riêng bạn cho các điểm đánh dấu:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
sizes =
np.array([20,50,100,200,500,1000,60,90,10,300,600,800,75])
plt.scatter(x,
y, s=sizes, alpha=0.5)
plt.show()
Kết quả:
Hãy tự mình thử »Kết hợp kích thước màu và Alpha
Bạn có thể kết hợp bản đồ màu với các kích thước khác nhau của dấu chấm. Điều này được hình dung tốt nhất nếu các dấu chấm trong suốt:
Ví dụ
Tạo mảng ngẫu nhiên với 100 giá trị cho điểm x, điểm y, màu sắc và kích thước:
import matplotlib.pyplot as plt
import numpy as np
x =
np.random.randint(100, size=(100))
y = np.random.randint(100, size=(100))
colors = np.random.randint(100, size=(100))
sizes = 10 * np.random.randint(100,
size=(100))
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='nipy_spectral')
plt.colorbar()
plt.show()