Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。使用它可以很方便的绘制出版质量级别的图形。
概述
官网
效果展示
matplotlib基本功能
- 基本绘图 (在二维平面坐标系中绘制连续的线)
- 设置线型、线宽和颜色
- 设置坐标轴范围
- 设置坐标刻度
- 设置坐标轴
- 图例
- 特殊点
- 备注
- 图形对象(图形窗口)
- 子图
- 刻度定位器
- 刻度网格线
- 半对数坐标
- 散点图
- 填充
- 条形图(柱状图)
- 饼图
- 等高线图
- 热成像图
- 极坐标系
- 三维曲面
- 简单动画
基本绘图
案例:绘制一条正弦曲线
1 2 3 4 5 6 7 8
| import numpy as np import matplotlib.pyplot as mp
mp.plot(xarray, yarray)
mp.show()
|
绘制水平线与垂直线:
1 2 3 4 5 6 7 8 9
| import numpy as np import matplotlib.pyplot as mp
mp.vlines(vval, ymin, ymax, ...)
mp.hlines(xval, xmin, xmax, ...)
mp.show()
|
线型、线宽和颜色
1 2 3 4 5 6 7 8
|
mp.plot(xarray, yarray, linestyle='', linewidth=1, color='', alpha=0.5)
|
linestyle 见附录
linecolor 见附录
设置坐标轴范围
案例:把坐标轴范围设置为 -π ~ π
1 2 3 4 5 6
|
mp.xlim(x_limt_min, x_limit_max)
mp.ylim(y_limt_min, y_limit_max)
|
应用场景
查看可视范围,例如只看第一象限;
设置坐标刻度
案例:把横坐标的刻度显示为:0, π/2, π, 3π/2, 2π
1 2 3 4 5 6
|
mp.xticks(x_val_list , x_text_list )
mp.yticks(y_val_list , y_text_list )
|
刻度文本的特殊语法 – LaTex排版语法字符串
1
| r'$x^n+y^n=z^n$', r'$\int\frac{1}{x} dx = \ln |x| + C$', r'$-\frac{\pi}{2}$'
|
$$
x^n+y^n=z^n, \int\frac{1}{x} dx = \ln |x| + C, -\frac{\pi}{2}
$$
具体见附录
设置坐标轴
坐标轴名:left / right / bottom / top
1 2 3 4 5 6 7 8 9 10 11
| ax = mp.gca()
axis = ax.spines['坐标轴名']
axis.set_position((type, val))
axis.set_color(color)
|
案例:设置坐标轴至中心。
1 2 3 4 5 6 7
| ax = mp.gca() ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.spines['left'].set_position(('data', 0)) ax.spines['bottom'].set_position(('data', 0)) mp.yticks([-1, -0.5, 0.5, 1])
|
图例
图例就是标注哪条线是什么意思
显示两条曲线的图例,并测试loc属性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
mp.plot(xarray, yarray ... label='', ...)
mp.legend(loc='')
|
特殊点
1 2 3 4 5 6 7 8 9
|
mp.scatter(xarray, yarray, marker='', s=60, edgecolor='', facecolor='', zorder=3 )
|
marker点型可参照:help(matplotlib.markers)
也可参照附录:point样式
备注
为在某条曲线上的点添加备注,指明函数方程与值。
1 2 3 4 5 6 7 8 9 10
| mp.annotate( r'$\frac{\pi}{2}$', xycoords='data', xy=(x, y), textcoords='offset points', xytext=(x, y), fontsize=14, arrowprops=dict() )
|
arrowprops参数使用字典定义指向目标点的箭头样式
1 2 3 4 5
| arrowprops=dict( arrowstyle='', connectionstyle='' )
|
箭头样式(arrowstyle)字符串如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ============ ============================================= Name Attrs ============ ============================================= '-' None '->' head_length=0.4,head_width=0.2 '-[' widthB=1.0,lengthB=0.2,angleB=None '|-|' widthA=1.0,widthB=1.0 '-|>' head_length=0.4,head_width=0.2 '<-' head_length=0.4,head_width=0.2 '<->' head_length=0.4,head_width=0.2 '<|-' head_length=0.4,head_width=0.2 '<|-|>' head_length=0.4,head_width=0.2 'fancy' head_length=0.4,head_width=0.4,tail_width=0.4 'simple' head_length=0.5,head_width=0.5,tail_width=0.2 'wedge' tail_width=0.3,shrink_factor=0.5 ============ =============================================
|
连接线样式(connectionstyle)字符串如下
Name |
Attrs |
‘angle’ |
angleA=90,angleB=0,rad=0.0 |
‘angle3’ |
angleA=90,angleB=0` |
‘arc’ |
angleA=0,angleB=0,armA=None,armB=None,rad=0.0 |
‘arc3’ |
rad=0.0 |
‘bar’ |
armA=0.0,armB=0.0,fraction=0.3,angle=None |
图形对象(图形窗口)
绘制两个窗口,一起显示。
1 2 3 4 5 6 7 8 9
| mp.figure( 'A', facecolor='' ) mp.figure('B') mp.figure('A') mp.plot(....) mp.show()
|
mp.figure方法不仅可以构建一个新窗口,如果已经构建过title=’xxx’的窗口,又使用figure方法构建了title=’xxx’ 的窗口的话,mp将不会创建新的窗口,而是把title=’xxx’的窗口置为当前操作窗口。
设置当前窗口的参数
案例:测试窗口相关参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| mp.title(title, fontsize=12)
mp.xlabel(x_label_str, fontsize=12)
mp.ylabel(y_label_str, fontsize=12)
mp.tick_params(labelsize=8)
mp.grid(linestyle='')
mp.tight_layout()
|
子图
矩阵式布局
绘制矩阵式子图布局相关API:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| mp.figure('Subplot Layout', facecolor='lightgray')
mp.subplot(rows, cols, num) mp.subplot(3, 3, 5) mp.plot() mp.subplot(3, 3, 1) mp.plot() mp.subplot(335)
|
案例:绘制9宫格矩阵式子图,每个子图中写一个数字。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| mp.figure('Subplot Layout', facecolor='lightgray')
for i in range(9): mp.subplot(3, 3, i+1) mp.text( 0.5, 0.5, i+1, ha='center', va='center', size=36, alpha=0.5 ) mp.xticks([]) mp.yticks([])
mp.tight_layout() mp.show()
|
网格式布局
网格式布局支持单元格的合并。
绘制网格式子图布局相关API:
1 2 3 4 5 6 7 8 9 10 11
| import matplotlib.gridspec as mg mp.figure('Grid Layout', facecolor='lightgray')
gs = mg.GridSpec(3, 3)
mp.subplot(gs[0, :2]) mp.text(0.5, 0.5, '1', ha='center', va='center', size=36) mp.show()
|
案例:绘制一个自定义网格布局。
1 2 3 4 5 6 7 8 9
| import matplotlib.gridspec as mg mp.figure('GridLayout', facecolor='lightgray') gridsubs = mp.GridSpec(3, 3)
mp.subplot(gridsubs[0, :2]) mp.text(0.5, 0.5, 1, ha='center', va='center', size=36) mp.tight_layout() mp.xticks([]) mp.yticks([])
|
自由式布局
自由式布局相关API:
1 2 3 4 5 6 7 8 9 10
| mp.figure('Flow Layout', facecolor='lightgray')
mp.axes([0.03, 0.03, 0.94, 0.94]) mp.text(0.5, 0.5, '1', ha='center', va='center', size=36) mp.show()
|
案例:测试自由式布局,定位子图。
1 2 3 4 5
| mp.figure('FlowLayout', facecolor='lightgray')
mp.axes([0.1, 0.2, 0.5, 0.3]) mp.text(0.5, 0.5, '1', ha='center', va='center', size=36) mp.show()
|
刻度定位器
刻度定位器相关API:
1 2 3 4 5 6
| ax = mp.gca()
ax.xaxis.set_major_locator(mp.NullLocator())
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
|
案例:绘制一个数轴。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| mp.figure('Locators', facecolor='lightgray')
ax = mp.gca()
ax.spines['left'].set_color('none') ax.spines['top'].set_color('none') ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.xaxis.set_major_locator(mp.NullLocator())
ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))
mp.text(5, 0.3, 'NullLocator()', ha='center', size=12)
|
案例:使用for循环测试刻度器样式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| locators = ['mp.NullLocator()', 'mp.MaxNLocator(nbins=4)'] for i, locator in enumerate(locators): mp.subplot(len(locators), 1, i+1) mp.xlim(0, 10) mp.ylim(-1, 1) mp.yticks([]) ax = mp.gca() ax.spines['left'].set_color('none') ax.spines['top'].set_color('none') ax.spines['right'].set_color('none') ax.spines['bottom'].set_position(('data', 0)) ax.xaxis.set_major_locator(eval( )) ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1)) mp.plot(np.arange(11), np.zeros(11), c='none') mp.text(5, 0.3, locator, ha='center', size=12)
|
常用刻度器如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| mp.NullLocator()
mp.MaxNLocator(nbins=3)
mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10])
mp.AutoLocator()
mp.IndexLocator(offset=0.5, base=1.5)
mp.MultipleLocator()
mp.LinearLocator(numticks=21)
mp.LogLocator(base=2)
|
刻度网格线
绘制刻度网格线的相关API:
1 2 3 4 5 6 7 8 9 10
| ax = mp.gca()
ax.grid( which='', axis='', linewidth=1, linestyle='', color='', alpha=0.5 )
|
案例:绘制曲线 [1, 10, 100, 1000, 100, 10, 1],然后设置刻度网格线,测试刻度网格线的参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| y = np.array([1, 10, 100, 1000, 100, 10, 1]) mp.figure('Normal & Log', facecolor='lightgray') mp.subplot(211) mp.title('Normal', fontsize=20) mp.ylabel('y', fontsize=14) ax = mp.gca() ax.xaxis.set_major_locator(mp.MultipleLocator(1.0)) ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1)) ax.yaxis.set_major_locator(mp.MultipleLocator(250)) ax.yaxis.set_minor_locator(mp.MultipleLocator(50)) mp.tick_params(labelsize=10) ax.grid(which='major', axis='both', linewidth=0.75, linestyle='-', color='orange') ax.grid(which='minor', axis='both', linewidth=0.25, linestyle='-', color='orange') mp.plot(y, 'o-', c='dodgerblue', label='plot') mp.legend()
|
半对数坐标
y轴将以指数方式递增。 基于半对数坐标绘制第二个子图,表示曲线:[1, 10, 100, 1000, 100, 10, 1]。
1 2 3 4
| mp.figure('Grid', facecolor='lightgray') y = [1, 10, 100, 1000, 100, 10, 1] mp.semilogy(y) mp.show()
|
散点图
可以通过每个点的坐标、颜色、大小和形状表示不同的特征值。
身高 |
体重 |
性别 |
年龄段 |
种族 |
180 |
80 |
男 |
中年 |
亚洲 |
160 |
50 |
女 |
青少 |
美洲 |
绘制散点图的相关API:
1 2 3 4 5 6 7 8 9 10
| mp.scatter( x, y, marker='', s=10, color='', edgecolor='', facecolor='', zorder='' )
|
numpy.random提供了normal函数用于产生符合 正态分布 的随机数
1 2 3 4 5 6
| n = 100
x = np.random.normal(172, 20, n) y = np.random.normal(60, 10, n)
|
案例:绘制平面散点图。
1 2 3 4
| mp.figure('scatter', facecolor='lightgray') mp.title('scatter') mp.scatter(x, y) mp.show()
|
设置点的颜色
1 2 3 4
| mp.scatter(x, y, c='red')
d = (x-172)**2 + (y-60)**2 mp.scatter(x, y, c=d, cmap='jet')
|
cmap颜色映射表参附录cmap颜色映射表
填充
以某种颜色自动填充两条曲线的闭合区域。
1 2 3 4 5 6 7 8
| mp.fill_between( x, sin_x, cos_x, sin_x<cos_x, color='', alpha=0.2 )
|
案例:绘制两条曲线: sin_x = sin(x) cos_x = cos(x / 2) / 2 [0-8π]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| n = 1000 x = np.linspace(0, 8 * np.pi, n) sin_y = np.sin(x) cos_y = np.cos(x / 2) / 2 mp.figure('Fill', facecolor='lightgray') mp.title('Fill', fontsize=20) mp.xlabel('x', fontsize=14) mp.ylabel('y', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':') mp.plot(x, sin_y, c='dodgerblue', label=r'$y=sin(x)$') mp.plot(x, cos_y, c='orangered', label=r'$y=\frac{1}{2}cos(\frac{x}{2})$') mp.fill_between(x, cos_y, sin_y, cos_y < sin_y, color='dodgerblue', alpha=0.5) mp.fill_between(x, cos_y, sin_y, cos_y > sin_y, color='orangered', alpha=0.5) mp.legend() mp.show()
|
条形图(柱状图)
绘制柱状图的相关API:
1 2 3 4 5 6 7 8 9
| mp.figure('Bar', facecolor='lightgray') mp.bar( x, y, width, color='', label='', alpha=0.2 )
|
案例:先以柱状图绘制苹果12个月的销量,然后再绘制橘子的销量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| apples = np.array([30, 25, 22, 36, 21, 29, 20, 24, 33, 19, 27, 15]) oranges = np.array([24, 33, 19, 27, 35, 20, 15, 27, 20, 32, 20, 22]) mp.figure('Bar' , facecolor='lightgray') mp.title('Bar', font size=20) mp.xlabel('Month', fontsize=14) mp.ylabel('Price', fontsize=14) mp.tick_params(labelsize=10) mp.grid(axis='y', linestyle=':') mp.ylim((0, 40)) x = np.arange(len(apples)) mp.bar(x-0.2, apples, 0.4, color='dodgerblue',label='Apple') mp.bar(x + 0.2, oranges, 0.4, color='orangered',label='Orange', alpha=0.75) mp.xticks(x, [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']) mp.legend() mp.show()
|
饼图
绘制饼状图的基本API:
1 2 3 4 5 6 7 8 9 10
| mp.pie( values, spaces, labels, colors, '%d%%', shadow=True, startangle=90 radius=1 )
|
案例:绘制饼状图显示5门语言的流行程度:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| mp.figure('pie', facecolor='lightgray')
values = [26, 17, 21, 29, 11] spaces = [0.05, 0.01, 0.01, 0.01, 0.01] labels = ['Python', 'JavaScript', 'C++', 'Java', 'PHP'] colors = ['dodgerblue', 'orangered', 'limegreen', 'violet', 'gold'] mp.figure('Pie', facecolor='lightgray') mp.title('Pie', fontsize=20)
mp.axis('equal') mp.pie( values, spaces, labels, colors, '%d%%', shadow=True, startanle=90 radius=1 )
|
等高线图
组成等高线需要网格点坐标矩阵,也需要每个点的高度。所以等高线属于3D数学模型范畴。
绘制等高线的相关API:
1 2 3 4 5 6 7 8 9
| mp.contourf(x, y, z, 8, cmap='jet') cntr = mp.contour( x, y, z, 8, colors='black', linewidths=0.5 )
|
案例:生成网格坐标矩阵,并且绘制等高线:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2) mp.figure('Contour', facecolor='lightgray') mp.title('Contour', fontsize=20) mp.xlabel('x', fontsize=14) mp.ylabel('y', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':')
mp.contourf(x, y, z, 8, cmap='jet') cntr = mp.contour(x, y, z, 8, colors='black', linewidths=0.5)
mp.clabel(cntr, inline_spacing=1, fmt='%.1f', fontsize=10) mp.show()
|
热成像图
用图形的方式显示矩阵及矩阵中值的大小
1 2 3
4 5 6
7 8 9
绘制热成像图的相关API:
1 2 3 4 5
|
mp.imshow(z, cmap='jet', origin='low')
|
使用颜色条显示热度值:
极坐标系
与笛卡尔坐标系不同,某些情况下极坐标系适合显示与角度有关的图像。例如雷达等。极坐标系可以描述极径ρ与极角θ的线性关系。
1 2 3 4 5 6 7 8
| mp.figure("Polar", facecolor='lightgray') mp.gca(projection='polar') mp.title('Porlar', fontsize=20) mp.xlabel(r'$\theta$', fontsize=14) mp.ylabel(r'$\rho$', fontsize=14) mp.tick_params(labelsize=10) mp.grid(linestyle=':') mp.show()
|
在极坐标系中绘制曲线:
1 2 3 4 5
| t = np.linspace(0, 4*np.pi, 1000) r = 0.8 * t mp.plot(t, r) mp.show()
|
案例,在极坐标系中绘制正弦函数。 y=3 sin(6x)
1 2 3
| x = np.linspace(0, 6*np.pi, 1000) y = 3*np.sin(6*x) mp.plot(x, y)
|
3D图像绘制
matplotlib支持绘制三维曲面。若希望绘制三维曲面,需要使用axes3d提供的3d坐标系。
1 2
| from mpl_toolkits.mplot3d import axes3d ax3d = mp.gca(projection='3d')
|
matplotlib支持绘制三维点阵、三维曲面、三维线框图:
1 2 3
| ax3d.scatter(..) ax3d.plot_surface(..) ax3d.plot_wireframe(..)
|
3d散点图的绘制相关API:
1 2 3 4 5 6 7 8 9 10 11 12
| ax3d.scatter( x, y, marker='', s=10, zorder='', color='', edgecolor='', facecolor='', c=v, cmap='' )
|
案例:随机生成3组坐标,程标准正态分布规则,并且绘制它们。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| n = 1000 x = np.random.normal(0, 1, n) y = np.random.normal(0, 1, n) z = np.random.normal(0, 1, n) d = np.sqrt(x ** 2 + y ** 2 + z ** 2) mp.figure('3D Scatter') ax = mp.gca(projection='3d') mp.title('3D Scatter', fontsize=20) ax.set_xlabel('x', fontsize=14) ax.set_ylabel('y', fontsize=14) ax.set_zlabel('z', fontsize=14) mp.tick_params(labelsize=10) ax.scatter(x, y, z, s=60, c=d, cmap='jet_r', alpha=0.5) mp.show()
|
3d平面图的绘制相关API:
1 2 3 4 5 6 7 8
| ax3d.plot_surface( x, y, z, rstride=30, cstride=30, cmap='jet' )
|
案例:绘制3d平面图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2) mp.figure('3D', facecolor='lightgray')
ax3d = mp.gca(projection='3d') mp.title('3D', fontsize=20) ax3d.set_xlabel('x', fontsize=14) ax3d.set_ylabel('y', fontsize=14) ax3d.set_zlabel('z', fontsize=14) mp.tick_params(labelsize=10)
ax3d.plot_surface(x,y,z,rstride=30,cstride=30, cmap='jet')
|
案例:3d线框图的绘制
1 2 3 4 5
|
ax3d.plot_wireframe(x,y,z,rstride=30,cstride=30, linewidth=1, color='dodgerblue')
|
简单动画
动画即是在一段时间内快速连续的重新绘制图像的过程。
matplotlib提供了方法用于处理简单动画的绘制。定义update函数用于即时更新图像。
1 2 3 4 5 6 7 8 9 10
| import matplotlib.animation as ma
def update(number): pass
anim = ma.FuncAnimation(mp.gcf(), update, interval=10) mp.show()
|
案例:随机生成各种颜色的100个气泡。让他们不断的增大。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| ball_type = np.dtype([ ('position', float, 2), ('size', float, 1), ('growth', float, 1), ('color', float, 4)])
n = 100 balls = np.zeros(100, dtype=ball_type) balls['position']=np.random.uniform(0, 1, (n, 2)) balls['size']=np.random.uniform(40, 70, n) balls['growth']=np.random.uniform(10, 20, n) balls['color']=np.random.uniform(0, 1, (n, 4))
mp.figure("Animation", facecolor='lightgray') mp.title("Animation", fontsize=14) mp.xticks mp.yticks(())
sc = mp.scatter( balls['position'][:, 0], balls['position'][:, 1], balls['size'], color=balls['color'], alpha=0.5)
def update(number): balls['size'] += balls['growth'] boom_ind = number % n balls[boom_ind]['size']=np.random.uniform(40, 70, 1) balls[boom_ind]['position']=np.random.uniform(0, 1, (1, 2)) sc.set_sizes(balls['size']) sc.set_offsets(balls['position'])
anim = ma.FuncAnimation(mp.gcf(), update, interval=30) mp.show()
|
使用生成器函数提供数据,实现动画绘制
在很多情况下,绘制动画的参数是动态获取的,matplotlib支持定义generator生成器函数,用于生成数据,把生成的数据交给update函数更新图像:
1 2 3 4 5 6 7 8 9 10 11 12 13
| import matplotlib.animation as ma
def update(data): t, v = data ... pass
def generator(): yield t, v
anim = ma.FuncAnimation(mp.gcf(), update, generator,interval=10)
|
案例:绘制信号曲线:y=sin(2 * π * t) * exp(sin(0.2 * π * t)),数据通过生成器函数生成,在update函数中绘制曲线。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| mp.figure("Signal", facecolor='lightgray') mp.title("Signal", fontsize=14) mp.xlim(0, 10) mp.ylim(-3, 3) mp.grid(linestyle='--', color='lightgray', alpha=0.5) pl = mp.plot([], [], color='dodgerblue', label='Signal')[0] pl.set_data([],[])
x = 0
def update(data): t, v = data x, y = pl.get_data() x.append(t) y.append(v) pl.set_data(x, y) if(x[-1]>10): mp.xlim(x[-1]-10, x[-1])
def y_generator(): global x y = np.sin(2 * np.pi * x) * np.exp(np.sin(0.2 * np.pi * x)) yield (x, y) x += 0.05
anim = ma.FuncAnimation(mp.gcf(), update, y_generator, interval=20) mp.tight_layout() mp.show()
|
其他Python的绘图库
pyecharts
附录
linestyle
字符 |
描述 |
‘-‘ |
实线样式 |
‘–’ |
短横线样式 |
‘-.’ |
点划线样式 |
‘:’ |
虚线样式 |
‘.’ |
点标记 |
‘,’ |
像素标记 |
‘o’ |
圆标记 |
‘v’ |
倒三角标记 |
‘^’ |
正三角标记 |
‘<’ |
左三角标记 |
‘>’ |
右三角标记 |
‘1’ |
下箭头标记 |
‘2’ |
上箭头标记 |
‘3’ |
左箭头标记 |
‘4’ |
右箭头标记 |
‘s’ |
正方形标记 |
‘p’ |
五边形标记 |
‘*’ |
星形标记 |
‘h’ |
六边形标记 1 |
‘H’ |
六边形标记 2 |
‘+’ |
加号标记 |
‘x’ |
X 标记 |
‘D’ |
菱形标记 |
‘d’ |
窄菱形标记 |
‘|’ |
竖直线标记 |
‘_’ |
水平线标记 |
上面是网上找的,但是实际测试中只有’-‘, ‘–’, ‘-.’, ‘:’, ‘None’, ‘ ‘, ‘’, ‘solid’, ‘dashed’, ‘dashdot’, ‘dotted’可以用
linecolor
laTex排版语法
laTeX语法表示数学符号示例
LaTeX语法集合
cmap颜色映射表
point样式