Engee 文档

制图

使用图形绘制地图

要将数据可视化,您需要下载 Plots 软件包:

using Plots

让我们来看看使用 Plots 软件包绘制图表的几项典型任务:

绘制单个信号图 - 使用 Plots 软件包处理数据可视化并绘制信号图。
using Plots # загружает пакет Plots
x = 0:0.01:10 # создает временной 向量 от 0 до 10 с шагом 0.01
y = sin.(x) # вычисляется синус для каждого элемента временного 向量а (x)
plot(x, y, xlabel="Время", ylabel="Амплитуда", title="График синусоидального сигнала") # строит график синусойды с временной осью на оси x и амплитудой на оси y

执行代码后,您将自动获得正弦信号的图形:

visualization plot 1

为多个信号绘制图表 - 使用 Plots 软件包在一个图表上绘制多个信号。
using Plots
x = 0:0.01:10
y1 = sin.(x)
y2 = cos.(x)
plot(x, y1, label="Signal 1")
plot!(x, y2, label="Signal 2") # используется plot! с восклицательным знаком для добавления нового сигнала на график

执行代码后,您将自动分别获得正弦和余弦信号的两幅图:

visualization plot 2

您可以在不同的图形上输出信号,这样代码就会如下所示:

using Plots

x = 0:0.01:10
y1 = sin.(x)
y2 = cos.(x)

plot(
    plot(x, y1, label="Signal 1"),
    plot(x, y2, label="Signal 2"),
    layout = 2 # задается количество графиков, значение не может быть ниже числа описываемых plots (в нашем случае не ниже 2)
)

执行代码后,您将自动获得正弦和余弦信号的图形:

visualization plot 3

自定义图表 - 根据您的偏好自定义图表显示。
有关图表设置属性的更详细列表,请参阅Attributes

假设有一个正弦信号图:

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlabel="Время", ylabel="Амплитуда")

visualization plot 1

您可以使用 label="Legend Name" 结构为图表上的图例命名。例如

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, label="Синусоида", xlabel="Время", ylabel="Амплитуда") # вместо y1 легенда получила имя "Синусоида"

visualization new 1

通过指定 legend = false 可以完全删除图例:

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, ylabel="Амплитуда", xlabel="Время", legend = false)

visualization new 2

例如,您还可以指定一个轴值范围:

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlims=(0, 5), ylims=(-1, 1), xlabel="Время", ylabel="Амплитуда")

visualization new 3

这种方法不会限制数据,只会改变图表的可见范围,而完整的数据集则保持不变。要限制数据,应使用过滤功能,例如

using Plots
x = 0:0.01:10
y = sin.(x)
x_filtered = x[x .<= 5] # фильтруем значения x
y_filtered = y[x .<= 5] # фильтруем значения y
plot(x_filtered, y_filtered, xlabel="Время", ylabel="Амплитуда")

这里的代码只针对正弦波形的前半部分,x 和 y 数组对应于指定的范围。

Plots 软件包提供了多种自定义图形外观的可能性,例如

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, line=:dashdot, color=:red, linewidth=2, xlabel="Время", ylabel="Амплитуда")

在这里,图表线变成了带点的虚线 (line=:dashdot),线的颜色变成了红色 (color=:red),宽度等于 2 (linewidth=2)。

visualization new 4

在某些情况下,调整数据点标记也很有用,例如

using Plots
x = 0:0.1:2π
y = sin.(x)
plot(x, y, xlabel="Время", ylabel="Амплитуда", marker=:circle, markersize=8, markerstrokewidth=2, markerstrokealpha=0.8, color=:blue)

这里绘制的正弦曲线图带有坐标轴标题(xlabel, ylabel),标记为圆形(marker=:circle),标记大小为`8`(markerize=8),描边宽度为`2`(markerstrokewidth=2),描边透明度为`0.8`(markerstrokealpha=0.8),线条颜色为蓝色(color=:blue)。

visualization new 5

可以使用正方形或其他支持的几何图形(如正方形)代替圆形标记:

visualization new 6

例如,图表设计中最常用的方法之一就是减少标记的数量,同时保持线条的完整:

x = 0:0.1:10 # Используем один и тот же шаг
y = sin.(x)

plot(x, y, xlabel="Время", ylabel="Амплитуда", label="Полная синусоида", color=:blue, linewidth=2)
scatter!(x, y, label="Маркеры", color=:red)

