8. 设置样式(颜色,线条,标记)
8.1 线条颜色 color
修改图形的颜色通过设定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等。
8.2 线条样式 linestyle
plot()函数中的linestyle参数用于设定曲线的类型。为了书写方便,有时会用ls代替linestyle, 该参数的主要取值如表所示:
线条类型可能的取值有
类型 |
名称取值 |
符号取值 |
实线 |
‘solid’ |
‘-’ |
虚线(也称双画线) |
‘dashed’ |
‘—’ (两个短杠) |
线点 |
‘dashdot’ |
‘-.’ |
点线 |
‘dotted’ |
‘:’ |
不画线 |
‘None’ |
‘’ |
虚线(另一种) |
|
‘:’ |
8.3 标记样式 maker
除了线条样式外,还可以设置数据点的形状。数据点形状通过plot()方法的maker参数来设定。maker参数取值有很多,如表所示:
点的形状marker的部分值表
形状含义 |
符号取值(marker) |
点标记 |
. |
像素标记 |
, |
实心圆标记 |
o |
向下三角形标记 |
v |
向上三角形标记 |
^ |
向左三角形标记 |
< |
向右三角形标记 |
> |
实心正方形标记 |
s |
实心五角星标记 |
‘p’ |
竖六边形标记 |
‘h’ |
横六边形标记 |
‘H’ |
下花三角标记 |
1 |
上花三角标记 |
2 |
左花三角标记 |
3 |
右花三角标记 |
4 |
加号标记 |
‘+’ |
叉号标记 |
‘x’ |
钻石标记(大菱形标记) |
D |
小钻石标记(小菱形标记) |
d |
星号标记 |
‘*’ |
竖线标记 |
‘|’ |
8.4 线条宽度 linewidth
线条的宽度通过参数linewidth来设定。参数linewidth也可以简写成lw。
8.5 标记的样式
参数mfc用于设置标记的颜色
参数ms用于设置标记的大小
参数mec用于设置标记的边框的颜色。
__
8.6 样式使用示例
绘制两条折线为例
一条为红色,线条样式为“点线”类型,标记为大菱形标记,线条宽度为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()
图像展示如下:
9.面向对象绘图
9.1 面向对象绘图 - 创建画布对象
设置画布,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()这样的形式。此即面向对象绘图。
9.2 创建Axes对象
以创建一个包含两个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()
9.3 常用面向对象绘图方法
以Axes对象ax1为例,常用的面向对象绘图方法有:
#绘图
ax1.plot()
#设置网格
ax1.grid()
#设置标题
ax1.set_title(‘ax1_title’)
#设置标签
ax1.set_xlabel()
ax1.set_ylabel()
#设置坐标轴范围
ax1.set_xlim()
ax1.set_ylim()
#设置刻度标签
ax1.set_xticklabels()
ax1.set_yticklabels()
# 设置图例
ax1.legend()
# 显示图像
将数据显示为图像,即在2D常规栅格上。
ax1.imshow()
# 显示图像
将2D矩阵或数组的值绘制为颜色编码的图像。
ax1.matshow()
#添加一条水平线
ax1.axhline()
# 添加水平跨度
ax1.axhspan
# 添加一条垂直线
ax1.axvline
# 添加垂直跨度
ax1.axvspan
# 添加无限长的直线
ax1.axline
Axes对象也有bar(),barh(),pie(),scatter()等方法。
10.matplotlib进阶学习
更多相关操作,为了方便日常检索,小啾将其写在了其他博文中。且小啾将链接附在了文末,大家可以参考学习:
matplotlib进阶传送门:
(一)给图像添加 文本标签 与 注释
(一)python-matplotlib给图像添加文本标签与注释
(二)subplots_adjust()方法解决图表与画布的间距问题
(二)python-matplotlib绘图 -应用subplots_adjust()方法解决图表与画布的间距问题
(三)直方图的绘制
(三)直方图的绘制 基于python-matplotlib库
(四)单柱柱形图与多柱柱形图的绘制
(四)单柱柱形图与多柱柱形图的绘制 基于python-matplotlib库
(五)绘制饼形图专题(从一般饼状图到内嵌环形图)
(五)python-matplotlib库绘制饼形图专题(从一般饼状图到内嵌环形图)
(六)绘制面积图&热力图
(六)python-matplotlib 绘制面积图&热力图
(七)绘制箱线图 与 异常值的输出
(七)绘制箱线图 与 异常值的输出 - 基于Python matplotlib库
(八)双y轴图像实现
(九)绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)
(九)python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)
(十)绘制渐变色扇形图 -基于 颜色地图plt.cm模块儿
(十)绘制渐变色扇形图 - 基于python - matplotlib 颜色地图plt.cm模块儿