目录
前言
Datawhale第37期组队学习来了!这次选择的是Datawhale开源学习项目——“数据可视化(Matplotlib)”,学习周期为5.16-5.30,在此记录初次接触Matplotlib的小白学习历程。基于教程写的比较详细,这里的记录只作为补充。
学习路线
Task01:Matplotlib初相识(5.16、5.17)
matplotlib提供了两种最常用的绘图接口
1、OO模式(object-oriented style)
显式创建figure和axes,在上面调用绘图方法。
优点:清晰明了
缺点:代码编写更加复杂。(用面向对象编程接口的时候,需要创建画布、对象,需要理解每个绘制过程,才能完成相关的绘图工作。)
适合使用场景:较为复杂的画图场景
# step1 准备数据
x = np.linspace(0, 2, 100)
# step2 设置绘图样式
mpl.rc('lines', linewidth=2, linestyle='-.')
# step3 定义布局
fig, ax = plt.subplots()
# step4 绘制图像
ax.plot(x, x, label='linear')
ax.plot(x, x**2, label='quadratic')
ax.plot(x, x**3, label='cubic')
# step5 添加标签,文字和图例
ax.set_xlabel('x label')
ax.set_ylabel('y label')
ax.set_title("Simple Plot")
ax.legend() ;
2、pyplot模式
依赖pyplot,自动创建figure和axes,并绘图的方法。
优点:编写简单,默认的 Figure 和 Axes 等对象会自动创建支持图形绘制
缺点:在多对象情况下容易使对象混乱
适合使用场景:简单画图场景
# step1 准备数据
x = np.linspace(0, 2, 100)
# step2 设置绘图样式
mpl.rc('lines', linewidth=2, linestyle='-')
# step3 绘制图像
plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
# step4 添加标签,文字和图例
plt.xlabel("x label")
plt.ylabel("y label")
plt.title("Simple Plot")
plt.legend();
知识新增:
1、 在jupyter notebook中使用matplotlib时会发现,代码运行后自动打印出类似<matplotlib.lines.Line2D at 0x23155916dc0>
这样一段话,这是因为matplotlib的绘图代码默认打印出最后一个对象。如果不想显示这句话,有以下三种方法:
①在代码块最后加一个分号;
②在代码块最后加一句plt.show()
③在绘图时将绘图对象显式赋值给一个变量,如将plt.plot([1, 2, 3, 4]) 改成line =plt.plot([1, 2, 3, 4])
Task02:艺术画笔见乾坤(5.18-5.22)
Task03:布局格式定方圆(5.23、5.24)
一、子图
①均匀排列的子图:
plt.subplots
subplots是基于OO模式的写法,显式创建一个或多个axes对象,然后在对应的子图对象上进行绘图操作:fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
plt.subplot
subplot是基于pyplot模式的写法,每次在指定位置新建一个子图,并且之后的绘图操作都会指向当前子图,本质上subplot也是Figure.add_subplot的一种封装:plt.subplot(2,2,1)
除了直角坐标系,通过projection创建极坐标系下的图表:plt.subplot(projection='polar')
②非均匀排列的子图
add_gridspec
利用 add_gridspec 可以指定相对宽度比例 width_ratios 和相对高度比例参数 height_ratios
二、补充
1、常用直线的画法为: axhline, axvline, axline (水平、垂直、任意方向)
ax.axhline(0.5,0.2,0.8)
ax.axvline(0.5,0.2,0.8)
ax.axline([0.3,0.3],[0.7,0.7]);
2、加灰色网格:使用 grid
ax.grid(True)
3、设置坐标轴的规度(指对数坐标等):使用 set_xscale
axs[j].set_yscale('log')
Task04:文字图例尽眉目(5.25-5.27)
一、Figure和Axes上的文本
子图上的文本(text)
子图的x,y轴标签(xlabel、ylabel)
子图和画布的标题(title、suptitle)
子图的注解(annotate)
字体的属性设置
二、Tick上的文本
简单模式
Tick Locators and Formatters刻度位置和刻度标签的设置
a) Tick Formatters
b) Tick Locators
matplotlib.dates 特殊的设置日期型刻度格式和位置
三、legend(图例)
OO模式
pyplot模式
Task05:样式色彩秀芳华(5.28、5.29)
一、样式
①修改预定义样式
默认模式:default
内置样式:‘Solarize_Light2’, ‘_classic_test_patch’, ‘bmh’, ‘classic’, ‘dark_background’, ‘fast’, ‘fivethirtyeight’, ‘ggplot’, ‘grayscale’, ‘seaborn’, ‘seaborn-bright’, ‘seaborn-colorblind’, ‘seaborn-dark’, ‘seaborn-dark-palette’, ‘seaborn-darkgrid’, ‘seaborn-deep’, ‘seaborn-muted’, ‘seaborn-notebook’, ‘seaborn-paper’, ‘seaborn-pastel’, ‘seaborn-poster’, ‘seaborn-talk’, ‘seaborn-ticks’, ‘seaborn-white’, ‘seaborn-whitegrid’, ‘tableau-colorblind10’
②自定义样式stylesheet
样式清单后缀名为mplstyle,内容:
axes.titlesize : 24
axes.labelsize : 20
lines.linewidth : 3
lines.markersize : 10
xtick.labelsize : 16
ytick.labelsize : 16
③rcparams
修改默认rc设置的方式改变样式(rc设置都保存在matplotlib.rcParams的变量)如:
线宽→mpl.rcParams[‘lines.linewidth’] = 2
线型→mpl.rcParams[‘lines.linestyle’] = ‘–’
线宽、线型→mpl.rc(‘lines’, linewidth=4, linestyle=‘-.’)
二、颜色
单色颜色
1、RGB或RGBA
颜色用[0,1]之间的浮点数表示,四个分量按顺序分别为(red, green, blue, alpha)
plt.plot([4,5,6],[1,2,3],color=(0.1, 0.2, 0.5, 0.5))
2、HEX RGB或RGBA
用十六进制颜色码表示,同样最后两位表示透明度
plt.plot([4,5,6],[1,2,3],color=‘#0f0f0f80’)
3、灰度色阶
当只有一个位于[0,1]的值时,表示灰度色阶
plt.plot([1,2,3],[4,5,6],color=‘0.5’)
4、单字符基本颜色
‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, 'w’对应blue, green, red, cyan, magenta, yellow, black, white
plt.plot([1,2,3],[4,5,6],color=‘m’)
5、颜色名称
plt.plot([1,2,3],[4,5,6],color=‘tan’)
colormap多色显示
五种colormap的字符串表示和颜色图的对应关系
顺序(Sequential)。通常使用单一色调,逐渐改变亮度和颜色渐渐增加,用于表示有顺序的信息
发散(Diverging)。改变两种不同颜色的亮度和饱和度,这些颜色在中间以不饱和的颜色相遇;当绘制的信息具有关键中间值(例如地形)或数据偏离零时,应使用此值。
循环(Cyclic)。改变两种不同颜色的亮度,在中间和开始/结束时以不饱和的颜色相遇。用于在端点处环绕的值,例如相角,风向或一天中的时间。
定性(Qualitative)。常是杂色,用来表示没有排序或关系的信息。
杂色(Miscellaneous)。一些在特定场景使用的杂色组合,如彩虹,海洋,地形