matplotlib数据可视化--散点图

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为浮点型的数组;

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

alpha:设置散点的透明度;

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

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

# 导入模块

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

# 设置绘图风格

plt.style.use('ggplot')

# 设置中文编码和负号的正常显示

plt.rcParams['font.sans-serif'] = 'SimHei'

plt.rcParams['axes.unicode_minus'] = False

一般散点图的绘制

案例:汽车速度与刹车距离的关系--cars.csv

#导入数据

df = pd.read_csv('C:\\Users\\A\\Desktop\\16-03cars.csv')

df.head()

#绘图

plt.scatter(df.speed, # x轴数据为汽车速度

df.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('C:\\Users\\A\\Desktop\\16-04iris.csv')

# 自定义颜色和形状

colors = ['steelblue', '#9999ff', '#ff9999']

marker = ['o','s','x']

# 三种不同的花品种

Species = 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],marker = marker[i])

# 添加轴标签和标题

plt.title('花瓣长度与宽度的关系')

plt.xlabel('花瓣长度')

plt.ylabel('花瓣宽度')

# 去除图边框的顶部刻度和右边刻度

plt.tick_params(top = 'off', right = 'off')

# 添加图例

plt.legend(loc = 'upper left')

# 显示图形

plt.show()

从图中可以发现,三种花的花瓣长度与宽度之间都存在正向的关系,只不过品种setasa的体型比较小,数据点比较聚集。

matplotlib数据可视化--箱线图

箱线图一般用来展现数据的分布(如上下四分位值、中位数等),同时,也可以用箱线图来反映数据的异常情况。

boxplot函数的参数解读

绘图之前,我们先来讲解一下matplotlib包中boxplot函数的参数含义及使用方法:

plt.boxplot(x, notch=None, sym=None, vert=None,

whis=None, positions=None, widths=None,

patch_artist=None, meanline=None, showmeans=None,

showcaps=None, showbox=None, showfliers=None,

boxprops=None, labels=None, flierprops=None,

medianprops=None, meanprops=None,

capprops=None, whiskerprops=None)

x:指定要绘制箱线图的数据;

notch:是否是凹口的形式展现箱线图,默认非凹口;

sym:指定异常点的形状,默认为+号显示;

vert:是否需要将箱线图垂直摆放,默认垂直摆放;

whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;

positions:指定箱线图的位置,默认为[0,1,2…];

widths:指定箱线图的宽度,默认为0.5;

patch_artist:是否填充箱体的颜色;

meanline:是否用线的形式表示均值,默认用点来表示;

showmeans:是否显示均值,默认不显示;

showcaps:是否显示箱线图顶端和末端的两条线,默认显示;

showbox:是否显示箱线图的箱体,默认显示;

showfliers:是否显示异常值,默认显示;

boxprops:设置箱体的属性,如边框色,填充色等;

labels:为箱线图添加标签,类似于图例的作用;

filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;

medianprops:设置中位数的属性,如线的类型、粗细等;

meanprops:设置均值的属性,如点的大小、颜色等;

capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;

whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

箱线图的绘制

案例:titanic整体乘客的年龄箱线图

#导入Titanic数据集

Titanic_df = pd.read_csv('C:\\Users\\A\\Desktop\\16-06titanic_train.csv')

Titanic_df.head()

# 查看缺失值

Titanic_df.isnull().sum()

PassengerId 0

Survived 0

Pclass 0

Name 0

Sex 0

Age 177

SibSp 0

Parch 0

Ticket 0

Fare 0

Cabin 687

Embarked 2

dtype: int64

#删除含有缺失值的行(inplace=True作用在原表上)

Titanic_df.dropna(subset=['Age'],inplace=True)

#绘图

plt.boxplot(x = Titanic_df['Age'],# 指定绘图数据

patch_artist=True,# 要求用自定义颜色填充盒形图,默认白色填充

showmeans = True,# 以点的形式显示均值

boxprops = {'color':'black','facecolor':'#9999ff'},

flierprops = {'marker':'o','markerfacecolor':'red','color':'black'}, # 设置异常值属性,点的形状、填充色和边框色

meanprops = {'marker':'D','markerfacecolor':'indianred'}, # 设置均值点的属性,点的形状、填充色

medianprops = {'linestyle':'--','color':'orange'}) # 设置中位数线的属性,线的类型和颜色)

