Engee 文档

绘制图表

使用绘图进行绘图

要可视化数据,您需要下载*Plots包。*:

using Plots

让我们来看看使用Plots包的一些典型图表任务。:

绘制单个信号-使用Plots包处理数据可视化并绘制信号。
using Plots # 下载绘图包
x = 0:0.01:10 # 以0.01的增量创建从0到10的时间间隔
y = sin.(x) # 正弦为时间图(x)的每个元素计算
plot(x, y, xlabel="时间", ylabel="的振幅", title="正弦信号的曲线图") # 绘制一个正弦波,x轴上有一个时间轴,y轴上有一个振幅。

执行代码后,您将自动收到正弦信号的图形。:

visualization plot 1 cn

绘制多个信号-使用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") # 情节正在使用! 使用感叹号将新信号添加到图表

执行代码后,您将分别自动接收正弦和余弦信号的两个图形。:

visualization plot 2 cn

您可以在单独的图表上显示信号,然后代码将如下所示:

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 # 图的数量被设置,值不能低于描述的图的数量(在我们的例子中,至少2)
)

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

visualization plot 3 cn

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

假设有一个正弦信号的图形:

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlabel="时间", ylabel="的振幅")

visualization plot 1 cn

在图形上,您可以使用构造`label="图例名称"`为图例设置名称。 例如:

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, label="正弦波", xlabel="时间", ylabel="的振幅") # 而不是y1,传说被命名为"Sinusoid"

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 cn

您还可以沿轴设置一系列值,例如:

using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlims=(0, 5), ylims=(-1, 1), xlabel="时间", ylabel="的振幅")

visualization new 3 cn

这种方法不限制数据,它只改变图形的可见范围,使完整的数据集保持不变。 必须使用过滤来限制数据,例如:

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 cn

在某些情况下,设置数据点标记很有用,例如:

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`(markersize=8),笔画宽度`2`(markerstrokewidth=2),笔画透明度`0.8`(markerstrokealpha=0.8)和线条的蓝色(`color=:blue')。

visualization new 5 cn

正方形或其他支持的几何形状,例如正方形,可以用来代替圆形标记。:

visualization new 6 cn

图形最流行的设计选项之一是减少标记的数量,同时完全保留线条,例如:

x = 0:0.1:10 # 我们使用相同的步骤。
y = sin.(x)

plot(x, y, xlabel="时间", ylabel="的振幅", label="全正弦波", color=:blue, linewidth=2)
scatter!(x, y, label="标记物", color=:red)

"分散!'command(x,y,label="Markers",color=:red)`根据数据`x`和`y’向现有图形添加红色标记,显示图例"Markers"。

visualization new 7 cn

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

执行代码后,您将收到有关保存文件路径的消息。:

输出:

"/user/my_plot.png"

使用 命令提示符,将显示在可视化窗口中 graphs icon 1 *Engee*到一个单独的绘图标签:

plots graph 1 cnplots graph cn

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

使用图书馆 PlotlyJS.jl对于创建三维图形,在将脚本转换为HTML/PDF格式时,以及在社区中发布时,可能会导致问题。

使用图书馆时 情节。jlplotlyjs后端没有这样的问题。

可视化要求 后端图形

速度

gr,单张图

互动性

plotlyjs

美貌

plotlyjs,gr

在命令行上构建

单张图

空间曲线的构建

plotlyjs,gr

建筑表面

gr

二维图形

任何后端都可以处理二维曲线的构建。 要缩放图形并选择曲线上的特定点,请启用图形显示方法*plotlyjs*:

plotlyjs();

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 cn

空间曲线

您还可以使用*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时,您不需要选择和连接外部依赖项!

二维图形

要构建图形,您需要创建一个描述曲线,曲面等的对象。 通过在设置中指定线类型,可以使用散点函数构建二维图形。

... 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*函数构造一个由抛物面定义的曲面。 首先,您需要确保数据类型正确。 `X`和`y’中的坐标可以是一维或二维数组。 当转置向量’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