厲害了,散點圖還能這么畫!
大家好,歡迎來到 Crossin的編程教室 !
數(shù)據(jù)可視化中,二維散點圖的應(yīng)用范圍很廣,比如用來觀測兩個變量之間的相關(guān)性、展示銷量的的走勢等等,這些是散點圖的常規(guī)用法。
不過今天這篇文章想講的是,二維散點圖能夠展現(xiàn)的信息遠(yuǎn)不止兩個維度。Matplotlib進(jìn)階繪圖,帶你扒一扒散點圖都有哪些妙用。
本文用的數(shù)據(jù)集是加州房產(chǎn)價格數(shù)據(jù)集,每個樣本代表一個街區(qū)。數(shù)據(jù)集中共有10個屬性,包含經(jīng)度、緯度、房屋年齡中位數(shù)、總房間數(shù)、總臥室數(shù)、人口數(shù)、家庭數(shù)、收入中位數(shù)、房屋價值中位數(shù)和該地區(qū)離大海的距離。

首先,將經(jīng)度視為x,緯度作為y,繪制散點圖,我們可以得到這些街區(qū)的地理位置分布圖。
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_csv('./data/housing.csv')
fig,ax = plt.subplots(figsize=(9,6))
ax.scatter(x='longitude',y='latitude',data=data)

散點圖大致的勾勒出了加州的地理輪廓,一個點代表了一個街區(qū)。
但這張圖反映不出街區(qū)之間的密集程度,原因在于,一個街區(qū)的面積相對于一個州的面積而言幾乎可以忽略不計,所以很多時候兩個街區(qū)在經(jīng)緯度上相差不大,在圖上的表現(xiàn)就是重疊成一個點。
針對這個問題,可以設(shè)置alpha參數(shù),控制散點的透明度,設(shè)置了透明度之后,顏色越深的部分就代表了越多的散點在這里重疊,即該區(qū)域的街區(qū)密集程度更大,如下
fig,ax = plt.subplots(figsize=(9,6))
# alpha取值在0-1之間,具體取何值取決于對密集程度的定義,這里取0.3
ax.scatter(x='longitude',y='latitude',data=data,alpha=0.3)

所以通過alpha(透明度)的設(shè)置,在散點圖上非常直觀地展示了街區(qū)密集程度這一信息。
接著,我們可以看看各個街區(qū)的人口分布情況,如何做呢?
圖中一個點代表了一個街區(qū),所以需要對散點的樣式進(jìn)行設(shè)置,散點的可以設(shè)置的屬性有顏色,大小,形狀等。
實際選擇哪種視實際情況(效果,研究目的)而定,這里選用大小來反映街區(qū)的人口數(shù)量,即設(shè)置參數(shù)s,將散點的大小和人口多少掛鉤。為了便于對比,將設(shè)置前后的圖放到了一起。
fig,ax = plt.subplots(1,2,figsize=(20,6))
ax[0].scatter(x='longitude',y='latitude',data=data,alpha=0.3)
ax[0].set_title('設(shè)置前',size=16)
ax[1].scatter(x='longitude',y='latitude',data=data,alpha=0.3,s=data['population']/100,label='population')
ax[1].set_title('設(shè)置后',size=16)

可以看到,對于加州北部(黃色框內(nèi))而言,不僅街區(qū)密度不大,而且街區(qū)內(nèi)的人也較少(散點較?。M瑫r,對于紅色框內(nèi)的區(qū)域,雖然街區(qū)密度較大,但人口密度明顯稀疏不少。
最后,結(jié)合街區(qū)密集度和人口密集度,再看看各個街區(qū)的價格分布,這里將顏色和房價高低掛鉤,通過顏色的漸變來展現(xiàn)房價高低,顏色由藍(lán)到紅代表了價格由低到高,具體用到的參數(shù)為c。
fig,ax = plt.subplots(figsize=(9,6))
ax_plot = ax.scatter(x='longitude',y='latitude',alpha=0.4,s=data['population']/100,
c='median_house_value',cmap=plt.get_cmap('jet'),data=data)
# 加上顏色棒
fig.colorbar(ax_plot,ax=ax)

通過對顏色的設(shè)定,整個圖看上去顏值高了很多,同時,也可以得到一些結(jié)論:
房價比較高的區(qū)域集中于兩個中心,且都靠近海灣 房價高的地方對應(yīng)的人口密集度也較高
雖然這兩個數(shù)據(jù)分析的結(jié)論比較顯而易見,但這里主要想說的是,用散點圖也能夠展現(xiàn)出豐富的信息,在這個案例中,用alpha呈現(xiàn)了街區(qū)密集度,s呈現(xiàn)了人口密集度,c反映房價高低,再加上橫縱坐標(biāo)的經(jīng)緯度,一共反映了5個維度的信息。
所以,二維散點圖還是很強(qiáng)大的對吧!只要掌握一些常用的參數(shù)設(shè)置,理清數(shù)據(jù)分析思路,你的散點圖便可以變得既富有信息量,還有高顏值。
如果文章對你有幫助,歡迎轉(zhuǎn)發(fā)/點贊/收藏~
_往期文章推薦_
