Plotly - 箱线图、小提琴图和轮廓图
本章重点介绍各种图的详细理解,包括箱线图、小提琴图、轮廓图和箭筒图。首先,我们将从下面的箱线图开始。
箱线图
箱线图显示一组数据的摘要,其中包含最小值、第一四分位数、中位数、第三四分位数和最大值。在箱线图中,我们从第一四分位数到第三四分位数绘制一个箱子。一条垂直线穿过中位数处的箱子。从箱子垂直延伸的线表示上四分位数和下四分位数之外的变异性,称为须线。因此,箱线图也称为箱线图和须线图。须线从每个四分位数延伸到最小值或最大值。
要绘制箱线图,我们必须使用 go.Box() 函数。数据系列可以分配给 x 或 y 参数。因此,箱线图将水平或垂直绘制。在以下示例中,某家公司各个分支机构的销售数字转换为水平箱线图。它显示最小值和最大值的中位数。
trace1 = go.Box(y = [1140,1460,489,594,502,508,370,200]) data = [trace1] fig = go.Figure(data) iplot(fig)
其输出如下 −
可以向 go.Box() 函数提供各种其他参数来控制箱线图的外观和行为。boxmean 参数就是其中之一。
默认情况下,boxmean 参数设置为 true。因此,箱体底层分布的平均值在箱体内绘制为虚线。如果设置为 sd,则还会绘制分布的标准差。
boxpoints 参数默认等于"outliers"。仅显示位于晶须之外的样本点。如果为"suspectedoutliers",则显示异常点,并突出显示小于 4"Q1-3"Q3 或大于 4"Q3-3"Q1 的点。如果为"False",则仅显示框,没有样本点。
在以下示例中,框轨迹 用标准差和异常点绘制。
trc = go.Box( y = [ 0.75, 5.25, 5.5, 6, 6.2, 6.6, 6.80, 7.0, 7.2, 7.5, 7.5, 7.75, 8.15, 8.15, 8.65, 8.93, 9.2, 9.5, 10, 10.25, 11.5, 12, 16, 20.90, 22.3, 23.25 ], boxpoints = 'suspectedoutliers', boxmean = 'sd' ) data = [trc] fig = go.Figure(data) iplot(fig)
其输出如下所示 −
小提琴图
小提琴图类似于箱线图,不同之处在于它们还显示数据在不同值下的概率密度。小提琴图将包括数据中位数的标记和表示四分位距的框,就像标准箱线图一样。此箱线图上叠加的是核密度估计。与箱线图一样,小提琴图用于表示跨不同"类别"的变量分布(或样本分布)的比较。
小提琴图比普通箱线图更具信息量。事实上,虽然箱线图仅显示平均值/中位数和四分位距等汇总统计数据,但小提琴图显示数据的完整分布。
小提琴跟踪对象由graph_objects模块中的go.Violin()函数返回。为了显示底层箱线图,boxplot_visible属性设置为True。同样,通过将meanline_visible属性设置为true,小提琴内将显示一条与样本平均值相对应的线。
以下示例演示了如何使用plotly的功能显示小提琴图。
import numpy as np np.random.seed(10) c1 = np.random.normal(100, 10, 200) c2 = np.random.normal(80, 30, 200) trace1 = go.Violin(y = c1, meanline_visible = True) trace2 = go.Violin(y = c2, box_visible = True) data = [trace1, trace2] fig = go.Figure(data = data) iplot(fig)
输出如下 −
轮廓图
2D 轮廓图显示 2D 数值数组 z 的轮廓线,即 z 的 等值 的插值线。两个变量函数的轮廓线是一条曲线,函数沿该曲线具有恒定值,因此该曲线连接相等值的点。
如果您想查看某个值 Z 如何随着两个输入 X 和 Y 而变化,使得 Z = f(X,Y),则轮廓图是合适的。两个变量函数的轮廓线或等值线是一条曲线,函数沿该曲线具有常数值。
独立变量 x 和 y 通常被限制在称为 meshgrid 的规则网格中。numpy.meshgrid 从 x 值数组和 y 值数组中创建一个矩形网格。
首先,让我们使用 Numpy 库中的 linspace() 函数为 x、y 和 z 创建数据值。我们从 x 和 y 值创建一个 meshgrid,并获得由 x2+y2 的平方根组成的 z 数组
我们在 graph_objects 模块中有 go.Contour() 函数,它接受 x、y 和 z 属性。以下代码片段显示按上述计算的 x、y 和 z 值的等高线图。
import numpy as np xlist = np.linspace(-3.0, 3.0, 100) ylist = np.linspace(-3.0, 3.0, 100) X, Y = np.meshgrid(xlist, ylist) Z = np.sqrt(X**2 + Y**2) trace = go.Contour(x = xlist, y = ylist, z = Z) data = [trace] fig = go.Figure(data) iplot(fig)
输出如下 −
可以通过以下一个或多个参数自定义轮廓图 −
Transpose (boolean) − 转置 z 数据。
如果 xtype(或 ytype)等于"array",则 x/y 坐标由"x"/"y"给出。如果"scaled",则 x 坐标由"x0"和"dx"给出。
connectgaps 参数确定是否填充 z 数据中的间隙。
ncontours 参数的默认值为 15。实际轮廓数将自动选择为小于或等于 `ncontours` 的值。仅当 `autocontour` 为"True"时才有效。
轮廓类型默认为:"levels",因此数据表示为显示多个级别的轮廓图。如果为 constrain,则数据将表示为约束,其中无效区域按 operation 和 value 参数指定的方式着色。
showlines − 确定是否绘制轮廓线。
zauto 默认为 True,并确定是否根据输入数据(此处为 `z`)或 `zmin` 和 `zmax` 中设置的边界计算颜色域。当用户设置 `zmin` 和 `zmax` 时,默认为 `False`。
Quiver 图
Quiver 图也称为 速度图。它将速度矢量显示为在点 (x,y) 处具有分量 (u,v) 的箭头。为了绘制 Quiver 图,我们将使用 Plotly 中 figure_factory 模块中定义的 create_quiver() 函数。
Plotly 的 Python API 包含一个图形工厂模块,其中包含许多包装器函数,这些函数可创建独特的图表类型,而这些图表类型尚未包含在 Plotly 的开源图形库 plotly.js 中。
create_quiver() 函数接受以下参数 −
x − 箭头位置的 x 坐标
y − 箭头位置的 y 坐标
u −箭头向量的 x 分量
v − 箭头向量的 y 分量
scale − 箭头的缩放大小
arrow_scale − 箭头的长度。
angle − 箭头的角度。
以下代码在 Jupyter 笔记本中呈现一个简单的箭筒图 −
import plotly.figure_factory as ff import numpy as np x,y = np.meshgrid(np.arange(-2, 2, .2), np.arange(-2, 2, .25)) z = x*np.exp(-x**2 - y**2) v, u = np.gradient(z, .2, .2) # Create quiver figure fig = ff.create_quiver(x, y, u, v, scale = .25, arrow_scale = .4, name = 'quiver', line = dict(width = 1)) iplot(fig)
代码输出如下 −