python100天 64 stem函数制作茎图或者棒棒图

茎趺图的效果如下:

棉棒图主要用来显示一个包含正负的数据集,如在地震勘探中表示地层间反射系数

python100天64stem函数制作茎图或者棒棒图

stem函数的定义如下

语法:stem([x, ] y, linefmt=None, markerfmt=None, basefmt=None)

  • x(类数组,可选):词干的 x 位置。默认值:(0, 1, ..., len(y) – 1)。
  • y(类数组):词干头部的 y 值。
  • linefmt (str, optional): 定义垂直线属性的字符串。通常,这将是一种颜色或一种颜色和一种线条样式:
    • ‘-’:实线
    • ‘-’:虚线
    • ‘-.’:点划线
    • ‘:’虚线
  • 注意:虽然在技术上可以指定除颜色或颜色和线条样式以外的有效格式(例如“rx”或“-.”),但这超出了方法的意图,很可能不会产生合理的情节。
  • markerfmt(str,可选):定义词干头部标记属性的字符串。默认值:‘C0o’,即用颜色循环的第一种颜色填充圆圈。
  • basefmt(str,可选):定义基线属性的格式字符串。默认值:'C3-'(经典模式下为'C2-')。
  • bottom(浮点型,可选,默认值:0):基线的 y 位置。
  • label(str,可选,默认值:None):用于图例中的词干的标签。
  • use_line_collection(bool,可选,默认值:False):如果为 True,则将茎线存储并绘制为 LineCollection 而不是单独的线。这显着提高了性能,并将成为 Matplotlib 3.3 中的默认选项。如果为 False,则默认为使用 Line2D 对象列表的旧行为。

返回:

容器:StemContainer

可以将容器视为元组(标记线、主干线、基线)

最简单的例子

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data
np.random.seed(3)
x = 0.5 + np.arange(8)
y = np.random.uniform(2, 7, len(x))

# plot
fig, ax = plt.subplots()

ax.stem(x, y)

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

运行的效果图如下,为什么叫茎叶呢,看这些线科的样式其实就是类似一个个植物 的生长曲线。

python100天64stem函数制作茎图或者棒棒图

代码讲解

import matplotlib.pyplot as plt
import numpy as np

import的意思是从其他的功能模块中引用自己需要的功能模块 as的目的是给这个模块取一个别名。

np.random.seed(n)函数用于生成指定随机数。
  • 把seed()中的参数比喻成“堆”;eg. seed(5):表示第5堆种子
  • seed()中的参数被设置了之后, np.random.seed()可以按顺序产生 一组固定的数组,
  • 如果 使用相同的seed()值 ,则每次生成的随机数都 相同
  • 如果 不设置这个值 ,那么 每次生成的随机数不同
  • 但是,只在调用的时候seed()一下并不能使生成的随机数相同,需要每次调用都seed()一下,表示种子相同,从而生成的随机数相同。

每次生成不同的随机数 np.random.rando()函数

L1 = np.random.randn(3, 3)   生成一个3行3列的二维数组

python100天64stem函数制作茎图或者棒棒图

生成相同的随机数据,只需要把上面的代码改造一下,

每次调用seed然后再调用 random函数就生成相同的随机数据

import numpy as np

np.random.seed(1)
L1 = np.random.randn(3, 3)
np.random.seed(1)
L2 = np.random.randn(3, 3)
print(L1)
print(L2)

python100天64stem函数制作茎图或者棒棒图

函数: numpy.random.uniform(low,high,size) 从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.

python100天64stem函数制作茎图或者棒棒图

x = 0.5 + np.arange(8)
y = np.random.uniform(2, 7, len(x))

实际上y值的个数与x个数相同 len(x) xx 这个数组的数组

最后画茎图(棒棒图)就比较 笑意了

ax.stem(x, y)
ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
ylim=(0, 8), yticks=np.arange(1, 8))

传入x,y这两个数组就生成了相应 的效果,y的本质 是图的hieght