本文已参与「新人创作礼」活动,一起开启掘金创作之路
欢迎大家访问个人博客:jmxgodlz.xyz
前言
看到有些论文插图十分简洁美观,于是便摸索一下如何美化一下折线图绘图。本文将在前文Python数据分析-数据可视化的基础上,介绍折线图格式的调整。
本文使用的画图工具为matplotlib,相关API可访问python matplotlib文档。
Matplotlib 折线图格式调整
首先,贴一下文档中折线图绘制的附加参数表:
| Property | Description |
|---|---|
| agg_filter | a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array |
| alpha | scalar or None |
| animated | bool |
| antialiased or aa | bool |
| clip_box | Bbox |
| clip_on | bool |
| clip_path | Patch or (Path, Transform) or None |
| color or c | color |
| dash_capstyle | CapStyle or {'butt', 'projecting', 'round'} |
| dash_joinstyle | JoinStyle or {'miter', 'round', 'bevel'} |
| dashes | sequence of floats (on/off ink in points) or (None, None) |
| data | (2, N) array or two 1D arrays |
| drawstyle or ds | {'default', 'steps', 'steps-pre', 'steps-mid', 'steps-post'}, default: 'default' |
| figure | Figure |
| fillstyle | {'full', 'left', 'right', 'bottom', 'top', 'none'} |
| gid | str |
| in_layout | bool |
| label | object |
| linestyle or ls | {'-', '--', '-.', ':', '', (offset, on-off-seq), ...} |
| linewidth or lw | float |
| marker | marker style string, Path or MarkerStyle |
| markeredgecolor or mec | color |
| markeredgewidth or mew | float |
| markerfacecolor or mfc | color |
| markerfacecoloralt or mfcalt | color |
| markersize or ms | float |
| markevery | None or int or (int, int) or slice or list[int] or float or (float, float) or list[bool] |
| path_effects | AbstractPathEffect |
| picker | float or callable[[Artist, Event], tuple[bool, dict]] |
| pickradius | float |
| rasterized | bool |
| sketch_params | (scale: float, length: float, randomness: float) |
| snap | bool or None |
| solid_capstyle | CapStyle or {'butt', 'projecting', 'round'} |
| solid_joinstyle | JoinStyle or {'miter', 'round', 'bevel'} |
| transform | unknown |
| url | str |
| visible | bool |
| xdata | 1D array |
| ydata | 1D array |
| zorder | float |
接下来,我将挑选几个常用的附加参数介绍使用方式与效果。
标签
- 附加参数名:label
- 功能:为绘制曲线命名,该名称会在图例显示
- 使用方式:plt.plot(x,y,label='example')
import random
import matplotlib.pyplot as plt
x = range(10)
y = [random.random() for _ in range(10)]
plt.figure()
plt.plot(x, y, label='example')
plt.legend()
plt.show()
线条颜色
- 附加参数名:color
- 功能:选择绘制线条的颜色
- 使用方式:plt.plot(x,y,color='r')
- 颜色选取方式分为三种:
- 用全名或简称 ,如blue或b
- 16进制 ,如FF00FF
- (r, g, b) 或 (r, g, b, a),如(1,0,1,1) ,其中 r g b a 取均为[0, 1]之间,[0, 1]之间的浮点数的字符串形式,表示灰度值。0表示黑色,1表示白色
import random
import matplotlib.pyplot as plt
x = range(10)
y = [random.random() for _ in range(10)]
y2 = [random.random() for _ in range(10)]
y3 = [random.random() for _ in range(10)]
y4 = [random.random() for _ in range(10)]
plt.figure()
plt.plot(x, y, label='example1', color='blue')
plt.plot(x, y2, label='example2', color='r')
plt.plot(x, y3, label='example3', color='#00FFFF')
plt.plot(x, y4, label='example4', color=(0.4, 0.5, 0.6))
plt.legend()
plt.show()
线条形状
- 附加参数名:linestyle(或ls)
- 功能:选择绘制线条的形状
- 使用方式:plt.plot(x,y,linestyle=':')或者plt.plot(x,y,ls=':')
- 常用形状:
- - 实线(solid)
- -- 短线(dashed)
- -. 短点相间线(dashdot)
- : 虚点线(dotted)
- '', ' ', None
import random
import matplotlib.pyplot as plt
x = range(10)
y = [random.random() for _ in range(10)]
y2 = [random.random() for _ in range(10)]
y3 = [random.random() for _ in range(10)]
y4 = [random.random() for _ in range(10)]
plt.figure()
plt.plot(x, y, label='example1', color='blue', linestyle='-')
plt.plot(x, y2, label='example2', color='r', ls='--')
plt.plot(x, y3, label='example3', color='#00FFFF', ls=':')
plt.plot(x, y4, label='example4', color=(0.4, 0.5, 0.6), ls='')
plt.legend()
plt.show()
折点样式
- 附加参数名: (1)marker -- 折点形状
(2)markeredgecolor 或 mec -- 折点外边颜色
(3)markeredgewidth 或 mew -- 折点线宽
(4)markerfacecolor 或 mfc --折点实心颜色
(5)markerfacecoloralt 或 mfcalt
(6)markersize 或 ms --折点大小
折点形状选择如下表:
character | description
- | -
'-'| solid line style'--'| dashed line style'-.'| dash-dot line style':'| dotted line style'.'| point marker','| pixel marker'o'| circle marker'v'| triangle_down marker'^'| triangle_up marker'<'| triangle_left marker'>'| triangle_right marker'1'| tri_down marker'2'| tri_up marker'3'| tri_left marker'4'| tri_right marker's'| square marker'p'| pentagon marker'*'| star marker'h'| hexagon1 marker'H'| hexagon2 marker'+'| plus marker'x'| x marker'D'| diamond marker'd'| thin_diamond marker'|'| vline marker'_'| hline marker
import random
import matplotlib.pyplot as plt
x = range(10)
y = [random.random() for _ in range(10)]
y2 = [random.random() for _ in range(10)]
y3 = [random.random() for _ in range(10)]
y4 = [random.random() for _ in range(10)]
plt.figure()
plt.plot(x, y, label='example1', color='blue', linestyle='-', marker='o')
plt.plot(x, y2, label='example2', color='r', ls='--', marker='1')
plt.plot(x, y3, label='example3', color='#00FFFF', ls=':', marker='2')
plt.plot(x, y4, label='example4', color=(0.4, 0.5, 0.6), marker='3')
plt.legend()
plt.show()
线条透明度
- 附加参数名:alpha,值在[0,1]之间
- 功能:选择绘制线条的透明度
- 使用方式:plt.plot(x,y,alpha='0.9')
import random
import matplotlib.pyplot as plt
x = range(10)
y = [random.random() for _ in range(10)]
y2 = [random.random() for _ in range(10)]
y3 = [random.random() for _ in range(10)]
y4 = [random.random() for _ in range(10)]
plt.figure()
plt.plot(x, y, label='example1', color='blue', linestyle='-', alpha=0.3)
plt.plot(x, y2, label='example2', color='r', ls='--', alpha=0.1)
plt.plot(x, y3, label='example3', color='#00FFFF', ls=':', alpha=0.5)
plt.plot(x, y4, label='example4', color=(0.4, 0.5, 0.6), ls='')
plt.legend()
plt.show()