matplotlib学习笔记

todo matplotlib.pyplot 数据可视化

‘’‘enumerate遍历对象同时打印索引’’’
list1 = [“这”, “是”, “一个”, “测试”]
for index, item in enumerate(list1):
print (index, item)

数据可视化
基于numpy pandas
图表
pip install matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

散点图1
制作例数组
arra1=np.random.uniform(0.0,5.0,size=(100,2))
均匀分布中随机采样 0.0-5.0之间 100行2列
arra2=np.random.uniform(4.2,10,size=(100,2))
保存
np.savetxt(’./示例1.txt’,arra1,fmt=’%f %f’,delimiter=’\n’)
路径 data 格式 空格隔开 换行
np.savetxt(’./示例2.txt’,arra2,fmt=’%f %f’,delimiter=’\n’)
读取
a=np.loadtxt(’./示例1.txt’)
b=np.loadtxt(’./示例1.txt’)
散点绘图
plt.scatter(a[:,0],a[:,1]) 冒号取所有行 0取0列数据 1取1列数据 形成xy坐标
plt.scatter(b[:,0],b[:,1])

例2
x=[1,2,3,4]
y=[2,3,4,8]
plt.scatter(x,y,s=[10,20,30,40],color=[‘r’,‘b’,‘g’,‘y’],marker=‘h’)
s是点大小 color点颜色 marker点形状

例20名男女身高分布
df_woman=pd.DataFrame(
{
‘high’:np.random.uniform(160,190,20),
‘y’:np.zeros(20)
},
index=np.arange(1,21)
)
合并列
all=pd.concat([df_man,df_woman])
提取索引
all[all.y0].index
提取身高
all[all.y
0].high
画图
plt.scatter(all[all.y0].index,all[all.y0].high,color=‘r’)

生成折线图3 变化周期过程
np.random.seed(1)固定下面数列
y=np.random.random(size=10)与 np.random.random(10)同 10个0-1浮点数
plt.plot(x,y,color=‘y’,linestyle=’–’,marker=‘h’)颜色 线样式虚线 点样式
或plt.plot(x,y,‘b–o’) 蓝虚线圆点连接

正弦曲线4 cpu算浮点不会取整 gpu专算浮点 变化周期过程
xx=np.linspace(0,10,100)0-10生成100数
yy=np.sin(x)算正弦值
yy2=np.cos(x)算余弦值
plt.plot(xx,yy,label=‘sin(x)’)画出正弦曲线label是角标
plt.plot(xx,yy2,label=‘cos(x)’)
plt.plot([-5,15,-2,2]) 前两个x轴范围 后两个y轴范围
plt.legend()显示角标

柱状图 数据多少
x=[‘Q1’,‘Q2’,‘Q3’,‘Q4’]
y=[10,30,20,60]
rect=plt.bar(x,y,color=‘g’,width=0.3)颜色 宽度
plt.grid(True)显示网格
for index,item in enumerate(rect): enumerate遍历时能同时遍历索引
xx=item.get_x()+0.07 横坐标
yy=item.get_height()+0.8 纵坐标
plt.text(xx,yy,y[index]) 字位置
plt.ylim(0,70)调整y轴总高

饼图 数据占比
plt.axes(aspect=1)
plt.pie(y,labels=x,autopct=’%2.f%%’,explode=[0.22,0,0,0],shadow=True)
数据 标注 显示百分比 抽出样式 阴影样式
plt.show()

直方图 大量数据分布段
data=np.random.normal(9000,3000,size=300)生成正态分布数据 3千-9千 生成300个
data=data[data>=5000] 选5000以上的提取
plt.hist(data,color=‘g’,rwidth=0.5,alpha=0.5,bins=30)
数据 颜色 柱宽 透明 柱数
plt.show()

箱线图 查看异常值
df = pd.DataFrame(np.random.rand(10,5),columns=[‘A’,‘B’,‘C’,‘D’,‘E’])
f = df.boxplot(sym = ‘o’, #异常点形状
vert = True, # 是否垂直 箱线图是横向的(False)还是竖向的(True)
whis=1.5, # 11 IQR 也可以设置区间比如[5,95],代表强制上下边缘为数据95%和5%位置
patch_artist = True, # 上下四分位框是否填充
meanline = False,showmeans = True, # 11 是否有均值线及其形状
showbox = True, # 是否显示箱体
showfliers = True, #是否显示异常值
notch = False, # 中间箱体是否缺口
return_type=‘dict’) # 返回类型为字典
#positions:指定箱线图的位置,默认为[0.1.2…]
#widths:指定箱线图的宽度,默认为0.5
plt.title(‘箱线图’,fontproperties=myfont)
plt.show()

子图 多个特征相互比较
plt.subplot(2,1,1) 2行1列 图1
plt.subplot(2,1,2)
会返回2个对象 fig图的大小细节 ax是图本身
上小2 下大1
plt.subplot(2,2,1)
plt.subplot(2,2,2)
plt.subplot(2,1,2)

平均工资筛选
url=‘北京=9240.上海=8962.深圳=8315.广州=7489.杭州=7330.宁波=7000.佛山=6889.东莞=6809’
res={k.split(’=’)[0]: k.split(’=’)[1] for k in url.split(’.’)}
print(res)
{‘北京’: ‘9240’, ‘上海’: ‘8962’, ‘深圳’: ‘8315’, ‘广州’: ‘7489’, ‘杭州’: ‘7330’, ‘宁波’: ‘7000’, ‘佛山’: ‘6889’, ‘东莞’: ‘6809’}
import pandas as pd
data=pd.read_table(’./salary.txt’,step=’\t’)以制表符分隔
plc.rc(‘font’,**{‘family’:‘Microsoft YaHei,SimHei’})设置字体为雅黑防止报错
date=data.set_index(‘城市’) 直接把城市信息转换为索引
pandas底层生成图
data[[‘月均工资’]].boxplot()箱线 需要dataframe对象调用
data[[‘月均工资’]].hist()直方图

namess=‘北京=9240.上海=8962.深圳=8315.广州=7489.杭州=7330.宁波=7000.佛山=6889.东莞=6809’
res={k.split(’=’)[0]: k.split(’=’)[1] for k in namess.split(’.’)}
a=[]
b=[]
for key in res:
a.append(int(res[key])) 工资
b.append(key) 城市
dfw=pd.DataFrame([b,a]) 生成表
dfw=dfw.T 翻转表
dfw.index=list(range(1,len(a)+1))索引
dfw.columns=[‘city’,‘salar’] 标题
dfw=dfw.set_index(‘city’) 设置索引为城市
dfw=dfw.drop(‘city’,axis=1)
plt.rc(‘font’,**{‘family’:‘Microsoft YaHei,SimHei’})设置字体为雅黑防止报错

plt.subplot(2,2,1) 上图1
bb=dfw.salar yy值
plt.plot(dfw.index,bb) 绘图
plt.subplot(2,2,2) 上图2
plt.bar(dfw.index,bb) 绘图
plt.subplot(2,1,2) 下图1
plt.bar(dfw.index,bb) 绘图

横柱图
import numpy as np
data=pd.DataFrame(np.random.rand(10,4),columns=(‘A’,‘B’,‘C’,‘D’))生成10行4列 0-1数组
data.plot(kind=‘barh’) 横向柱状图
data.plot() 线图
data.plot(kind=‘barh’,stacked=True) 复合横柱图
plt.savefig(’./test.png’) 保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值