社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

从零开始学Python-matplotlib系列(VI):散点图

EasyCharts • 7 年前 • 1067 次点击  

前言


       上一期中,我们通过折线图可以快速的发现时间序列的趋势图,当然他不仅仅只能用在时间序列中,也可以和其他图形配合使用,正如本期要介绍的,可以将折线图绘制到散点图中。散点图可以反映两个变量间的相关关系,即如果存在相关关系的话,它们之间是正向的线性关系还是反向的线性关系?甚至于是非线性关系?在绘制散点图之前,我们任然老规矩,先来介绍一下matplotlib包中的scatter函数用法及参数含义。

scatter函数的参数解读


       matplotlib模块中scatter函数语法及参数含义:

plt.scatter(x, y, s=20, 
            c=None, marker='o', 
            cmap=None, norm=None, 
            vmin=None, vmax=None, 
            alpha=None, linewidths=None, 
            edgecolors=None)
  • x:指定散点图的x轴数据;

  • y:指定散点图的y轴数据;

  • s:指定散点图点的大小,默认为20,通过传入新的变量,实现气泡图的绘制;

  • c:指定散点图点的颜色,默认为蓝色;

  • marker:指定散点图点的形状,默认为圆形;

  • cmap:指定色图,只有当c参数是一个浮点型的数组的时候才起作用;

  • norm:设置数据亮度,标准化到0~1之间,使用该参数仍需要c为浮点型的数组;

  • vminvmax:亮度设置,与norm类似,如果使用了norm则该参数无效;

  • alpha:设置散点的透明度;

  • linewidths:设置散点边界线的宽度;

  • edgecolors:设置散点边界线的颜色;


一般散点图的绘制


案例:汽车速度与刹车距离的关系

# 导入模块
import pandas as pd
import matplotlib.pyplot as plt

# 设置绘图风格
plt.style.use('ggplot')
# 设置中文编码和负号的正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False

