博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)
阅读量:3963 次
发布时间:2019-05-24

本文共 2682 字,大约阅读时间需要 8 分钟。

绘制带有最佳拟合线的散点图

最佳拟合线

       •当我们想要研究数据集中两个变量之间如何相互改变,使用最佳拟合线就是一个不错的方法!!

       •在下面的博客内容中我会手把手教朋友们绘制一个简单的带有最佳拟合线的散点图!!!
       •未学习过散点图的朋友可参考下面两篇博客进行学习(下述博客也是博主自行完成的,可供参考学习散点图)!!!
       •
       •

数据准备

       •我们绘图所需数据来源于Github:

       •绘图时可直接使用带有URL的数据,也可将数据集下载下到本地,通过本地路径来使用数据:
在这里插入图片描述

数据展示

       •数据集下载完成后,解压,在文件目录中找到下图中的csv数据文件

在这里插入图片描述
       •上述数据集为与‘’车辆相关的信息‘’的内容
在这里插入图片描述

       •观察上述数据集的特征值[‘manufacturer’,‘model’,‘displ’,‘year’,‘cyl’,‘trans’,‘drv’,‘cty’,‘hwy’,‘fl’,‘class’]

       •中文含义:[“汽车制造商”,“型号名称”,“发动机排量(L)”,“制造年份”,“气缸数量”,“手动/自动”,“驱动类型”,“城市里程/加仑”,“公路里程/加仑”,“汽油种类”,“车辆种类”]
       •重要特征值解释:1.驱动类型:四轮,前轮,后轮
                                     2.能源种类:汽油,柴油,用电等等
                                     3.车辆种类:皮卡,sUV,小型,中型等等
                                     4.城市里程/加仑,公路里程/加仑:表示使用没加仑汽油能够跑的英里数,所以这个数值越大代表汽车越节能

       •从上述的各种特征值中选择我们需要使用的参数:横坐标:发动机排量(L) 纵坐标:公路里程/加仑 图例:气缸数量(4,5,6,8)

图例选择

       •我们选择图例为气缸数量,在数据集中气缸数量有四种不同的值,但是我们只需要两个图例将散点图分为两部分绘制最佳拟合线

在这里插入图片描述
       •由上图得:我们可选择[‘4’,‘8’]两种不同的气缸数量作为我们的图例

根据图例筛选数据

       •绘图时,我们已经不再需要所有数据集了,所以我们需要根据两种不同的图例将整个数据集进行筛选,选出我们所需的数据集

       •筛选数据集我们使用Dataframe中专用的isin()函数
代码测试:

import pandas as pd# 获取数据df = pd.read_csv(r'D:\9\mpg_ggplot2.csv')# 筛选数据(气缸数为['4','8'])df_select = df.loc[df.cyl.isin(['4', '8']), :]print(df_select.cyl.value_counts())  # 打印出‘气缸’的类别及各类别的数量

运行显示:

在这里插入图片描述
       •isin()函数的用法:a.isin([‘x’,‘y’]) 表示判断x,y是否在序列a存在,存在则返回True,若不存在则返回Flase ,isin()函数只能用于DataFram数据结构,而不能应用于其他数据结构
       •代码df.loc[df.cyl.isin([‘4’, ‘8’]), :]解读df.cyl.isin([‘4’, ‘8’]) 首先判断在整个数据集df中的cyl特征值是否存在于[‘4’, ‘8’],若存在4或者8,存在返回True,不存在则返回Flase,判断完成返回一个布尔序列,df.loc[ ] 然后在使用loc进行索引切片,取出所有符合气缸数为4或者8的行与列,生成新的数据集df_select

绘制图像

       •使用seaborn进行绘制图像:

import matplotlib.pyplot as pltimport pandas as pdimport seaborn as snsdf = pd.read_csv(r'D:\9\mpg_ggplot2.csv')# 准备数据 df.cyl.isin([4,8]) 布尔序列df_select = df.loc[df.cyl.isin([4, 8]), :]  # a.isin([x])表示判断a是否存在序列x中# 绘制图像sns.set_style('white')  # 设置风格gridobj = sns.lmplot(x='displ'  # 横坐标                     , y='hwy'  # 纵坐标                     , hue='cyl'  # 分类/子集                     , data=df_select  # 数据集                     , height=8  # 高度                     , aspect=1.6  # 纵横比 长=aspect * height                     , palette='tab10'                     , legend=False  # 不显示图例                     , scatter_kws=dict(s=60, linewidths=.7, edgecolors='black'))# 装饰图像gridobj.set(xlim=(0.5, 7.5), ylim=(0, 50))  # 横纵坐标范围plt.rcParams['font.sans-serif'] = ['Simhei']  # 设置字体为黑体plt.xlabel('发动机排量(l)', fontsize=20)  # x轴名称plt.ylabel('公里路程/加仑', fontsize=20)  # y轴名称plt.xticks(fontsize=16)plt.yticks(fontsize=16)plt.legend(['气缸数:4', '气缸数:8'], fontsize=22) # 设置图例plt.title('Scatterplot with line of best fit grouped by number of cylinders', fontsize=20)plt.show()  # 显示图像

       •如果你使用pycharm运行上述代码时,可能会出现下图所示的图像显示不完全!!!

在这里插入图片描述
       •如果出现图像显示不完全时,可以在装饰图像的代码中添加下述一行代码:

plt.gcf().subplots_adjust(left=0.05, top=0.91, bottom=0.09)

图像显示:

在这里插入图片描述
       •添加上述代码的原因参考下述博客(此博客也是博主本人写的,可供参考!!!)
       •添加上述代码后,关于绘制带有最佳拟合线的散点图就完成了!!!

转载地址:http://hyrzi.baihongyu.com/

你可能感兴趣的文章
Android开发之——activity跳转
查看>>
Android开发之——Menu 操作
查看>>
Android开发之——布局实例
查看>>
Android开发之——SQLite使用方法
查看>>
Python之SMTP发送邮件
查看>>
手动测试无法被取代的理由
查看>>
浅析移动测试:应用上线不“裸奔”的正确方式
查看>>
Robot Framework之元素定位
查看>>
性能测试方案之性能测试术语解释
查看>>
性能测试方案之性能测试方法
查看>>
测试方法之单元测试
查看>>
QTP之——Failed to run script. Description: 没有注册类别
查看>>
Perl+Eclipse配置
查看>>
Perl练习之——微型计算器
查看>>
Perl练习之——循环语句
查看>>
Ruby解决方案:The 'ffi' native gem requires installed build tools ; 含最新DevKit下载地址
查看>>
Python之操作MySQL数据库(二)
查看>>
简单介绍如何使用robotium进行自动化测试
查看>>
Python之操作XML文件
查看>>
eclipse+ADT 进行android应用签名详解
查看>>