制图
使用图形绘制地图
要将数据可视化,您需要下载 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
执行代码后,您将自动获得正弦信号的图形:
为多个信号绘制图表 - 使用 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! с восклицательным знаком для добавления нового сигнала на график
执行代码后,您将自动分别获得正弦和余弦信号的两幅图:
您可以在不同的图形上输出信号,这样代码就会如下所示:
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)
)
执行代码后,您将自动获得正弦和余弦信号的图形:
自定义图表 - 根据您的偏好自定义图表显示。
有关图表设置属性的更详细列表,请参阅Attributes 。 |
假设有一个正弦信号图:
using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlabel="Время", ylabel="Амплитуда")
您可以使用 label="Legend Name"
结构为图表上的图例命名。例如
using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, label="Синусоида", xlabel="Время", ylabel="Амплитуда") # вместо y1 легенда получила имя "Синусоида"
通过指定 legend = false
可以完全删除图例:
using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, ylabel="Амплитуда", xlabel="Время", legend = false)
例如,您还可以指定一个轴值范围:
using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlims=(0, 5), ylims=(-1, 1), 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
)。
在某些情况下,调整数据点标记也很有用,例如
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
)。
可以使用正方形或其他支持的几何图形(如正方形)代替圆形标记:
例如,图表设计中最常用的方法之一就是减少标记的数量,同时保持线条的完整:
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"。
将图形保存为图片 - 使用 savefig 命令将生成的图形保存到 Engee 文件浏览器。
savefig("my_plot.png")
执行代码后,您会收到一条关于保存文件路径的信息:
*输出:
"/user/my_plot.png"
使用命令行 中的 Plots 绘制的图形将在
|
在 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)
输出
要在现有图形中添加图形,请添加感叹号,使其成为 plot!()
。您可以在坐标轴和图形上签名,添加标题,更改线条和背景样式:
plot!(2x, y, xlabel="X", ylabel="X^2", title="Парабола", linecolor =:red, bg_inside =:yellow, line =:dashdot, label = "X^2")
输出
使用 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)
输出
空间曲线
绘制空间曲线的对象由 scatter3d 函数创建。
x = [-10.0:10.0;];
cubic = PlotlyJS.scatter3d(x=x, y=-x, z=x.^3, mode="lines");
PlotlyJS.plot(cubic)
输出
表面
让我们使用 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)