scatter!(x,y,label="Markers",color=:red)`命令根据`x`和`y`数据在现有图表中添加红色标记,并显示图例 "Markers"。

visualization new 7

将图形保存为图片 - 使用 savefig 命令将生成的图形保存到 Engee 文件浏览器。
savefig("my_plot.png")

执行代码后,您会收到一条关于保存文件路径的信息:

*输出:

"/user/my_plot.png"

使用命令行 中的 Plots 绘制的图形将在graphs icon 1 EngeeGraphs 窗口中以单独的图形选项卡显示:

plots graph 1 cn-> plots graph cn

Plots 软件包中有几种不同的图形显示方法—​后端。选择哪种后端取决于您的任务。下表将帮助您选择更合适的方法。

使用 PlotlyJS.jl 创建 3D 图形可能会在将脚本转换为 HTML/PDF 格式以及向社区发布时产生问题。

当使用Plots.jl 库和 plotlyjs 后端时,就不会出现这个问题。

可视化要求 图形后端

速度

gr, unicodeplots

交互性

plotlyjs

美观

plotlyjs、gr

命令行绘图

unicodeplots

绘制空间曲线

plotlyjs, gr

构建曲面

gr

二维绘图

任何后端都可以绘制二维曲线。要缩放图形并选择曲线上的特定点,让我们连接 plotlyjs 图形显示方法:

plotlyjs();

plot 函数用于创建二维曲线图。

如果在 plot 命令末尾加上分号,命令会执行,但不会显示绘图。
x = [-10:10;];
y = x.^2;
plot(x,y)
输出

plotting 1

要在现有图形中添加图形,请添加感叹号,使其成为 plot!()。您可以在坐标轴和图形上签名,添加标题,更改线条和背景样式:

plot!(2x, y, xlabel="X", ylabel="X^2", title="Парабола", linecolor =:red, bg_inside =:yellow, line =:dashdot, label = "X^2")
输出

plotting 2

空间曲线

使用 plot 还可以绘制三维图形:

y = x;
z1 = x.^2;
plot(x,y,z1, xlabel="X", ylabel="Y", zlabel="Z", linecolor =:green, label = "X^2")
输出

plotting 3

y = -x;
z2 = x.^2;
plot!(x,y,z2, xlabel="X", ylabel="Y", zlabel="Z", linecolor =:red, label = "Y^2")
输出

plotting 4

使用 PlotlyJS 绘制图形

可视化数据的第二种方法是使用另一个库 PlotlyJS

using PlotlyJS

如果您以前使用过 Plots 库,函数名称可能会有冲突。因此,我们将以如下方式调用绘图函数:

PlotlyJs.<имя_функции>

PlotlyJS 库的缺点之一是需要刚性类型。因此,您必须执行额外的类型转换才能构建曲面。但使用 PlotlyJS 时,您无需选择和连接后端!

二维图形

要绘制图形,需要创建一个对象来描述要绘制的曲线、曲面等。可以使用散点图函数 scatter 绘制二维图形,并在设置中指定类型为直线。

... mode = "lines"

在本例中,选择的类型是带标记的行。

line1 = PlotlyJS.scatter(x=2018:2022, y=[7.632, 7.769, 7.809, 7.842, 7.841], mode="lines+markers", name="Finland", line_color="purple");
line2 = PlotlyJS.scatter(x=2018:2022, y=[6.419, 6.300, 6.376, 6.330, 6,125], mode="lines+markers", name= "Brazil", line_width=0.5);

现在可以创建一个对象,在其中设置图表外观的参数。如果需要统一风格的图表,这种方法非常方便。该库允许您使用大量外观设置。您可以在图表上签名,选择线条的粗细和颜色(颜色的选择可以通过不同的方式设置)。

layout = PlotlyJS.Layout(title="Gross National Happiness", xaxis_range=[2018, 2022], yaxis_range=[5, 8], paper_bgcolor="RGB(250,249,245)", plot_bgcolor="#F5F3EC");

plot 函数用于绘制图表。如果要绘制多个图形,应将它们写成一个向量:

PlotlyJS.plot([line1, line2], layout)
输出

plotting 5

空间曲线

绘制空间曲线的对象由 scatter3d 函数创建。

x = [-10.0:10.0;];
cubic = PlotlyJS.scatter3d(x=x, y=-x, z=x.^3, mode="lines");
PlotlyJS.plot(cubic)
输出

plotting 6

表面

让我们使用 surface 函数建立一个由抛物面定义的曲面。首先,我们需要确保数据类型正确。xy 中的坐标可以是一维数组,也可以是二维数组。当转置向量 y = x' 时,结果类型不是数组:

println("Тип y = x': " ,typeof(x'));

因此,在构建曲面之前,必须转换向量 y 的类型:

y = vec(collect(x'));
z = (x.^2).+((x').^2);

让我们检查一下数据类型:

println("Тип x: " ,typeof(x));
println("Тип y: " ,typeof(y));
println("Тип z: " ,typeof(z));
paraboloid = PlotlyJS.surface(x=x, y=y, z=z);
PlotlyJS.plot(paraboloid)
输出

plotting 7