Matplotlib Scatter
Tạo các lô phân tán
Với Pyplot, bạn có thể sử dụng scatter()
chức năng để vẽ biểu đồ phân tán.
Hàm scatter()
vẽ một dấu chấm cho mỗi lần quan sát. Nó cần hai mảng có cùng độ dài, một cho các giá trị của trục x và một cho các giá trị trên trục y:
Thí dụ
Một âm mư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ả:
Quan sát trong ví dụ trên là kết quả của 13 chiếc ô tô chạy qua.
Trục X cho biết chiếc xe cũ bao nhiêu tuổi.
Trục Y thể hiện vận tốc của ô tô khi nó đi qua.
Có bất kỳ mối quan hệ nào giữa các quan sát không?
Có vẻ như chiếc xe càng mới thì lái càng nhanh, nhưng đó có thể là một sự trùng hợp ngẫu nhiên, dù sao chúng tôi cũng chỉ đăng ký 13 chiếc.
So sánh lô đất
Trong ví dụ trên, dường như có một 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 lập biểu đồ các quan sát từ một ngày khác? Liệu âm mưu phân tán có cho chúng ta biết điều gì khác không?
Thí 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ả:
Lưu ý: Hai ô được vẽ với 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 sắc ở phần sau của chương này.
Bằng cách so sánh hai mảnh đất, tôi nghĩ rằng có thể nói rằng cả hai đều cho chúng ta cùng một kết luận: 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 mỗi biểu đồ phân tán với
color
hoặc c
đối số:
Thí dụ
Đặt màu đánh dấu của riêng bạ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, 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ả:
Màu sắc từng chấm
Bạn thậm chí có thể đặt một màu cụ thể cho từng chấm bằng cách sử dụng một mảng màu làm giá trị cho
c
đối số:
Lưu ý: Bạn không thể sử dụng color
đối số cho điều này, chỉ c
đối số.
Thí dụ
Đặt màu đánh dấu của riêng bạ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(["red","green","blue","yellow","pink","black","orange","purple","beige","brown","gray","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
Kết quả:
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ó một 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, có màu tím và lên đế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 'viridis'
này là một trong những bản đồ màu dựng sẵn có sẵn trong Matplotlib.
Ngoài ra, bạn phải tạo một mảng với các giá trị (từ 0 đến 100), một giá trị cho mỗi điểm trong biểu đồ phân tán:
Thí dụ
Tạo một mảng màu và chỉ định một 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ả:
Bạn có thể bao gồm bản đồ màu trong bản vẽ bằng cách bao gồm plt.colorbar()
câu lệnh:
Thí 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ả:
Bản đồ màu có sẵn
Bạn có thể chọn bất kỳ bản đồ màu nào được tích hợp sẵn:
Name | Reverse | |||
---|---|---|---|---|
Accent | Accent_r | |||
Blues | Blues_r | |||
BrBG | BrBG_r | |||
BuGn | BuGn_r | |||
BuPu | BuPu_r | |||
CMRmap | CMRmap_r | |||
Dark2 | Dark2_r | |||
GnBu | GnBu_r | |||
Greens | Greens_r | |||
Greys | Greys_r | |||
OrRd | OrRd_r | |||
Oranges | Oranges_r | |||
PRGn | PRGn_r | |||
Paired | Paired_r | |||
Pastel1 | Pastel1_r | |||
Pastel2 | Pastel2_r | |||
PiYG | PiYG_r | |||
PuBu | PuBu_r | |||
PuBuGn | PuBuGn_r | |||
PuOr | PuOr_r | |||
PuRd | PuRd_r | |||
Purples | Purples_r | |||
RdBu | RdBu_r | |||
RdGy | RdGy_r | |||
RdPu | RdPu_r | |||
RdYlBu | RdYlBu_r | |||
RdYlGn | RdYlGn_r | |||
Reds | Reds_r | |||
Set1 | Set1_r | |||
Set2 | Set2_r | |||
Set3 | Set3_r | |||
Spectral | Spectral_r | |||
Wistia | Wistia_r | |||
YlGn | YlGn_r | |||
YlGnBu | YlGnBu_r | |||
YlOrBr | YlOrBr_r | |||
YlOrRd | YlOrRd_r | |||
afmhot | afmhot_r | |||
autumn | autumn_r | |||
binary | binary_r | |||
bone | bone_r | |||
brg | brg_r | |||
bwr | bwr_r | |||
cividis | cividis_r | |||
cool | cool_r | |||
coolwarm | coolwarm_r | |||
copper | copper_r | |||
cubehelix | cubehelix_r | |||
flag | flag_r | |||
gist_earth | gist_earth_r | |||
gist_gray | gist_gray_r | |||
gist_heat | gist_heat_r | |||
gist_ncar | gist_ncar_r | |||
gist_rainbow | gist_rainbow_r | |||
gist_stern | gist_stern_r | |||
gist_yarg | gist_yarg_r | |||
gnuplot | gnuplot_r | |||
gnuplot2 | gnuplot2_r | |||
gray | gray_r | |||
hot | hot_r | |||
hsv | hsv_r | |||
inferno | inferno_r | |||
jet | jet_r | |||
magma | magma_r | |||
nipy_spectral | nipy_spectral_r | |||
ocean | ocean_r | |||
pink | pink_r | |||
plasma | plasma_r | |||
prism | prism_r | |||
rainbow | rainbow_r | |||
seismic | seismic_r | |||
spring | spring_r | |||
summer | summer_r | |||
tab10 | tab10_r | |||
tab20 | tab20_r | |||
tab20b | tab20b_r | |||
tab20c | tab20c_r | |||
terrain | terrain_r | |||
twilight | twilight_r | |||
twilight_shifted | twilight_shifted_r | |||
viridis | viridis_r | |||
winter | winter_r |
Kích cỡ
Bạn có thể thay đổi kích thước của các dấu chấm bằng
s
đối số.
Cũng giống như màu sắc, hãy đảm bảo rằng mảng cho các kích thước có cùng độ dài với các mảng cho trục x và y:
Thí 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ả:
Alpha
Bạn có thể điều chỉnh độ trong suốt của các dấu chấm bằng
alpha
đối số.
Cũng giống như màu sắc, hãy đảm bảo rằng mảng cho các kích thước có cùng độ dài với các mảng cho trục x và y:
Thí 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ả:
Kết hợp Kích thước màu và Alpha
Bạn có thể kết hợp một bản đồ màu với các kích thước khác nhau trên các 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:
Thí 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()
Kết quả: