当不设置x时,x轴默认为0,1,2…这样的数值类型。
import matplotlib.pyplot as plt
plt.plot([1, 1, 0, 0, -1, 0, 1, 1, -1])
plt.show()
绘图时,绘图的顺序与x内数值本身的大小无关,数值在x中的顺序,即为绘图的先后顺序。
如:
import matplotlib.pyplot as plt
plt.plot([2, 1, 3, 4, 5], [2, 5, 8, 12, 18])
plt.show()
即绘制此折线图时,先绘制了(2,2)点,再绘制了(1,5)点,接着绘制了(3, 8)点。
在x中,只要存在一个数据是字符串类型,则x中所有的元素都视为字符串,这些元素在图像中不再有大小之分。
代码示例如下:
import matplotlib.pyplot as plt
plt.plot([3, 1, ‘2’, 4, 5], [2, 8, 12, 5, 9])
plt.show()
2.设置坐标轴范围 plt.xlim() & plt.ylim()
=======================================================================================================
plt.ylim() 设置y轴范围。
plt.xlim() 设置x轴范围。
import matplotlib.pyplot as plt
plt.plot([1, 1, 0, 0, -1, 0, 1, 1, -1])
plt.ylim(-3, 3)
plt.xlim(-10, 20)
plt.show()
3.设置坐标标签 plt.xticks() & plt.yticks()
==========================================================================================================
设置标签,即可以将plot()中传入的x、y的元素值在坐标轴中以其他形式显示出来。
具体方法为
plt.xticks(location, lables,rotation)
plt.yticks(location, lables,rotation)
其中,location表示原x/y轴的数据(而不是位置索引下标),lables指新设定的标签,元素数量要与location相同,且与location相同位置上有着一一对应的关系。
rotation参数通过设定一个角度的数值,可以将设定的标签旋转一定的角度。(示例代码中将x轴标签旋转45度)
且在设置标签过程中,标签可以选择设置部分。没有设置的标签也不会再显示原值。(如下边代码中没有设置x轴上数值“2”处的标签)
具体示例如下:
import matplotlib.pyplot as plt
正常显示中文
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 0, 0, -1, 0, 1, 1, -1])
plt.ylim(-3, 3)
plt.xlim(-10, 20)
plt.xticks([1, 3, 4, 5, 6, 7, 8, 9],
[‘02-01’, ‘02-03’, ‘02-04’,
‘02-05’, ‘02-06’, ‘02-07’, ‘02-08’,
‘02-09’], rotation=45)
plt.yticks([0, 1, -1], [‘低’, ‘高’, ‘中’])
plt.show()
==========================================================================================
负号正常显示
rcParams 是Matplotlib库中pyplot包绘图的参数字典,key为’axes.unicode_minus’的默认取值(value)为True,表示unicode的minus类型,有些字体对其兼容性支持不够,导致负号无法正常显示,现在将’axex.unicode_minus’的取值设为False,则可正常显示负号。
代码:
plt.rcParams[‘axes.unicode_minus’] = False
中文正常显示
默认情况下,图形中的中文为乱码形式
每次绘图前,通过代码更改参数。更改Matplotlib包中pyplot包的参数字(rcParams)字体的无衬线字体属性(font.sans-serif, 为参数字典的一个key)的取值(value),现将其设定为以’SimHei’为元素的数组形式。
代码:
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
5. 设置坐标 轴 标签 plt.xlabel() & plt.ylabel()
===============================================================================================================
在图像中添加坐标轴标题可以直观地显示坐标轴代表的数据变量。
plt.xlabel()
plt.ylabel()
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 0, 0, -1, 0, 1, 1, -1])
plt.xticks([1, 2, 3, 4, 5, 6, 7, 8, 9],
[‘02-01’, ‘02-02’, ‘02-03’, ‘02-04’,
‘02-05’, ‘02-06’, ‘02-07’, ‘02-08’,
‘02-09’], rotation=45)
plt.yticks([0, 1, -1], [‘低’, ‘高’, ‘中’])
plt.xlabel(‘日期’)
plt.ylabel(‘A指标’)
plt.show()
========================================================================================
plt.title()
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.title(‘xxxxxxxxxxx图像’)
plt.plot([1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 1, 0, 0, -1, 0, 1, 1, -1])
plt.xticks([1, 2, 3, 4, 5, 6, 7, 8, 9],
[‘02-01’, ‘02-02’, ‘02-03’, ‘02-04’,
‘02-05’, ‘02-06’, ‘02-07’, ‘02-08’,
‘02-09’], rotation=45)
plt.yticks([0, 1, -1], [‘低’, ‘高’, ‘中’])
plt.xlabel(‘日期’)
plt.ylabel(‘A指标’)
plt.show()
7.增加图例 和 网格 plt.legend() & plt.grid()
===========================================================================================================
增加图例可以通过plt.plot()方法的label参数添加,也可以通过plt.legend()添加。
增加网格通过plt.grid()方法添加。
plt.legend()
第一个参数是一个可迭代对象,其元素为表示图例的字符串,其传入时的顺序与上边代码中线条绘制的顺序一一对应。
第二个参数是loc参数,表示图例显示的位置。
第三个参数为字体大小fontsize。
plt.grid(b=None,which=‘major’, axis=‘both’, **kwargs)
参数b:
布尔数据类型,设定是否显示grid。默认为None,不显示。如需显示,则将B设定为True。
参数which:
设定 分割标示线(tick) 的类型,取值为"major", “minor"或者"both”。
默认为"major",表示以原本坐标轴分割标示线为准;
若取值为"minor",则表示 进一步细分 坐标轴分割标示线,但是 分割标准要提前设定好。如果只是设定值为"minor",则图形不会显示grid。
“both"表示大小区间坐标轴分割线都有。
参数axis:
制定绘制grid的坐标轴,取值为"both”(default), “x”, 或者"y"。both表示X轴和Y轴的grid都绘制。 默认都绘制。
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.rcParams[‘axes.unicode_minus’] = False
plt.plot([5.12, 5.15, 5.13, 5.10, 5.2, 5.25, 5.19, 5.24, 5.31], label=‘股票A收盘价’)
plt.plot([5.09, 5.13, 5.16, 5.12, 5.09, 5.25, 5.16, 5.20, 5.25], label=‘股票B收盘价’)
plt.xticks(range(9), [
‘2021-02-01’, ‘2021-02-02’, ‘2021-02-03’, ‘2021-02-04’,
‘2021-02-05’, ‘2021-02-06’, ‘2021-02-07’, ‘2021-02-08’,
‘2021-02-09’], rotation=45)
plt.title(‘某股票收盘价时序图’)
plt.xlabel(‘日期’)
plt.ylabel(‘价格’)
plt.grid(True, axis=‘y’)
plt.legend()
plt.show()
========================================================================================
修改图形的颜色通过设定plot()的color参数来实现,color参数也可以简写为c。
颜色的取值有多种方式指定,最常用的是直接设定颜色的名称或颜色名称的简写,也可以通过RGB数组(比如(1,1,0)等其他方式设定)。
常用的颜色简写有
| 颜色 | 简写 | 英文 |
| — | — | — |
| 蓝色 | b | blue |
| 红色 | r | red |
| 绿色 | g | green |
| 黄色 | y | yellow |
| 黑色 | k | black |
| 白色 | w | white |
| 洋红色(也称品红色) | m | magenta |
| 蓝绿色(即青色) | c | cyan |
此外,常用颜色还可以选择的有brown,purple,pink,orange,olive,gold,gray等。
plot()函数中的linestyle参数用于设定曲线的类型。为了书写方便,有时会用ls代替linestyle, 该参数的主要取值如表所示:
线条类型可能的取值有
| 类型 | 名称取值 | 符号取值 |
| — | — | — |
| 实线 | ‘solid’ | ‘-’ |
| 虚线(也称双画线) | ‘dashed’ | ‘—’ (两个短杠) |
| 线点 | ‘dashdot’ | ‘-.’ |
| 点线 | ‘dotted’ | ‘:’ |
| 不画线 | ‘None’ | ‘’ |
| 虚线(另一种) | | ‘:’ |
除了线条样式外,还可以设置数据点的形状。数据点形状通过plot()方法的maker参数来设定。maker参数取值有很多,如表所示:
点的形状marker的部分值表
| 形状含义 | 符号取值(marker) |
| — | — |
| 点标记 | . |
| 像素标记 | , |
| 实心圆标记 | o |
| 向下三角形标记 | v |
| 向上三角形标记 | ^ |
| 向左三角形标记 | < |
| 向右三角形标记 | > |
| 实心正方形标记 | s |
| 实心五角星标记 | ‘p’ |
| 竖六边形标记 | ‘h’ |
| 横六边形标记 | ‘H’ |
| 下花三角标记 | 1 |
| 上花三角标记 | 2 |
| 左花三角标记 | 3 |
| 右花三角标记 | 4 |
| 加号标记 | ‘+’ |
| 叉号标记 | ‘x’ |
| 钻石标记(大菱形标记) | D |
| 小钻石标记(小菱形标记) | d |
| 星号标记 | ‘*’ |
| 竖线标记 | ‘|’ |
线条的宽度通过参数linewidth来设定。参数linewidth也可以简写成lw。
参数mfc用于设置标记的颜色
参数ms用于设置标记的大小
参数mec用于设置标记的边框的颜色。
__
绘制两条折线为例
一条为红色,线条样式为“点线”类型,标记为大菱形标记,线条宽度为2。
另一条为绿色,线条样式为虚线类型(’:’),标记为横六边形标记,线条宽度为4。
import matplotlib.pyplot as plt
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
plt.rcParams[‘axes.unicode_minus’] = False
plt.plot([5.12, 5.15, 5.13, 5.10, 5.2, 5.25, 5.19, 5.24, 5.31], label=‘股票A收盘价’, c=‘r’, ls=‘-.’, marker=‘D’, lw=2)
plt.plot([5.09, 5.13, 5.16, 5.12, 5.09, 5.25, 5.16, 5.20, 5.25], label=‘股票B收盘价’, c=‘g’, ls=‘:’, marker=‘H’, lw=4)
plt.xticks(range(9), \
[‘2021-02-01’, ‘2021-02-02’, ‘2021-02-03’, ‘2021-02-04’, \
‘2021-02-05’, ‘2021-02-06’, ‘2021-02-07’, ‘2021-02-08’, \
‘2021-02-09’], rotation=45)
plt.title(‘某股票开盘价&收盘价时序图’)
plt.xlabel(‘日期’)
plt.ylabel(‘价格’)
plt.grid(True)
plt.legend()
plt.show()
图像展示如下:
==============================================================================
设置画布,Matplotlib绘图的一大特色,即面向对象绘图。
使用Matplotlib面向对象绘图,绘图前我们要先创建一个Figure对象,即所谓的“画布”,Figure对象是一个空白区域。Figure对象可以通过pyplot包中的figure函数进行创建。
fig = plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
其中
num 指图像的编号或名称,数字为编号,字符串为名称。通过此参数来指定、区分不同的Figure对象。
figsize 指画布的宽和高,单位为英寸。(x, y)
dpi 指画布的分辨率,即每英寸有多少个像素,默认为80。
facecolor 指背景颜色。
edgecolor 指边框颜色。
frameon 指是否显示边框,默认为True,表示绘制边框。否则不绘制边框。
import matplotlib.pyplot as plt
fig = plt.figure(1, facecolor=‘r’, figsize=(5, 3))
plt.plot([1, 1, 0, 0, -1, 0, 1, 1, -1])
plt.show()
对于每个Figure对象,都可以包含一个或者多个个Axes对象,每个Axes对象即一个绘图区域,其拥有自己独立的坐标系统。
不设置画布时则自动创建一个只有一个Axes对象的画布,且位置居中。
创建好Figure和Axes后,绘图时直接对创建的Axes对象调用相关方法即可(如ax1.plot()),不必再使用类似plt.plot()这样的形式。此即面向对象绘图。
以创建一个包含两个Axes的Figure对象为例,创建的方法有两种,一种是调用Figure对象的add_axes()方法,另一则是调用matplotlib的subplot()方法。
add_axes()方法
使用add_axes()方法创建Axes时,以对Figure对象fig创建Axes对象ax1为例,其语法如下
ax1 = fig.add_axes([x1,y1,x2,y2])
需要传入一个有四个元素的列表,四个数字依次表示创建的Axes的左下角、右上角的相对坐标位置。(原点在Figure对象左下角,计算相对位置时,Figure的宽和高都视为1个单位长度,要传入的坐标值都是0到1的浮点数)
import matplotlib.pyplot as plt
fig = plt.figure()
创建两个Axes对象
ax1 = fig.add_axes([0.1, 0.1, 0.3, 0.3])
ax2 = fig.add_axes([0.5, 0.5, 0.4, 0.4])
plt.show()
plt.subplot()方法
使用plt.subplot()方法创建Axes时,其语法如下
subplot(numRows, numCols, plotNum)
其中
num_Rows 指图像排多少行
numCols 指图像排多少列
plotNum 指图像的位置左上角第一个图像的位置开始记为1,往右依次记为2,3…,每一行的图像接着排下去,最终右下角的图像编号等于num_Rows×plotNum。
代码示例如下:
import matplotlib.pyplot as plt
位置1
ax1 = plt.subplot(221)
ax1.set_title(‘ax1’)
位置2
ax2 = plt.subplot(222)
ax2.set_title(‘ax2’)
位置3
ax3 = plt.subplot(223)
ax3.set_title(‘ax3’)
位置4
ax4 = plt.subplot(224)
ax4.set_title(‘ax4’)
plt.show()
以Axes对象ax1为例,常用的面向对象绘图方法有:
#绘图
ax1.plot()
#设置网格
ax1.grid()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)
以Axes对象ax1为例,常用的面向对象绘图方法有:
#绘图
ax1.plot()
#设置网格
ax1.grid()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-R1T5wYdj-1713670752533)]
[外链图片转存中…(img-sp4qt1eV-1713670752534)]
[外链图片转存中…(img-ilFj5nSA-1713670752534)]
[外链图片转存中…(img-XBWbHLsh-1713670752535)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)