數(shù)據(jù)科學(xué) IPython 筆記本 8.5 簡單的散點圖

8.5 簡單的散點圖

原文:Simple Scatter Plots

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

本節(jié)是《Python 數(shù)據(jù)科學(xué)手冊》(Python Data Science Handbook)的摘錄。

另一種常用的繪圖類型是簡單的散點圖,是折線圖的近親。這里的點并不由線連接,而是單獨表示的點,圓或其他形狀。我們首先為繪圖配置筆記本,并導(dǎo)入我們將使用的函數(shù):

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

散點圖和plt.plot

在上一節(jié)中,我們查看了生成折線圖的plt.plot /ax.plot。事實證明,同樣的函數(shù)也可以生成散點圖:

x = np.linspace(0, 10, 30)
y = np.sin(x)

plt.plot(x, y, 'o', color='black');
png

函數(shù)調(diào)用中的第三個參數(shù)是一個字符,表示用于繪圖的符號類型。正如你可以指定選項,例如'-','--'`來控制線條樣式,標(biāo)記樣式有自己的一組短字符串代碼。完整的可用符號列表,可以在plt.plot``的文檔中找到,或者在Matplotlib 的在線文檔中看到。大多數(shù)選項非常直觀,我們將在這里展示一些更常見的:

rng = np.random.RandomState(0)
for marker in ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']:
    plt.plot(rng.rand(5), rng.rand(5), marker,
             label="marker='{0}'".format(marker))
plt.legend(numpoints=1)
plt.xlim(0, 1.8);
png

為了獲得更多選項,這些字符代碼可以與線條和顏色代碼一起使用,來繪制點以及連接它們的線:

plt.plot(x, y, '-ok');
png

plt.plot的附加關(guān)鍵字參數(shù),指定了線條和標(biāo)記的各種屬性:

plt.plot(x, y, '-p', color='gray',
         markersize=15, linewidth=4,
         markerfacecolor='white',
         markeredgecolor='gray',
         markeredgewidth=2)
plt.ylim(-1.2, 1.2);
png

plt.plot函數(shù)的這種靈活性支持各種可能的可視化選項??捎眠x項的完整說明,請參閱plt.plot文檔。

散點圖和plt.scatter

第二種更強大的創(chuàng)建散點圖的方法是plt.scatter函數(shù),它的用法與plt.plot函數(shù)非常相似:

plt.scatter(x, y, marker='o');
png

plt.scatterplt.plot的主要區(qū)別是,它可用于創(chuàng)建散點圖,其中每個單獨的點的屬性(大小,填充顏色,邊緣顏色等)可以單獨控制,或映射到數(shù)據(jù)。

讓我們通過創(chuàng)建一個隨機散點圖,包含多種顏色和大小的點,來展示它。為了更好地查看重疊結(jié)果,我們還將使用alpha關(guān)鍵字來調(diào)整透明度:

rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)

plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
            cmap='viridis')
plt.colorbar();  # show color scale
png

請注意,顏色參數(shù)自動映射到顏色標(biāo)度(此處由colorbar()命令顯示),size參數(shù)以像素為單位。通過這種方式,點的顏色和大小可用于在可視化中傳達信息,以便可視化多維數(shù)據(jù)。

例如,我們可能會使用來自 Scikit-Learn 的 Iris 數(shù)據(jù),其中每個樣本是三種類型的花朵中的一種,其花瓣和萼片的大小是仔細(xì)測量的:

from sklearn.datasets import load_iris
iris = load_iris()
features = iris.data.T

plt.scatter(features[0], features[1], alpha=0.2,
            s=100*features[3], c=iris.target, cmap='viridis')
plt.xlabel(iris.feature_names[0])
plt.ylabel(iris.feature_names[1]);
png

我們可以看到,這個散點圖使我們能夠同時探索數(shù)據(jù)的四個不同維度:每個點的(x, y)位置對應(yīng)于萼片的長度和寬度,該點的大小與花瓣寬度有關(guān),并且顏色與花的特定種類有關(guān)。像這樣的多顏色和多特征散點圖,對于數(shù)據(jù)探索和展示都是有用的。

plot VS scatter:效率的注解

除了plt.plotplt.scatter中提供的不同功能之外,為什么你選擇使用一個而不是另一個? 雖然對于少量數(shù)據(jù)而言并不重要,因為數(shù)據(jù)集大于幾千個點,plt.plot可能比plt.scatter明顯更高效。原因是plt.scatter能夠為每個點渲染不同的大小和/或顏色,因此渲染器必須執(zhí)行單獨構(gòu)建每個點的額外工作。

另一方面,在plt.plot中,點基本上總是彼此的克隆,因此確定點的外觀的工作,僅對整個數(shù)據(jù)集執(zhí)行一次。對于大型數(shù)據(jù)集,這兩者之間的差異可能會使性能大不相同,因此,對于大型數(shù)據(jù)集,plt.plot應(yīng)優(yōu)于plt.scatter。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容