Matplotlib是最流行的Python底层绘图库,主要做数据可视化图表
导包:
import matplotlib.pylot as plt ………….绘图库
import numpy as np ………………………numpy库
命令:
// 折线图
折线图用于显示随时间或有序类别的变化趋势
# 可以绘制多个图表
plt.plot(
x轴,
y轴,
color='g', # 颜色,css或者16进制都可以
linestyle='', # 线条样式, --虚线
linewidth=5, # 线条粗细
marker='o', # 标记风格
markerfacecolor='#ffff00', # 标记颜色
markersize=10, # 标记大小
alpha=0.5, # 透明度
lable='标题一', # 为图中显示标识名字
)
# 图表标题
plt.titie(
'hello图表标题 $a^{2}+b^{2}=C^{2}$', # 可以使用$引入一部分latex文本排版语法和公式
fontproperties='SimHei',
color='g' # 标题颜色
fontsize=24, # 字体型号
)
# x,y轴标题
plt.xlable('x轴标题', fontproperties='SimHei') # x轴标题, r为转义
# x,y刻度
plt.xticks(
[0,1,2,5,8,10], # 刻度设置
['2000','2001','2002','2005','2008'], # 在之前的刻度上在换个名字
fontsize=14, # 文字大小
rotation=90, # 旋转角度
)
# axis坐标范围, axis比 ticks优先级要高
plt.axis([-1,11,-2,12]) # X轴-1到11,Y轴-2到12
# loc位置,frameon有无边框, 需要全局修改默认字体
plt.legend(loc='best', frameon=False)
# 网格
plt.grid(True)
# 存为png文件, 电脑为72, 出版至少在300以上
plt.savefig('test',dpi=72) # dpi 分辨率
# 显示图片
plt.show()
// 散点图
散点图可以显示若干数据系列中各数值之间是否存在相关性
1. 折线图线条样式为空,设置一个标记
2. 如下
plt.scatter(
x轴,
y轴,
color='g', # 颜色,css或者16进制都可以
marker='o', # 样式
linewidth=5, # 大小
alpha=0.5, # 透明度
)
plt.show()
// 条形图
柱状图用来比较各独立类别下的某单独数据的大小
plt.barh(
y轴, # 横条离开x轴的距离
x轴, # 横条的距离
height=0.2, # 控制y轴线条的粗细
)
# 改变y轴的值
plt.yticks(y,['a','b','c','d','e'])
plt.show()
// 柱状图(纵向)
柱状图用来比较各独立类别下的某单独数据的大小
# 对比图片把两个图表的width设置0.3,在把第二个图表的x轴加上0.3即可
plt.bar(
x轴,
y轴,
# 加背景网格
plt.grid()
# 对齐背景网格
plt.xticks(x1+0.15,['a','b','c','d','e','f'])
plt.show()
// 直方图
直方图能直观表达数据的分布情况,一般用来表示同等区间内,某类数值出现的频率
直方图与柱状图的区别:
- 直方图:分区之间连续无间断,表示连续变量;值用矩形面积表示
- 条形图:各柱之间有间隙,表示孤立的、不连续分类变量;值用矩形长度表示
plt.hist(
直方图数据,
直方的个数,
normed=1, # 将y轴默认的数值出现个数归一化为出现的概率
histtype='stepfilled', # stepfilled填充面积,step只有线条
facecolor='b', # 面积颜色
alpha=0.75 # 透明度
)
plt.show()
// 饼图
饼图用于显示各项相对总和的百分比大小
plt.pie(
[25,25,25,25],
explode=(0, 0.1, 0, 0), # 突出块,突出比例
labels=['class1','class2','class3','class4'], # 逆时针起名
autopct='%1.1f%%', # 显示各个饼块百分比
shadow=False, # 阴影效果
startangle=90, # 饼图起始的角度,度数,默认0为右侧水平180度开始,逆时针旋转
)
# 正圆形饼图,x/y轴尺寸相等.默认是扁图
plt.axis('equal')
plt.show()
// 文本注释
# 普通注释
plt.text(
x,
y,
'任意位置文本', # 显示文本内容
fontproperties='SimHei', # 字体,解决汉字乱码
fontsize='24', # 文字大小
rotation=45 # 旋转角度
)
# 任意位置增加带箭头的注释文本
plt.annotate(
'这里转折', #显示字符串
fontproperties='SimHei', # 字体,解决汉字乱码
xy=(3,4), # 箭头位置
xytext=(3.5,4.5), # 文本位置
arrowprops=dict( # 字典类型,定义一些元素样式
facecolor='red', # 箭头颜色
shrink=0.1, # 箭头的起始和结束位置两侧的空白大小
width=2, # 箭头宽度
)
)
// 穿越线条
# 穿越x | y轴的线条,axvline函数,x,vmin,vmax
plt.axhline(
y=4, # y轴坐标
color='r', # 颜色
linewidth=1, # 线宽
xmin=0.6, # 从左到右,xmin,线条在x轴起始位置,比例,0-1,从60%位置开始
xmax=0.85, # xmax,线条在x轴结束位置,比例,0-1,从85%位置结束
)
# 穿越x轴的矩形,参数:ymin,ymax,xmin=0,xmax=1
p = plt.axhspan(
0.5, # 矩形在y轴起始坐标
1.5, # 矩形在y轴结束坐标
facecolor='0.5', # 颜色
alpha=0.2 # 透明度
)
# 穿越y轴的矩形,xmin,xmax,ymin=0,ymax=1,...
p = plt.axvspan(
0.7, # 矩形在x轴起始坐标
1.3, # 矩形在x轴起始坐标
0.05, # 从下到上,矩形在y轴起始位置,比例,0-1,从5%位置开始
0.5, # 矩形在y轴结束位置,比例,0-1,从50%位置结束
facecolor='g',
alpha=0.2
)
进阶
// 创建多个子对象
# 第一个图像
plt.figure() # 默认编号为1,每个figure是一个单独的图像
plt.plot([1,2,3])
# 第二个图像
plt.figure(
2, # 指定图像编号,创建和选择图像使用
figsize=(18,4), # 图像尺寸
dpi=80, # 分辨率,没什么用
facecolor='#cccccc', # 背景颜色
)
plt.plot([1,3,2])
# 指定在第一个图像里画
plt.figure(2)
plt.plot([5,2,3])
// 创建多个ax子对象
简单绘图区域:将一个fig大图分割为多个ax子图,分别绘图,同时输出
# 第一行第一列的第一个图像
# 小于10可以去掉逗号
plt.subplot(2,2,1)
plt.plot([1,2,3])
# 第两行第两列第二个图像
plt.subplot(2,2,2)
plt.plot([1,2,3])
// 多个父级嵌套多个子对象
其他
// Matplotlib在Retina屏幕中显示模糊问题
%config InlineBackend.figure_format = 'retina'
// 修改全局默认字体
- 优点:适用于所有中文乱码情况
- 缺点:修改后影响本工作空间内所有代码,本次运行中删除代码也不会恢复默认,如想恢复默认可将字体名改回系统默认的sans-serif
import matplotlib.pyplot as plt
import matplotlib # 载入matplotlib完整库
matplotlib.rcParams['font.family']='Microsoft Yahei' # 字体,改为微软雅黑,默认 sans-serif
matplotlib.rcParams['font.size']=32 # 可调整字体大小,整数字号,默认10
// 内联和GUI显示
切换展示方式时可能需要重启Jupyter Notebook内核才能生效
# 外置GUI展示
%matplotlib qt5
# 内联显示,不用加载plt.show()
%matplotlib inline