本文共 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/