matplotlib库的学习(个人用)
为什么要学习matplotlib?
原因
1.能将数据进行可视化,更直观的呈现
2.使数据更加客观、更具说服力
什么是matplotlib?
matplotlib: 最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建
matplotlib绘图
最简单的折线图表绘制
from matplotlib import pyplot as plt ->导入pyplot
x = range(2,26,2)#数据在x轴的位置,是一个可迭代对象
y = [15 , 13 , 14.5 , 17 , 20 , 25 , 26 , 26 , 24, 22 , 18 , 15]#数据在y轴的位置,是一个可迭代对象
# ->x轴和y轴的数据一起组成了所有要绘制出的坐标
# ->分别是(2,15),(4,13),(6,14.5),(8,17).....
plt.plot(x,y) # ->传入x和y,通过plot绘制出折线图
plt.show() # ->在执行程序的时候展示图形
包括x轴,y轴的刻度,以及图形的展示,注意x和y的元素个数要相等
最简单的散点图的绘制
在折线图的基础上,将plt.plot()
转变成plt.scatter()
其他地方基本相同
最简单的条形图的绘制
在折线图的基础上,将plt.plot()
转换成plt.bar(x,y,width = )
width传入条形粗细(这是竖形的条形图)
在折线图的基础上,将plt.plot()
转换成plt.barh(x,y,height = )
height传入条形粗细(这是横状的条形图)
其他与折线图基本相同
最简单的直方图的绘制
在折线图的基础上,将olt.plot()
转换成plt.hist(a,num_bins,density = 1(或者True))
a为一组数据,num_bins为组数,如果传入density = 1(或者True),则变成频率直方图
把数据分为多少组进行统计
组数要适当,太少会有较大的统计误差,大多规律不明显
组数:将数据分组,当数据在100个以内时,按数据多少常分5-12组
组距:指每个小组的两个端点的距离
组数 = 极差 / 组距
plt.xticks(x_label)—弹幕看见的,不知道有什么用
对图形进行润色加工
1.设置图片大小(想要一个高清无码大图)
plt.figure(figsize=(21,11),dpi=80)
在绘制图表的代码前加上这行代码,figsize能选定长和宽,dpi是清晰度,越高越好
2.保存到本地
plt.savefig("./t1.png(或者svg)")
在绘制图表的代码后加上这行代码,括号内传入图片保存的地址,可以保存为svg这种矢量图格式,放大不会有锯齿(网页可用)
3.描述信息,比如x轴和y轴表示什么,这个图表示什么
plt.xlabel("",fontproperties = my_font)
传入x轴表示什么,还可以再传入size = n 定义字体大小
plt.ylabel("",fontproperties = my_font)
传入y轴表示什么,还可以再传入size = n 定义字体大小
plt.title("",fontproperties = my_font)
传入表头,还可以再传入size = n 定义字体大小
4.调整x或者y的刻度的间距以及如果包含字符串如何处理
plt.xticks()
指定x轴刻度的数目与取值,传入的是一个列表
plt.yticks()
指定y轴刻度的数目与取值,传入的是一个列表
-
xticks用法详解(yticks与之相同)
-
plt.xticks(a,b,rotation = )
a为控制列表的刻度,b为lebel,表示在该刻度上显示的字符串,所以a和b需要一一对应,rotation传入一个数字n,表示将该刻度旋转n°
-
-
如果传入的字符串是中文,因matplotlib不支持中文,所以需要额外设置
-
from matplotlib import font_manager my_font = font_manager.FontProperties(fname = "D:\Python_learning\pythonProject\msyh.ttc",size = )#传入字体的路径,参考地址是我安装的微软雅黑,size传入字体的大小,可以用阿拉伯数字表示 plt.xticks(fontproperties = my_font) #设置字体
-
-
plt.grid(alpha = )
可以用来绘制列表的表格,传入0-1的参数,数字越大,表线越清晰,不传入默认为1 -
添加图例:
-
plt.plot(x,y1,label = "自己")#label传入的字符串即为图例的文字(?怎么表达,就是线条旁边的文字) plt.plot(x,y2,label = "同桌") plt.legend(prop = matplotlib_Chinese.my_font,loc=)#注意这里是prop,使得图例支持中文;loc决定图例的位置,可以是数字或字符串,直接查看源码即可
注意:图例的绘制必须要在plt.plot后面
-
5.线条的样式(比如颜色,透明度等)
- 线条颜色:
color = "orange"
插入位置可以是plot之后,color = “…” - 线条风格:
linestyle = ''
插入位置同上- 实线: -
- 虚线、破折线: –
- 点划线: -.
- 点虚线,虚线: :
- 留空或空格,无线条
- 线条粗细:
linewidth = 数字
同上 - 透明度:
alpha =
范围为0-1
6.给图片添加一个水印(防伪,防止盗用)
plt.text(x, y, s)
其中x,y表示传入点的x和y轴坐标。s表示字符串。
需要注意的是,这里的坐标,如果设定有xticks、yticks标签,则指的不是标签,而是绘图时x、轴的原始值。
因为参数过多,不再一一解释,根据代码学习其用法。
ha='center’表示垂直对齐方式居中,fontsize=30表示字体大小为30,rotation=-25表示旋转的角度为-25度。c设定颜色,alpha设定透明度。
va表示水平对齐方式
from matplotlib import pyplot as plt
plt.text(20,3, '蛇神出品', ha='center', fontsize=30, rotation=-25, c='gray', alpha=0.4,fontproperties=matplotlib_Chinese.my_font)
7.标记出特殊的点(比如告诉别人最高点和最低点在哪里)
添加注释 plt.annotate()
添加注释。注释即对图像中某一位置的解释,可以用箭头来指向。
添加注释使用的是plt.annotate()方法
其语法中的常用参数如下
plt.annotate(str,xy,xytext,xycoords,arrowcoords)
其中str即注释要使用的字符串,即注释文本
xy指被注释的坐标点
xytext指注释文本要写在的位置
xycoords是被注释的点的坐标系属性,即以什么样的方式描述该点的坐标。设置值默认为"data",即用(x,y)坐标来描述。其他可以选择的设置值如下,其中figure指的是整个画布作为一个参考系。而axes则表示仅对于其中的一个axes对象区域。
arrowprops是一个字典,用来设置箭头的属性。写在这个字典之外的参数都表示的是注释文本的属性。
字典内可以设置的值有
设置值 描述
width 箭头的宽度(非头部)
headwidth 箭头头部的宽度
headlength 箭头头部的长度
facecolor 箭头的颜色
shrink 箭头两端收缩的百分比(占总长)
? 任何matplotlib.patches.FancyArrowPacth中的关键字
关于这些参数的进一步解释:其中箭头的总长度先是通过被注释点位置坐标 与 注释文本位置坐标 所决定的,可以通过调节参数arrowprops中的shrink键来进一步调节箭头的长度,shrink表示将箭头缩短的长度占总长度(被注释点位置坐标 与 注释文本位置坐标 决定的长度)的百分比。当不设定shrink时,shrink默认为0,即不缩短。当shrink很大,接近1时,其效果等同于不缩短。
代码示例:
plt.annotate('最低价', (x,y),(x,y), xycoords='data',arrowprops=dict(facecolor='r', shrink=0.1), c='r',fontsize=15)
8.matplotlib官方网址(有一些图形的代码可以直接copy):官网
各种常用统计图的对比
折线图:
以折线的上升或下降来表示统计数量的增减变化的统计图
特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)
直方图:
由一系列高度不等的纵向条纹或线段表示数据分布的情况。
一般用横轴表示数据范围,纵轴表示分布情况。
特点:绘制连续性的数据,展示一组或者多组数据的分布状况(统计)
条形图:
排列在工作表的列或行中的数据可以绘制到条形图中。
特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计)
散点图:
用两组数据构成多个坐标点,考察坐标点的分布,判断两变量
之间是否存在某种关联或总结坐标点的分布模式。
特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)
其他绘图工具(前端框架)
[百度ECharts](百度ECharts (ipkd.cn))
plotly 画图工具中的github