matplotlib的基本应用
matplotlib的基础绘图
matplotlib将数据进行可视化,更直观的呈现,使数据更加客观、更具说服力。其是最流行的底层绘图库,主要做数据可视化图表
绘图基本方法如下:
# 测试matplotlib
from matplotlib import pyplot as ppt
# 调整图片大小
fig = ppt.figure(figsize=(20, 8), dpi=80) # 设置图片的大小,在图片模糊的时候传入dpi参#数,让图片更加清晰
x = range(2, 26, 2) # x轴
y = [15, 13, 14, 15, 19, 17, 10, 18, 20, 15, 19, 19] # y轴
# 绘图
ppt.plot(x, y,label='图例') # 传入x,y,通过polt绘出折线图,
ppt.legend(loc=数字或短语) # 显示图例并且位置可变
ppt.grid(alpha=0.4) # 画网格,alpha透明度
# 保存图片
ppt.savefig('./t1.png') # 可保存为svg矢量图格式,这样放大不会有锯齿
# 设置x轴的刻度
ppt.xticks(x) # 设置x轴的刻度,传一个参数时只显示数字,传递两个参数,数字与字符串一一对应,显示该字符串
# 设置y轴的刻度
ppt.yticks(y)
ppt.show() # 在程序执行中展示图片
改变图例位置用法
自定义绘制图形风格
matplotlib默认不支持中文字符
fc-list 查看支持的字体
fc-list :lang=zh 查看支持的中文(冒号前面有空格)
修改matplotlib的默认字体:
①通过matplotlib.rc可以修改
②通过matplotlib下的font manager可以修改(一定可以)
import matplotlib
from matplotlib import font_manager
显示中文:
# 修改默认字体
# ①
# font = {'family': 'MicroSoft YaHei',
# 'weight': 'bold',
# 'size': '4'}
# matplotlib.rc('font', **font)这四行操作与下一行操作效果一样
matplotlib.rc('font', family='MicroSoft YaHei', weight='bold')
# ②
# my_font = font_manager.FontProperties(fname=) # fname='字体所在的位置路径'
# my_font中要显示中文的地方添加fontproperties=my_font,图例使用prop=my_font来接受
设置中文显示
ppt.xlabel('时间') # x轴
ppt.ylabel('温度/^C') # y轴
ppt.title('十点到十二点的气温变化情况') # 图片标题
常用统计图的对比
绘制散点图
使用ppt.scatter()绘制散点图,这也是与绘制折线图的唯一区别
绘制条形图
bar()方法绘制纵向条形图,barh()绘制横向条形图
a = ['战狼', '速度与激情', '功夫瑜伽']
b = [78, 98, 56]
f = ppt.figure(figsize=(20, 8), dpi=300)
matplotlib.rc('font', family='MicroSoft YaHei', weight='bold')
# font = {'family': 'MicroSoft YaHei',
# 'weight': 'bold',
# 'size': '10'}
# matplotlib.rc('font', **font)
ppt.yticks(range(len(a)), a, rotation=45) # rotation调整字体角度
ppt.barh(range(len(a)), b, height=0.3) # width调整柱状图宽度,height调整高度,bar()方法绘制纵向条形图,barh()绘制横向条形图
ppt.grid(alpha=0.3)
ppt.show()
绘制多次条形图
a = ['猩球崛起3:终局之战', '敦刻尔克', '蜘蛛侠:英雄归来', '战狼2']
b1 = [15746, 312, 4497, 319]
b2 = [12357, 156, 2045, 168]
b3 = [2358, 399, 2358, 362]
n = 0.2 # 重点步骤
x1 = list(range(len(a))) # 先后移动,防止重叠操作
x2 = [i + n for i in x1]
x3 = [i + n * 2 for i in x1]
ppt.xticks(x2, a)
ppt.bar(range(len(a)), b1, width=n, label='9月14日')
ppt.bar(x2, b2, width=n, label='9月15日')
ppt.bar(x3, b3, width=n, label='9月16日')
绘制直方图
组数:当处理数据在100个以内时,常分为5-12组
组距:指每个小组的两个端点的距离
组数=极差/组距
a = [12, 23, 32, 98, 23, 42, 65, 54]
计算组数
x = 2 # 组距 设置能够整除
num_bins = int((max(a) - min(a)) // x) # 分为多少组
ppt.hist(a, num_bins, normed=1) # 绘制图形 一般来说绘制没有经过处理数据的直方图
ppt.hist(a,[min(a)+i*bin_width for i in range(num_bins)]) # 可以传入一个列表,长度为组数,值为分组依据,当组距不均匀时可以使用
ppt.hist(a,num_bins,normed=1) # normed:bool是否绘制频率分布直方图,默认为频数直方图
ppt.xticks(range(min(a), max(a) + x, x), rotation=45)