文章目录
- 简介
- 参数
- 演示
简介
茎叶图从外观来看,更像是火柴,由基线、茎线、茎头三部分构成。最简单的示例如下
import numpy as np
import matplotlib.pyplot as plt
plt.stem(np.sin(np.arange(10)))
plt.show()
参数
stem的完整参数如下
stem([locs,] heads, linefmt=None, markerfmt=None, basefmt=None, bottom=0, label=None, orientation='vertical', data=None)
其中
- locs和heads表示其 x , y x,y x,y方向的值。如果只输入一组数值,则默认输入的是heads。
- linefmt, markerfmt, basefmt 均为字符串,分别用于定义茎线、茎头以及基线的格式。
- orientation 表示茎叶图方向,默认为’vertical’,若取值为’horizontal’,则茎叶图调转90°
- bottom 为基线的位置
- label 为图例中使用的标签
linefmt和basefmt字符串由两部分组成,分别用于设置茎线的颜色和类型,第一部分格式为Cx,表示色环中第x种颜色;第二部分可选’-', ‘–’, ‘-.’, ‘:’,表示线的虚实类型。当然,第一部分直接采取颜色缩写,比如r,g,b也是可以的。
markerfmt也是同样的格式,但用于调整茎头标记点的字符与线型有所差异。其具体可选值存放在Line2D中
from matplotlib.lines import Line2D
from pprint import pprint
pprint(Line2D.markers)
打印结果是一个字典,列表如下
0 | ‘tickleft’ | 1 | ‘tickright’ | 2 | ‘tickup’ |
3 | ‘tickdown’ | 4 | ‘caretleft’ | 5 | ‘caretright’ |
6 | ‘caretup’ | 7 | ‘caretdown’ | 8 | ‘caretleftbase’ |
9 | ‘caretrightbase’ | 10 | ‘caretupbase’ | 11 | ‘caretdownbase’ |
‘’ | ‘nothing’ | ’ ’ | ‘nothing’ | ‘*’ | ‘star’ |
‘+’ | ‘plus’ | ‘,’ | ‘pixel’ | ‘.’ | ‘point’ |
‘1’ | ‘tri_down’ | ‘2’ | ‘tri_up’ | ‘3’ | ‘tri_left’ |
‘4’ | ‘tri_right’ | ‘8’ | ‘octagon’ | ‘<’ | ‘triangle_left’ |
‘>’ | ‘triangle_right’ | ‘D’ | ‘diamond’ | ‘H’ | ‘hexagon2’ |
None’ | ‘nothing’ | ‘P’ | ‘plus_filled’ | ‘X’ | ‘x_filled’ |
‘^’ | ‘triangle_up’ | ‘_’ | ‘hline’ | ‘d’ | ‘thin_diamond’ |
‘h’ | ‘hexagon1’ | ‘none’ | ‘nothing’ | ‘o’ | ‘circle’ |
‘p’ | ‘pentagon’ | ‘s’ | ‘square’ | ‘v’ | ‘triangle_down’ |
‘x’ | ‘x’ | ’ | ’ | ‘vline’ |
演示
下面演示一下不同格式的效果
lf = ['C0-', 'C1--', 'C2-.', 'C3:']
mf = ['C40', 'r*', 'g8', 'bD']
xs = np.sin(np.arange(10))
fig = plt.figure()
for i in range(4):
ax = fig.add_subplot(2,2,i+1)
ax.stem(xs, linefmt=lf[i], markerfmt=mf[i])
plt.title(f"linefmt={lf[i]}, markerfmt={mf[i]}")
plt.show()
效果如下