厉害了,Matplotlib还能这样画散点图!

时间:2022-07-26
本文章向大家介绍厉害了,Matplotlib还能这样画散点图!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在数据可视化中,二维散点图的应用范围很广,比如用来观测两个变量之间的相关性、展示销量的的走势等等,这些是散点图的常规用法。

然而,这篇文章想讲的是,二维散点图能够展现的信息远不止两个维度。Matplotlib进阶绘图的第二篇文章,带你扒一扒散点图都有哪些妙用。

本文用的数据集是加州房产价格数据集,每个样本代表一个街区。数据集中共有10个属性,包含经度、纬度、房屋年龄中位数、总房间数、总卧室数、人口数、家庭数、收入中位数、房屋价值中位数和该地区离大海的距离。

首先,将经度视为x,纬度作为y,绘制散点图,我们可以得到这些街区的地理位置分布图。

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)

散点图大致的勾勒出了加州的地理轮廓,一个点代表了一个街区。

但这张图反映不出街区之间的密集程度,原因在于,一个街区的面积相对于一个州的面积而言几乎可以忽略不计,所以很多时候两个街区在经纬度上相差不大,在图上的表现就是重叠成一个点。

针对这个问题,可以设置alpha参数,控制散点的透明度,设置了透明度之后,颜色越深的部分就代表了越多的散点在这里重叠,即该区域的街区密集程度更大,如下

fig,ax = plt.subplots(figsize=(9,6))

# alpha取值在0-1之间,具体取何值取决于对密集程度的定义,这里取0.3
ax.scatter(x='longitude',y='latitude',data=data,alpha=0.3)

所以通过alpha(透明度)的设置,在散点图上非常直观地展示了街区密集程度这一信息。

接着,我们可以看看各个街区的人口分布情况,如何做呢?

图中一个点代表了一个街区,所以需要对散点的样式进行设置,散点的可以设置的属性有颜色,大小,形状等。

实际选择哪种视实际情况(效果,研究目的)而定,这里选用大小来反映街区的人口数量,即设置参数s,将散点的大小和人口多少挂钩。为了便于对比,将设置前后的图放到了一起。

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('设置前',size=16)
ax[1].scatter(x='longitude',y='latitude',data=data,alpha=0.3,s=data['population']/100,label='population')
ax[1].set_title('设置后',size=16)

可以看到,对于加州北部(黄色框内)而言,不仅街区密度不大,而且街区内的人也较少(散点较小)。同时,对于红色框内的区域,虽然街区密度较大,但人口密度明显稀疏不少

最后,结合街区密集度和人口密集度,再看看各个街区的价格分布,这里将颜色和房价高低挂钩,通过颜色的渐变来展现房价高低,颜色由蓝到红代表了价格由低到高,具体用到的参数为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)

通过对颜色的设定,整个图看上去颜值高了很多,同时,也可以得到一些结论:

  • 房价比较高的区域集中于两个中心,且都靠近海湾
  • 房价高的地方对应的人口密集度也较高

虽然这两个数据分析的结论比较显而易见,但这里主要想说的是,用散点图也能够展现出丰富的信息,在这个案例中,用alpha呈现了街区密集度,s呈现了人口密集度,c反映房价高低,再加上横纵坐标的经纬度,一共反映了5个维度的信息。

所以,二维散点图还是很强大的对吧!只要掌握一些常用的参数设置,理清数据分析思路,你的散点图便可以变得既富有信息量,还有高颜值。

-END-