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='上海徐汇区二手房均价累积分布直方图')