#设置y轴的范围

plt.ylim(0,85)

#去除箱线图的上边框与右边框的刻度标签

#plt.tick_params(top = 'off',right = 'off')

#显示图形

plt.show()

对于所有乘客而言,从图中容易发现,乘客的平均年龄在30岁,有四分之一的人低于20岁,另有四分之一的人超过38岁,换句话说,有一半的人,年龄落在20~38岁之间;从均值(红色的菱形)略高于中位数(黄色虚线)来看,说明年龄是有偏的,并且是右偏;同时,我们也会发现一些红色的异常值,这些异常值的年龄均在64岁以上。

不同等级仓的年龄箱线图

# 按舱级排序,为了后面正常显示分组盒形图的顺序

Titanic_df.sort_values(by = 'Pclass', inplace=True)

# 通过for循环将不同仓位的年龄人群分别存储到列表Age变量中

Age = []

Levels = Titanic_df.Pclass.unique()

for Pclass in Levels:

Age.append(Titanic_df.loc[Titanic_df.Pclass==Pclass,'Age'])

# 绘图

plt.boxplot(x = Age,

patch_artist=True,

labels = ['一等舱','二等舱','三等舱'], # 添加具体的标签名称

showmeans=True,

boxprops = {'color':'black','facecolor':'#9999ff'},

flierprops = {'marker':'o','markerfacecolor':'red','color':'black'},

meanprops = {'marker':'D','markerfacecolor':'indianred'},

medianprops = {'linestyle':'--','color':'orange'})

# 显示图形

plt.show()

如果对人群的年龄按不同的舱位来看,我们会发现一个明显的趋势,就是舱位等级越高的乘客,他们的年龄越高,三种舱位的平均年龄为38、30和25,说明年龄越是偏大一点,他们的经济能力会越强一些,所买的舱位等级可能就会越高一些。同时,在二等舱和三等舱内,乘客的年龄上存在一些异常用户。

matplotlib数据可视化--折线图

折线图主要是看内容随时间变化的趋势情况

# 读取数据

df = pd.read_excel('C:/Users/A/Desktop/16-08user_analysis.xlsx')

df.head()

#删除第一行

df.dropna(axis = 0,inplace = True)

df.head()

# 设置画布大小

fig = plt.figure(figsize = (8,4))

#绘图

plt.plot(df['时间'], #x轴数据

df['新关注人数'],) #y轴数据

#添加标题和坐标轴标签

plt.title('公众号每天新增用户数')

plt.xlabel('日期')

plt.ylabel('新增人数')

fig.autofmt_xdate(rotation = 45)

#显示图形

plt.show()

双线(多线多加plt.plot)

# 绘图第一条

plt.plot(df['新关注人数'],# y轴数据

marker = 'o', # 点的形状

markersize = 5,# 点的大小

markerfacecolor = 'mediumpurple'# 点的填充色

)

#绘图第二条

plt.plot(df['取消关注人数'],# y轴数据

marker = 'o',# 点的形状

markersize = 5,# 点的大小

markerfacecolor = 'orangered'# 点的填充色

)

# 添加标题和坐标轴标签

plt.title('公众号关注情况')

plt.xlabel('日期')

plt.ylabel('新增人数')

fig.autofmt_xdate(rotation = 45)

# 显示图例

plt.legend()

# 显示图形

plt.show()

matplotlib数据可视化--直方图

# 导入数据

df = pd.read_excel(r'C:\Users\A\Desktop\16-10house_data.xlsx',

sheet_name = 'Sheet1')

df.head()

#绘制条形图

df['均价'].plot(kind = 'hist',color= 'r',

legend = True,edgecolor = 'b',title='上海徐汇区二手房均价分布直方图')

plt.xlabel('均价(元)')

plt.ylabel('计数')

Text(0, 0.5, '计数')

绘制累积分布直方图

alpha = 0.4#透明度

df['均价'].plot(kind='hist',cumulative = True,legend=True,

edgecolor = 'k',alpha=0.4,title='上海徐汇区二手房均价累积分布直方图')