绘制图表
使用绘图进行绘图
要可视化数据,您需要下载*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轴上有一个振幅。
执行代码后,您将自动收到正弦信号的图形。:
绘制多个信号-使用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") # 情节正在使用! 使用感叹号将新信号添加到图表
执行代码后,您将分别自动接收正弦和余弦信号的两个图形。:
您可以在单独的图表上显示信号,然后代码将如下所示:
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)
)
执行代码后,您将自动收到正弦和余弦信号的图形。:
自定义图形-根据您的喜好自定义图形显示。
有关图表设置的属性的更详细列表,请参阅 Attributes. |
假设有一个正弦信号的图形:
using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, xlabel="时间", ylabel="的振幅")
在图形上,您可以使用构造`label="图例名称"`为图例设置名称。 例如:
using Plots
x = 0:0.01:10
y = sin.(x)
plot(x, y, label="正弦波", xlabel="时间", ylabel="的振幅") # 而不是y1,传说被命名为"Sinusoid"
可以通过指定`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`(markersize=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)
"分散!'command(x,y,label="Markers",color=:red)`根据数据`x`和`y’向现有图形添加红色标记,显示图例"Markers"。
将图形另存为图像-使用savefig命令将生成的图形保存到Engee文件浏览器。
savefig("my_plot.png")
执行代码后,您将收到有关保存文件路径的消息。:
输出:
"/user/my_plot.png"
使用 命令提示符,将显示在可视化窗口中
|
*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)
输出
要将图形添加到现有图形,请添加感叹号以使其"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时,您不需要选择和连接外部依赖项!
二维图形
要构建图形,您需要创建一个描述曲线,曲面等的对象。 通过在设置中指定线类型,可以使用散点函数构建二维图形。
... 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)