Plotly等值线图 - 完整指南

816 阅读5分钟

在这篇文章中,我们将学习Python的Plotly库,以及创建迷人的等高线图的各种方法。我们将看到各种等高线图的例子,以及每个例子的详细代码分析。我们还将学习多种方法来定制自己的等高线图。那么,让我们从基础知识开始。

什么是等高线图?

等高线是对一个三维表面的二维描述,带有关节和曲线。它是在等高线函数(Z)的帮助下绘制的,它是两个变量(X轴和Y轴坐标)的一个函数。

什么是Plotly库?

Plotly提供各种数据可视化库来绘制图表和图形。我们可以从大量的绘图库中进行选择,还有专门用于创建各种不同类型的图表的工具,都可以在外面找到。在这篇文章中,我们主要是用一个导入包和只用一个绘图函数来工作。这就是我们在使用Plotly时获得的易用性。

安装Plotly

要在你的系统中安装Plotly,请输入以下命令。

Pip install plotly==5.5.0 

用Plotly创建等高线图

让我们开始用Plotly创建这些等高线图。

基本等高线图

首先,我们将用Plotly绘制一个简单的等高线图。首先需要的是导入库。

下面导入包就像一个通用的Plotly语法,可以完成大部分的工作。

import plotly.graph_objects as grob

Plotly的等高线函数

等高线函数使用初始化的数据来作图。我们必须向它提供x、y坐标和z函数。

创建一个等高线图有两个部分。数据初始化和使用等高线函数创建对象,有多种不同的方法来完成这两部分,每一种方法都会影响等高线。为了简单起见,让我们假设我们的坐标是用变量 "data "初始化的。

如下图所示,代码告诉编译器为等高线的z函数取值的数据。

grid_fig = grob.Figure(data =
	grob.Contour(z = data))

让我们看一下几个程序例子来了解所有的方法。

Plotly 等高线图,以坐标阵列作为z函数。

import plotly.graph_objects as grob

# This 5X5 matrix stores the coordinate values required for z function
data = [[6, 4, 5, 5, 6],
	[1, 5, 5, 4, 6],
	[5, 4, 4, 6, 4],
	[7, 8, 4, 3, 3]]

grid_fig = grob.Figure(data =
	grob.Contour(z = data))

grid_fig.show()

输出

用特定的X、Y、Z值绘制Plotly等高线图

import plotly.graph_objects as grob

fig = grob.Figure(data =
    grob.Contour(

        z=[[10, 10.625, 12.5, 15.625, 20],
           [5.625, 6.25, 8.125, 11.25, 15.625],
           [2.5, 3.125, 5., 8.125, 12.5],
           [0.625, 1.25, 3.125, 6.25, 10.625],
           [0, 0.625, 2.5, 5.625, 10]],

        x=[-3, -2, -1, 0, 1], # horizontal axis
        y=[0, 1, 3, 4, 5] # vertical axis
    ))
fig.show()

输出:

这里的z函数是一个坐标数组,与前面的例子类似。使用Numpy导入包可以进一步让我们使用更复杂的数据来绘制等高线图。在下一个例子中,我们将观察如何为我们的z函数加上一个三角函数的标识。

使用Numpy绘制等高线图

import plotly.graph_objects as grob
import numpy as nump

# variables are initialised with x,y co-ordinates
cordof_x = nump.arange(0, 23, 0.5)
cordof_y = nump.arange(0, 46, 0.3)

# A mesh is created with the given co-ordinates by this numpy function
[X, Y] = nump.meshgrid(cordof_x, cordof_y)

contour_function = nump.cos(X*(1/8)) + nump.sin(Y*(1/16))

contour_plot = grob.Figure(data =
	grob.Contour(x = cordof_x, y = cordof_y, z = contour_function))

contour_plot.show()

输出:

希望上面的例子能让我们完全明白基本的等高线图是如何创建的。到目前为止,我们已经学会了为我们的等高线图创建输入和Z函数的不同方法。现在,我们将大胆地对我们的等高线图进行样式设计。

定制Plotly等高线图

在文章的这一部分,我们将主要讨论等高线图的前端方面或简单的样式设计方面。

设置曲线图的颜色和比例

让我们以一个程序为例,我们有一个初始化为z函数的坐标阵列。现在,在我们的等高线图中,如果我们想用一个自定义的比例 来表示我们的图 我们可以通过:

dx=40,
x0=10,
dy=10,
y0=20,

现在,在设置了比例之后,让我们假设我们想改变我们的绘图的主题。我们可以这样做。

colorscale='hot',

或者

colorscale='electric',

为了增加最后的润色,我们还可以为我们的情节添加一个色标。这可以通过以下方式实现。

contours=dict(
            start=0,
            end=14,
            size=2,
        ),

让我们把所有的东西放在一个程序中,观察它是如何发挥的。

import plotly.graph_objects as grob

grid_fig = grob.Figure(data =
    grob.Contour(
        z=[[10, 10.625, 12.5, 15.625, 20],
           [5.625, 6.25, 8.125, 11.25, 15.625],
           [2.5, 3.125, 5., 8.125, 12.5],
           [0.625, 1.25, 3.125, 6.25, 10.625],
           [0, 0.625, 2.5, 5.625, 10]],
        dx=40,
        x0=10,
        dy=10,
        y0=20,
        colorscale='electric',
        contours=dict(
            start=0,
            end=14,
            size=2,
        ),
     ))

grid_fig.show()

输出:

创建一个高级等高线图

到目前为止,我们已经了解了使用Plotly绘制等高线图的基本内容。现在,我们将把到目前为止所学到的东西放在一起,创建一个高级等高线图,这样我们就可以了解为实际应用而创建的等高线图是怎样的。

下面的代码:

import numpy as np
import math
import plotly.graph_objects as grob


x = np.linspace(-np.pi, np.pi, num=80)
y = x
def pf(a, b):
    return math.sin(b) / (1 + a**2)
f = np.empty((len(x), len(y)))

for i in range(len(x)):
    for j in range(len(y)):
        f[i,j] = pf(x[i], y[j])

grid_fig = grob.Figure()
grid_fig.add_trace(grob.Contour(z=f, x=x, y=y,
                         contours_coloring='lines',
                         line_width=1.5,
                         contours={"showlabels":True,
                                   "labelfont":{"size":10,
                                                "color":'red'}}))

grid_fig.update_layout(

{   "title": {"text": "<b>Advanced Contour Plot</b>", "x": 0.5, "y": 0.9, "font": {"size": 14} },
    "showlegend": True,
    "xaxis": {"title": "scale of x ----------------------->", "showticklabels":True, "dtick": 1},
    "yaxis": {"title": "scale of y ------------>", "showticklabels": True, "dtick": 1},
    "autosize":False,
    "width":1200,
    "height":600})

grid_fig.show()

输出:

结语

在这篇文章中,我们已经了解了Plotly的基本概念,以及如何根据我们的需要来定制它。我们了解了我们如何使用特定的坐标值或坐标阵列作为我们的输入方法,以及numpy的集成如何允许三角函数的轮廓图。最后,我们还观察了如何编码一个高级绘图。希望这篇文章能帮助你更好地学习和理解Plotly。