matplotlib 散点图_走进Matplotlib世界(七)

回顾

在上一篇中,我们介绍了Matplotlib的面积图、填充图和饼图的基本概念及用法。今天我们来看一下散点图,然后讲一下在Matplotlib图表中使用中文的方法。

散点图

散点图是一种在回归分析中,数据点在直角坐标系平面上的分布图。散点图表示因变量随自变量变化的大致趋势,据此可以选择合适的函数对数据点进行拟合。散点图通常用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点,值由点在图表中的位置表示,类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。Matplotlib中,散点图使用scatter()方法创建。

scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,*,data=None,**kwargs)各常用参数意义如下。

x, y:绘制散点图的数据点。

s:可选参数。散点的大小,为一个实数或数组。默认大小为20。

c:可选参数。散点图的颜色序列。这里要注意c不是一个单一的RGB或RGBA序列,而是一个RGB或RGBA的二维数组。

marker:可选参数。散点图的散点样式,可选样式可参考之前介绍Matplotlib属性时的相关内容。

cmap:可选参数。颜色映射实例或注册的颜色映射名称。只有当c是一个浮点数组时,才使用cmap。

norm:可选参数。若为True,则将数据正则化为0-1之间的数。

vmin, vmax:可选参数。数据边界化,但是若norm已设置为True,则参数无效。

alpha:可选参数。设置散点透明度。

linewidths:可选参数。标记点的长度。

edgecolors:可选参数。颜色或颜色序列,标记边缘颜色。

绘制散点图用法如下。​​​

# 0、导入包import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 1、准备数据x = np.random.randn(1000)y = np.random.randn(1000)# 2、创建图像fig = plt.figure(figsize=(4, 4), facecolor=(0, 1, 0, 1))# 3、绘图ax = fig.add_subplot(111)ax.scatter(x, y, marker='.')# 4、自定义设置ax.set_title("scatter")# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

上述代码绘制了一个简答的散点图,运行结果如下图所示。

e7f7e906bf872a9519478ee3ffa657e2.png

基本散点图

通过修改属性参数,可以绘制各种样式的散点图。​​​​

# 0、导入包import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 1、准备数据x = np.random.randn(200)y = np.random.randn(200)# 2、创建图像fig, axes = plt.subplots(2, 2, figsize=(6, 6), facecolor=(0, 1, 0, 1))# 3、绘图ax1 = axes[0, 0]ax1.scatter(x, y, marker='.', s=10)ax2 = axes[0, 1]ax2.scatter(x, y, marker='.', s=60, c=x, alpha=0.8)ax3 = axes[1, 0]ax3.scatter(x, y, marker='^', c=x)ax4 = axes[1, 1]ax4.scatter(x, y, marker='.', s=np.random.randn(1000)*100, c=x, edgecolors=(1, 0, 0, 1))# 4、自定义设置ax1.set_title("scatter1")ax2.set_title("scatter2")ax3.set_title("scatter3")ax4.set_title("scatter4")# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

上述代码绘制了4个散点图。图1设置散点的大小s=10小于默认值;图2设置散点的大小s=60大于默认值,同时将numpy数组x作为颜色数组传入c,并设置透明度alpha=0.8;图3设置散点的样式为三角形;图4将s将散点的大小s设置成随机数数组,同时设置散点的边颜色edgecolors。运行效果如下图所示,通过对比可以看出设置的属性之间的差异。

751adc5c5a29b2631e85fb7563a1165f.png

散点图设置属性对比

有时我们会需要考察多个变量之间的相关关系,我们可以使用散点图矩阵。由于Matplotlib中没有介绍到散点图矩阵,我们借用pandas来实现,另一个绘制图表库seaborn中有专门的绘制散点图矩阵的方法,如果有机会介绍我们再详细展开。pandas中通过scatter_matrix()方法实现散点图矩阵。scatter_matrix()方法接收数据,主要参数为diagonal,这个参数只能传hist或kde两种值,hist为直方图表示方式,kde为密度图表示方式,此外还可传marker, alpha等相关属性参数。基本用法如下。​​​​

# 导入包import numpy as npimport pandas as pd# 准备数据data = pd.DataFrame(np.random.randn(200, 3), columns=list('abc'))# 绘制图表pd.plotting.scatter_matrix(data, marker='.', diagonal='hist') # diagonal还可以传kde,只能二选一

我们以hist直方图表示方式为例,运行结果如下。

bd381bedc6fbb3bea683a021da581d0d.png

散点图矩阵

设置中文

在Matplotlib的使用中,如果给图表添加中文,我们会发现出现了乱码。我们给图表标题设置一个中文名称。​​​​

# 0、导入包import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 1、准备数据x = np.random.randn(1000)y = np.random.randn(1000)# 2、创建图像fig = plt.figure(figsize=(5, 5), facecolor=(0, 1, 0, 1))# 3、绘图ax = fig.add_subplot(111)ax.scatter(x, y, marker='.', s=np.random.randn(1000)*100, c=y, alpha=0.8)# 4、自定义设置ax.set_title("散点图")# 5、保存图形(按需要使用)# plt.savefig(‘xxx.png’)# 6、显示图形plt.show()

运行后发现中文无法正常显示,所有中文都变成了一个个的小框框。

b8c5bd5287f72c98a35512bd2f2b3b80.png

中文乱码

下面给出解决方法。

1、找到matplotlibrc文件所在路径,可以通过使用matplotlib的matplotlib_fname方法获取。​​

import matplotlib as mplprint(mpl.matplotlib_fname())

进入matplotlibrc所在目录,可以看到该目录下有如下内容。

b65511fce478de9c9e2c76ab0859fdf8.png

matplotlibrc所在目录

2、下载中文字体包,这里我们用简体中文字体包(SimHei.ttf),可以用下面给出的下载链接进行下载。将下载好的字体包放入上述目录的fonts文件夹下。

3、打开matplotlibrc文件,全局搜索找到font.family、font.sans-serif两个地方,然后去掉注释,即前面的“#”,并在font.sans-serif后面添加我们要加入的字体,这里我们添加SimHei。再全局搜索找到axes.unicode_minus,去掉注释,并将True改成False,最后保存退出。

4、清除缓存。mac用户直接在“/User/当前用户名”下,Windows用户在“C:/用户/当前用户名”下,找到.matplotlib文件夹,直接删除它即可。

5、如果使用Jupyter,需要先重启。然后再重新运行代码,即可正常显示出中文,效果如下。

05bd6cdf95bfd98ab0ce970e23874451.png

中文显示正常

下次我们继续介绍其他类型的图表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值