Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)

Posted 温柔且上进c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)相关的知识,希望对你有一定的参考价值。

最佳拟合线

       •当我们想要研究数据集中两个变量之间如何相互改变,使用最佳拟合线就是一个不错的方法!!
       •在下面的博客内容中我会手把手教朋友们绘制一个简单的带有最佳拟合线的散点图!!!
       •未学习过散点图的朋友可参考下面两篇博客进行学习(下述博客也是博主自行完成的,可供参考学习散点图)!!!
       •Python数据可视化之散点图(基础篇—图文并茂详细版!!!)
       •Python数据可视化之散点图(进阶篇—图文并茂详细版!!!)

数据准备

       •我们绘图所需数据来源于Github:https://github.com/selva86/datasets
       •绘图时可直接使用带有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 plt
import pandas as pd
import seaborn as sns

df = 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)

图像显示:
在这里插入图片描述
       •添加上述代码的原因参考下述博客(此博客也是博主本人写的,可供参考!!!)python数据可视化之matplotlib.pyplot绘图时图片显示不全的解决方法(图文并茂版!!!)
       •添加上述代码后,关于绘制带有最佳拟合线的散点图就完成了!!!

以上是关于Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)的主要内容,如果未能解决你的问题,请参考以下文章

数据可视化实例: 带线性回归最佳拟合线的散点图(matplotlib,pandas)

Python数据可视化之绘制抖动的带状图(图文并茂版!!!)

Python使用matplotlib可视化散点图使用seaborn中的lmplot函数使用多子图可视化不同分组的散点图最优拟合线性回归曲线

R绘制散点图以及带圈定的散点图(Scatterplot With Encircling)

100天精通Python(可视化篇)——第82天:matplotlib绘制不同种类炫酷散点图参数说明+代码实战(二维散点图三维散点图散点图矩阵)

使用 OpenGL 在 C++ 中绘制具有大量数据点的散点图的最佳方法