python groupby agg_python矩阵图

310eb96a00df0065b56afd914807138b.png

矩阵图

矩阵图也称为四象图,是一种用来研究两个或两个以上指标之间关系的图表。是在散点图的基础上,根据一定的业务经验或水平将散点图划分为四个象限. 通过对两两指标的高低排列组合,得到四类不同性质的对象:双高、双低、高低、低高。

设置坐标轴的样式

在matplotlib.pyplot模块中,使用xlim函数和ylim函数设置x轴、y轴刻度的范围。matplotlib.pyplot.xlim(left=None,right=None)

参数说明
leftx轴刻度的最小值
rightx轴刻度的最大值

matplotlib.pyplot.ylim(bottom=None,top=None)

bottomy轴刻度的最小值
topy轴刻度的最大值

##  绘制分界线

绘制中间两条十字分界线,使用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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值