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()
运行的效果图如下,为什么叫茎叶呢,看这些线科的样式其实就是类似一个个植物 的生长曲线。
代码讲解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列的二维数组
生成相同的随机数据,只需要把上面的代码改造一下,
每次先调用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)
函数: numpy.random.uniform(low,high,size)
从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high.
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