# 读入数据cars = pd.read_csv('cars.csv')
# 绘图
plt.scatter(cars.speed, # x轴数据为汽车速度            cars.dist, # y轴数据为汽车的刹车距离            s = 30, # 设置点的大小            c = 'steelblue', # 设置点的颜色            marker = 's', # 设置点的形状            alpha = 0.9, # 设置点的透明度            linewidths = 0.3, # 设置散点边界的粗细            edgecolors = 'red' # 设置散点边界的颜色            )

# 添加轴标签和标题plt.title('汽车速度与刹车距离的关系') plt.xlabel('汽车速度') plt.ylabel('刹车距离')

# 去除图边框的顶部刻度和右边刻度
plt.tick_params(top = 'off', right = 'off')

# 显示图形plt.show()

这样一张简单的散点图就呈现出来了,很明显的发现,汽车的刹车速度与刹车距离存在正相关关系,即随着速度的增加,刹车距离也在增加。其实这个常识不用绘图都能够发现,关键是通过这个简单的案例,让大家学会如何通过python绘制一个散点图。如果你需要画的散点图,是根据不同的类别进行绘制,如按不同的性别,将散点图区分开来等。这样的散点图该如何绘制呢?

分组散点图的绘制


案例:iris数据集

# 读取数据
iris = pd.read_csv('iris.csv')

# 自定义颜色
colors = ['steelblue', '#9999ff', '#ff9999']

# 三种不同的花品种S
pecies = iris.Species.unique()

# 通过循环的方式,完成分组散点图的绘制
for i in range(len(Species)):    plt.scatter(iris.loc[iris.Species == Species[i], 'Petal.Length'],                iris.loc[iris.Species == Species[i], 'Petal.Width'],                s = 35, c = colors[i], label = Species[i])

# 添加轴标签和标题
plt.title('花瓣长度与宽度的关系') plt.xlabel('花瓣长度') plt.ylabel('花瓣宽度')

# 去除图边框的顶部刻度和右边刻度
plt.tick_params(top = 'off', right = 'off')
# 添加图例 plt.legend(loc = 'upper left')
# 显示图形 plt.show()

绘制这样的分组散点图是不是也非常的简单呀,而且关于图的属性,可以想怎么设置就怎么设置。从图中可以发现,三种花的花瓣长度与宽度之间都存在正向的关系,只不过品种setasa的体型比较小,数据点比较聚集。

气泡图的绘制


案例:大区销售数据

# 导入第三方包
import numpy as np

# 读取数据
sales = pd.read_excel('sales.xlsx')

# 绘制气泡图
plt.scatter(sales.finish_ratio,            sales.profit_ratio,            c = 'steelblue',            s = sales.tot_target/30,            edgecolor = 'black')

# 改变轴刻度的显示方式(百分比形式)
plt.xticks(np.arange(0,1,0.1), [str(i*100)+'%' for i in np.arange(0,1,0.1)]) plt.yticks(np.arange(0,1,0.1), [str(i*100)+'%' for i in np.arange(0,1,0.1)])

# 设置x轴和y轴的数值范围
plt.xlim(0.2, 0.7) plt.ylim(0.25, 0.85)

# 添加轴标签和标题
plt.title('完成率与利润率的关系') plt.xlabel('完成率' ) plt.ylabel('利润率')

# 去除图边框的顶部刻度和右边刻度
plt.tick_params(top = 'off', right = 'off')
# 显示图形
plt.show()

这样一个气泡图,也非常容易的展现出来了,图中的圆越大,代表总任务量就越大。一般来说气泡图可以展现3维或4维数据,利润本图就展现了3维数据,如果再加上颜色表示不同的大区,就可以反映4维数据。

       在绝大多数情况下,我们会看见散点图和线性回归线绘制在一起,一方面可以反映变量间的相关关系,另一反面,也可以定量的找到一根直线来反映这个相关趋势。接下来,我们就来实现一下散点图+回归线的绘制,这里回归线的绘制数据需要加载sklearn这个机器学习的模块,通过这个模块来生成一个线性模型。关于sklearn模块的知识分享,后期我也会以系列的形式呈现。

散点图+线性回归线


汽车速度与刹车距离的关系

       从我们的第一案例就认识到了汽车的刹车速度与刹车距离之间存在正相关的关系,如果需要定量的模型来反映这个关系,就可以利用线性回归模型来刻画即可,接下来我们就来实现一下这个散点图与回归图的结合:

# 导入第三方模块
from sklearn.linear_model import LinearRegression

# 散点图
plt.scatter(cars.speed, # x轴数据为汽车速度            cars.dist, # y轴数据为汽车的刹车距离            s = 30, # 设置点的大小            c = 'black', # 设置点的颜色            marker = 'o', # 设置点的形状            alpha = 0.9, # 设置点的透明度            linewidths = 0.3, # 设置散点边界的粗细            label = '观测点'            )

# 建模
reg = LinearRegression().fit(cars.speed.reshape(-1 ,1), cars.dist)
# 回归预测值
pred = reg.predict(cars.speed.reshape(-1,1))

# 绘制回归线
plt.plot(cars.speed, pred, linewidth = 2, label = '回归线')

# 添加轴标签和标题
plt.title('汽车速度与刹车距离的关系') plt.xlabel('汽车速度') plt.ylabel('刹车距离')

# 去除图边框的顶部刻度和右边刻度
plt.tick_params(top = 'off', right = 'off')
# 显示图例
plt.legend(loc = 'upper left')
# 显示图形
plt.show()

结语


       OK,今天关于Pyhton绘制散点图的讲解就到此结束,如果你感兴趣,不妨和我一起学习与交流,同时也欢迎各位朋友继续转发与分享,让系统的知识不断的扩散出去。下一期我们将推送一篇案例,结合前面所讲的几期可视化,完成数据的探索性分析。文中相关的Python脚本和PDF版本已存放到百度云盘,可以通过下面的链接获取:

链接: https://pan.baidu.com/s/1eSnJQLk 密码: n41k

Python Seaborn (Ⅰ) 艺术化的图表控制

Python Seaborn (Ⅱ) 斑驳陆离的调色板

Python Seaborn (Ⅲ) 分布数据集的可视化

Python Seaborn (Ⅳ) 线性关系的可视化

Python Seaborn (Ⅴ) 分类数据的绘制

10分钟python seaborn绘图入门 (Ⅱ): barplot 与 countplot

10 分钟 python seaborn 绘图入门 (Ⅳ): 回归模型 lmplot

从零开始学Python-matplotlib系列(I):条形图

从零开始学Python-matplotlib系列(II):饼图

从零开始学Python-matplotlib系列(III):箱线图

从零开始学Python-matplotlib系列(IV):直方图

从零开始学Python-matplotlib系列(V):折线图


如需转载请联系EasyCharts团队!

微信后台回复“转载”即可!



【书籍推荐】《Excel 数据之美--科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】   Excel 商业图表修炼秘笈之基础篇



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/DViGBu1xl4
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4097
 
1067 次点击