矩阵图
矩阵图也称为四象图,是一种用来研究两个或两个以上指标之间关系的图表。是在散点图的基础上,根据一定的业务经验或水平将散点图划分为四个象限. 通过对两两指标的高低排列组合,得到四类不同性质的对象:双高、双低、高低、低高。
设置坐标轴的样式
在matplotlib.pyplot模块中,使用xlim函数和ylim函数设置x轴、y轴刻度的范围。matplotlib.pyplot.xlim(left=None,right=None)
参数 | 说明 |
left | x轴刻度的最小值 |
right | x轴刻度的最大值 |
matplotlib.pyplot.ylim(bottom=None,top=None)
bottom | y轴刻度的最小值 |
top | y轴刻度的最大值 |
## 绘制分界线
绘制中间两条十字分界线,使用vlines函数绘制竖线,使用hlines函数绘制横线。matplotlib.pyplot.vlimes(x,ymin,ymax,linewidth=None,color=None)
参数 | 说明 |
x | 竖线对应的x轴的位置 |
ymin | 竖线对应的y轴的结束位置 |
ymax | 竖线对应的y轴的结束位置 |
linewidth | 线的宽度 |
color | 线的颜色 |
matplotlib.pyplot.hlines(y,xmin,xmax,linewidth=None,color=None)
参数 | 说明 |
y | 横线对应的y轴的位置 |
xmin | 横线对应的x 轴的开始位置 |
xmax | 横线对应的x 轴的结束位置 |
linewidth | 线的宽度 |
color | 线的颜色 |
添加数据标签与象限编号
在matplotlib.pyplot模块中,可以使用text函数添加数据标签与象限编号。matplotlib.pyplot.text(x,y,text,color=None,fontsize=None,fontproperties=None)
参数 | 说明 |
x | 文字位置对应的x轴的位置 |
y | 文字位置对应的y轴的位置 |
text | 要标注的文字 |
color | 文字的颜色 |
fontsize | 文字的大小 |
fontproperties | 字体属性,用于设置中文字体,解决无法显示中文问题 |
定义字体和颜色
#矩阵图
#定义字体和颜色
import matplotlib
import matplotlib.pyplot as plt
#使用字体文件设置字体大小生成字体属性,赋值font变量,用于点的标签
font=matplotlib.font_manager.FontProperties(fname='d:/python/out/source.otf',size=10)
#生成字体属性,赋值给labelFont变量,用于坐标轴的标签
labelFont= matplotlib.font_manager.FontProperties(
fname='d:/python/out/source.otf',size=15)
#蓝色,作为点的颜色
maincolor = (81/255,155/255,213/255,1)
#灰色,作为文本颜色
fontcolor = (110/255,110/255,110/255,1)
设置坐标样式
#新建绘图窗口
#fig=plt.figure()
#设置坐标轴样式
#设置X轴和Y轴范围
gap=0.01
#计算x轴的范围值
xmin=df_agg['月消费(元)'].min()*(1-gap)
xmax=df_agg['月消费(元)'].max()*(1-gap)
# 计算y轴的范围值
ymin=df_agg['月流量(MB)'].min()*(1-gap)
ymax=df_agg['月流量(MB)'].max()*(1-gap)
#设置X轴和Y轴的坐标轴的范围
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
#设置X轴和Y轴的坐标轴的刻度
plt.xticks([])
plt.yticks([])
绘制散点图
import pandas as pd
#矩阵图
#定义字体和颜色
import matplotlib
import matplotlib.pyplot as plt
#使用字体文件设置字体大小生成字体属性,赋值font变量,用于点的标签
font=matplotlib.font_manager.FontProperties(fname='d:/python/out/source.otf',size=10)
#生成字体属性,赋值给labelFont变量,用于坐标轴的标签
labelFont= matplotlib.font_manager.FontProperties(
fname='d:/python/out/source.otf',size=15)
#蓝色,作为点的颜色
maincolor = (81/255,155/255,213/255,1)
#灰色,作为文本颜色
fontcolor = (110/255,110/255,110/255,1)
df=pd.read_csv('d:/python/out/merge.csv',encoding='utf8')
#按照省份分组,对月消费进行均值统计
cost_agg=df.groupby(by='省份',as_index=False)['月消费(元)'].agg('mean')
#按照省份分组,对月流量进行均值统计
data_agg=df.groupby(by='省份',as_index=False)['月流量(MB)'].agg('mean')
#把两个统计结果合并起来
df_agg=cost_agg.merge(data_agg)
#新建绘图窗口
#fig=plt.figure()
#设置坐标轴样式
#设置X轴和Y轴范围
gap=0.01
#计算x轴的范围值
xmin=df_agg['月消费(元)'].min()*(1-gap)
xmax=df_agg['月消费(元)'].max()*(1-gap)
# 计算y轴的范围值
ymin=df_agg['月流量(MB)'].min()*(1-gap)
ymax=df_agg['月流量(MB)'].max()*(1-gap)
#设置X轴和Y轴的坐标轴的范围
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
#设置X轴和Y轴的坐标轴的刻度
plt.xticks([])
plt.yticks([])
#绘制散点图
plt.scatter(df_agg['月消费(元)'],
df_agg['月流量(MB)'],
s=150,marker='o',color=maincolor)
#设置坐标轴的标签
plt.xlabel('人均月消费(元)',color=fontcolor,fontproperties=labelFont)
plt.ylabel('人均月流量(MB)',color=fontcolor,fontproperties=labelFont)
绘制分界线
#绘制均值线
plt.vlines(x=df['月消费(元)'].mean(),ymin=ymin,ymax=ymax,linewidth=1,color=maincolor)
plt.hlines(y=df['月流量(MB)'].mean(),xmin=xmin,xmax=xmax,linewidth=1,color=maincolor)
添加数据标签和象限编号
#标注四个象限的标记
plt.text(xmax-0.5,ymax-5,'1',color=fontcolor,fontsize=30)
plt.text(xmin,ymax-5,'2',color=fontcolor,fontsize=30)
plt.text(xmin,ymin,'3',color=fontcolor,fontsize=30)
plt.text(xmax-0.6,ymin,'4',color=fontcolor,fontsize=30)
完整矩阵图
import pandas as pd
#矩阵图
#定义字体和颜色
import matplotlib
import matplotlib.pyplot as plt
#使用字体文件设置字体大小生成字体属性,赋值font变量,用于点的标签
font=matplotlib.font_manager.FontProperties(fname='d:/python/out/source.otf',size=10)
#生成字体属性,赋值给labelFont变量,用于坐标轴的标签
labelFont= matplotlib.font_manager.FontProperties(
fname='d:/python/out/source.otf',size=15)
#蓝色,作为点的颜色
maincolor = (81/255,155/255,213/255,1)
#灰色,作为文本颜色
fontcolor = (110/255,110/255,110/255,1)
df=pd.read_csv('d:/python/out/merge.csv',encoding='utf8')
#按照省份分组,对月消费进行均值统计
cost_agg=df.groupby(by='省份',as_index=False)['月消费(元)'].agg('mean')
#按照省份分组,对月流量进行均值统计
data_agg=df.groupby(by='省份',as_index=False)['月流量(MB)'].agg('mean')
#把两个统计结果合并起来
df_agg=cost_agg.merge(data_agg)
#新建绘图窗口
#fig=plt.figure()
#设置坐标轴样式
#设置X轴和Y轴范围
gap=0.01
#计算x轴的范围值
xmin=df_agg['月消费(元)'].min()*(1-gap)
xmax=df_agg['月消费(元)'].max()*(1-gap)
# 计算y轴的范围值
ymin=df_agg['月流量(MB)'].min()*(1-gap)
ymax=df_agg['月流量(MB)'].max()*(1-gap)
#设置X轴和Y轴的坐标轴的范围
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
#设置X轴和Y轴的坐标轴的刻度
plt.xticks([])
plt.yticks([])
#绘制散点图
plt.scatter(df_agg['月消费(元)'],
df_agg['月流量(MB)'],
s=150,marker='o',color=maincolor)
#设置坐标轴的标签
plt.xlabel('人均月消费(元)',color=fontcolor,fontproperties=labelFont)
plt.ylabel('人均月流量(MB)',color=fontcolor,fontproperties=labelFont)
#绘制均值线
plt.vlines(x=df['月消费(元)'].mean(),ymin=ymin,ymax=ymax,linewidth=1,color=maincolor)
plt.hlines(y=df['月流量(MB)'].mean(),xmin=xmin,xmax=xmax,linewidth=1,color=maincolor)
#标注四个象限的标记
plt.text(xmax-0.5,ymax-5,'1',color=fontcolor,fontsize=30)
plt.text(xmin,ymax-5,'2',color=fontcolor,fontsize=30)
plt.text(xmin,ymin,'3',color=fontcolor,fontsize=30)
plt.text(xmax-0.6,ymin,'4',color=fontcolor,fontsize=30)
#增加标签
#遍历数据的每一行
#根据列名获取到数据对应的x轴和Y轴的位置
for i,r in df_agg.iterrows():
plt.text(r['月消费(元)']+0.25,r['月流量(MB)']-1,r['省份'],color=fontcolor,fontproperties=font)