Matplotlib-繪制散點圖

15.Matplotlib-繪制散點圖

掃碼關注【牽引小哥講Python】,關注回復【資源】領取學習資源!

原創(chuàng)作者:牽引小哥

微信公眾號:牽引小哥講Python

注:轉載或復制請注明出處——牽引小哥

本期小哥主要講解散點圖的繪制方法。在Matplotlib中使用ax.scatter()函數(shù)繪制散點圖。官方參考鏈接:

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter

1. ax.scatter()的基礎用法

ax.scatter(x, y, s=None, c=None, marker=None, cmap=None, alpha=None, edgecolors=None, **kwargs)                  

關鍵參數(shù)說明:

  • x:x軸數(shù)據(jù)序列
  • y:y軸數(shù)據(jù)序列
  • c:數(shù)據(jù)點的顏色,可以是單一顏色,也可是顏色序列
  • marker:數(shù)據(jù)點形狀(默認圓形)
  • camp:可對數(shù)據(jù)點指定色譜映射
  • alpha:數(shù)據(jù)點透明度
  • edgecolors:數(shù)據(jù)點輪廓顏色
  • **kwargs:其他參數(shù)

應用舉例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

mpl.rcParams['font.size'] = 16
mpl.rcParams['figure.figsize'] = (6,5) 
plt.rcParams['font.sans-serif'] = ['SimHei']  
plt.rcParams['axes.unicode_minus'] = False  

#%% 基礎用法
x = np.arange(0, 6, 0.2)
y1 = x**2
y2 = (x - 5.8)**2
# 根據(jù)數(shù)據(jù)特點定義數(shù)據(jù)點顏色和大小的映射序列
colors = np.linspace(y1.min(), y1.max(), len(x)) #顏色序列與y軸數(shù)值對應
size =15 * np.linspace(1, 10, len(x))

fig, ax = plt.subplots()
ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
# cmap='hsv'意為使用Matplotlib內置的‘hsv’色譜,更多講解可參考小哥之前關于顏色的文章
plt.show()
plt.tight_layout()

可以看到,數(shù)據(jù)點的顏色和大小均隨數(shù)值變化。

小哥Tips:數(shù)據(jù)點的size隨數(shù)據(jù)順序,由小變大。

接下來,小哥簡單講解下關于顏色和大小的映射順序問題。比如我們繪制y1,y2兩個關于x = 5.8對稱的函數(shù)散點圖:

# y1 = x**2
# y2 = (x - 5.8)**2
ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.scatter(x, y2, s=size, c=colors, alpha=0.75, cmap='viridis')

從結果可以看出,數(shù)據(jù)點的大小并不對稱。為了使其對稱,就需要更改數(shù)據(jù)序列的順序,使其逆序。在這里,小哥使用數(shù)組切片技巧[: : -1]獲得元組的逆序結果。

ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.scatter(x[::-1], y2[::-1], s=size, c=colors, alpha=0.75, cmap='hsv')

還可以為散點圖添加圖例:

scatter = ax.scatter(x, y1, s=size, c=colors, alpha=0.75, cmap='hsv')
ax.legend(*scatter.legend_elements(), bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0)

不同的顏色對應不同的與y軸的數(shù)值大小對應。

2. 離散數(shù)據(jù)的散點圖

對于離散的數(shù)據(jù)可以使用散點圖進行可視化。

np.random.seed(0)
fig, ax = plt.subplots()
citys = ['成都', '武漢', '重慶']
colors = ['blue', 'red', 'yellow']
for i in range(len(citys)):
    color = colors[i]
    city = citys[i]
    n = 20
    x, y = np.random.rand(2, n) # 生成隨機數(shù)數(shù)組
    scale = 200.0 * np.random.rand(n)
    ax.scatter(x, y, c=color, s=scale, label=city,
                alpha=0.5, edgecolors='none')

ax.legend(loc='lower center', ncol=3, bbox_to_anchor=(0.5, 1))
ax.grid(color='k', linestyle='--', linewidth=0.2)

plt.show()
plt.tight_layout()
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容