1.Matplotlib介绍
Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发。
matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式。示例:
import matplotlib.pyplot as plt
# 包含五个元素列表的一个图形
#如果输入的参数只是一个一维的列表,那么这个数组会被当成y轴处理,x轴是列表的索引
plt.plot([1,5,8,2,5])
plt.ylabel("grade") #y轴增加标签
plt.savefig('te01',dpi=600) #dpi是指每个英寸包含600个像素点(质量挺高的了)
plt.show()
2.图像结构和三层结构
-
图像结构
-
三层结构
-
图像层
-
正式绘图(直方图、折线图、散点图、饼状图)
-
-
辅助显示层
-
用户可以设置添加标题、网格、图例等对图形的描述信息
-
-
容器层主要由 Canvas、Figure、Axes 组成。
-
Canvas 是位于最底层的系统层,在绘图的过程中充当画板的角色,即放置画布 (Figure) 的工具。
-
Figure 是 Canvas 上方的第一层,也是需要用户来操作的应用层的第一层,在绘图的过程中充当画布的角色。
-
Axes 是应用层的第二层,在绘图的过程中相当于画布上的绘图区的角色。
-
特点:
-
一个figure (画布)可以包含多个 axes (坐标系/绘图区), 但是一个axes 只能属于一个 figure。
-
一个 axes (坐标系/绘图区)可以包含多个 axis (坐标轴), 包含两个即为2d坐标系,3个即为3d坐标系
-
-
-
容器层
-
3.折线图
1.折线图的绘制与显示
plot() 用于画图它可以绘制点和线,语法格式如下:
# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数说明:
-
x:X轴数据,列表或数组,可选(绘制多条曲线时,各条曲线的x不能省略)
-
y:Y轴数据,列表或数组
-
format_string:控制曲线的格式字符串(由颜色字符、风格字符和标记字符组成),可选
颜色字符 颜色字符 说明 颜色字符 说明 ‘b’ 蓝色 ‘m’ 洋红色 magenta ‘g’ 绿色 ‘y’ 黄色 ‘r’ 红色 ‘k’ 黑色 ‘c’ 青绿色 cyan ‘w’ 白色 ‘#008000’ RGB某颜色(十六进制色彩) ‘0.8’ 灰度值字符串 风格字符 风格字符 说明 风格字符 说明 ‘-‘ 实线 ‘:’ 虚线 ‘–‘ 破折线 ” ‘ ‘ 无线条 ‘-.’ 点划线 标记字符 标记字符 说明 标记字符 说明 ‘.’ 点标记 ‘s’ 实心方形标记 ‘,’ 像素标记(极小点) ‘p’ 实心五角标记 ‘o’ 实心圈标记 ‘*’ 星形标记 ‘v’ 倒三角标记 ‘h’ 竖六边形标记 ‘^’ 上三角标记 ‘H’ 横六边形标记 ‘>’ 右三角标记 ‘+’ 十字标记 ‘<‘ 左三角标记 ‘x’ x标记 ‘1’ 下花三角标记 ‘D’ 菱形标记 ‘2’ 上花三角标记 ‘d’ 瘦菱形标记 ‘3’ 左花三角标记 ‘|’ 垂直线标记 ‘4’ 右花三角标记 -
**kwargs:第二组或更多(x, y, format_string)
-
color:控制颜色,color=’green’
-
linestyle:线条风格,linestyle=’dashed’
-
marker:标记风格,marker=’o’
-
markerfacecolor:标记颜色,markerfacecolor=’blue’
-
marksize,标记尺寸,markerfacecolor=20
-
#1.创建画布
plt.figure()
#2.绘制图像
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
#3.显示图像
plt.show()
2.设置画布属性与图片保存
plt.figure(figsize=(),dpi=)
figsize:指定图的长宽
dpi:图像的清晰度
plt.savefig(path)
#1.创建画布
plt.figure(figsize=(20,8),dpi=80)
#2.绘制图像
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
plt.save("test.png")
plt.show()会释放资源,如果在显示图像之后保存图片将只能保存空图片
3.修改x、y轴刻度
-
plt.xticks(x, **kwargs)
x:要显示的刻度值
-
plt.yticks(y,**kwargs)
y:要显示的刻度值
#1.准备数据
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
#2.创建画布
plt.figure(figsize=(20,8),dpi=80)
#3.绘制图像
plt.plot(x,y_shanghai)
#修改xy刻度
#准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
#label与x一一对应
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))
#4.显示图像
plt.show()
中文显示问题
原因:字体本身就不支持中文
解决:
-
安装字体
-
双击安装simhei.ttf 下载地址:Download SimHei Font – Thousands of fonts to download for free
-
-
删除matplotlib缓存文件
-
配置文件
4.添加网格显示
-
plt.grid(True,linestyle=’–‘,alpha=0.5)
一般的 ture 显示默认,为是否添加网格,linestyle 为线条风格,显示为虚线。Alpha 为透明度。
5.添加描述信息
添加 x 轴,y 轴描述信息及标题。
-
plt.xlabel(“时间”)
-
plt.ylabel(“温度”)
-
plt.title(“标题” )
函数 | 说明 |
---|---|
plt.xlabel() | 对X轴增加文本标签 |
plt.ylabel() | 对Y轴增加文本标签 |
plt.title() | 对图形整体增加文本标签 |
plt.text() | 在任意位置增加文本 |
plt.annotate() | 在图形中增加带箭头的注解 |
6.多个折线和显示图例
-
多个折线
-
import random import matplotlib.pyplot as plt from matplotlib import font_manager my_font = font_manager.FontProperties(fname='msyh.ttc') # 拷贝过来的字体文件 x = range(60) y_beijing = [random.uniform(15,18) for i in x] y_shanghai = [random.uniform(15,18) for i in x] #2.创建画布 plt.figure(figsize=(20,8),dpi=80) #3.绘制多个折线 plt.plot(x,y_shanghai,color='r') plt.plot(x,y_beijing,color='b') #修改xy刻度 #准备x的刻度说明 x_label = ["11点{}分".format(i) for i in x] #label与x一一对应 plt.xticks(x[::5],x_label[::5],fontproperties=my_font) plt.yticks(range(0,40,5)) #4.显示图像 plt.show()
-
-
显示图例
plt.legend()
plt. legend(Loc="best") #Location String:'best'、'upper right'、'upper left'、'lower left'、'lower right' 等等 #Location Code:0、1、2、3、4 #如果想在左下角显示,具体操作如下: # 显示图例 plt.legend(loc=“lower left”) #图例出现在左下角。 #用数字代替也可以。 # 显示图例 plt.legend(loc=4)
7.创建多个绘图区
-
plt.subplots(nrows=1, ncols=1, **fig_kw)
创建一个带有多个 axes(坐标系/绘图区)的图,返回一个画布figure和绘图区axes。figure,axes = plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw) #axes[0]为第一个绘图区 以此类推
-
nrows:默认为 1,设置图表的行数。
-
ncols:默认为 1,设置图表的列数。
-
sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、’all’、’row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,’row’ 设置每个子图行共享一个 x 轴或 y 轴,’col’:设置每个子图列共享一个 x 轴或 y 轴。
-
squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N1 或 1N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1×1。
-
subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
-
gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
-
**fig_kw:把详细的关键字参数传给 figure() 函数。
面向对象的方法:axes.set_方法名()
-
eg:
-
set_ xticks
-
set_ yticks
-
set_ xlabel
-
set_ ylabel
-
-
import random import matplotlib.pyplot as plt from matplotlib import font_manager my_font = font_manager.FontProperties(fname='msyh.ttc') # 拷贝过来的字体文件 x = range(60) y_beijing = [random.uniform(15,18) for i in x] y_shanghai = [random.uniform(15,18) for i in x] #2.创建画布 # plt.figure(figsize=(20,8),dpi=80) #创建多个子图 figure,axes = plt.subplots(nrows=1, ncols=2,figsize=(20,8),dpi=80) #3.绘制图像 axes[0].plot(x,y_shanghai) axes[1].plot(x,y_beijing) #修改xy刻度 #准备x的刻度说明 x_label = ["11点{}分".format(i) for i in x] #label与x一一对应 axes[0].set_xticks(x[::5]) axes[0].set_xticklabels(x_label[::5],fontproperties=my_font) axes[0].set_yticks(range(0,40,5)) axes[1].set_xticks(x[::5]) axes[1].set_xticklabels(x_label[::5],fontproperties=my_font) axes[1].set_yticks(range(0,40,5)) #4.显示图像 plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99491.html