这篇笔记只关注 Julia 里最基础、最常用的科学计算绘图,不追求复杂可视化能力。

原因也很简单:如果只是画函数曲线、散点图、热图、简单布局,那么 Julia 自己已经够用;但如果进入更复杂的工程化可视化、交互式图形或者生态成熟度要求很高的场景,通常还是更容易回到 Python。

概述

Julia 绘图生态里最常见的入口大概有这几种:

  • Plots.jl:接口统一、上手简单,最适合基础笔记
  • GR:常见默认后端,轻量、够快
  • PyPlot.jl / PythonPlot.jl:更接近 Matplotlib 习惯
  • Makie.jl:更强、更现代,但复杂度也明显更高

如果只是“科学计算里顺手画图”,最实用的选择还是:

  • 直接使用 Plots.jl
  • 默认后端先用 GR

这篇笔记也只按这个思路整理。

安装与加载

最基本的安装:

1
2
using Pkg
Pkg.add("Plots")

使用时:

1
using Plots

如果需要显式指定后端:

1
gr()

基础使用里不用太在意后端细节,先能画出来最重要。

最简单的曲线图

直接给 y

1
2
3
using Plots

plot([1, 4, 9, 16])

这时横坐标默认就是索引位置。

同时给 x 和 y

1
2
3
4
x = 0:0.1:2pi
y = sin.(x)

plot(x, y)

这就是最普通的函数曲线写法。

常见图形

折线图

1
2
x = 0:0.1:2pi
plot(x, sin.(x))

散点图

1
2
3
4
x = rand(50)
y = rand(50)

scatter(x, y)

柱状图

1
bar(["A", "B", "C"], [3, 5, 2])

直方图

1
histogram(randn(1000))

热图

1
2
A = [sin(x) * cos(y) for x in 0:0.1:2pi, y in 0:0.1:2pi]
heatmap(A)

对于二维标量场,可视化时热图通常已经够用了。

基本修饰

标题、坐标轴、图例

1
2
3
4
5
6
7
8
9
10
x = 0:0.1:2pi

plot(
x,
sin.(x),
title = "sin(x)",
xlabel = "x",
ylabel = "y",
label = "sin"
)

最常用的参数通常就是:

  • title
  • xlabel
  • ylabel
  • label

线型、颜色、标记

1
2
3
4
5
6
7
8
plot(
x,
sin.(x),
color = :red,
linestyle = :dash,
linewidth = 2,
marker = :circle
)

基础场景里,知道这些参数能改样式就够了,不需要一开始就记很多。

一张图里画多条曲线

直接传多个序列

1
2
3
4
5
6
7
x = 0:0.1:2pi

plot(
x,
[sin.(x) cos.(x)],
label = ["sin" "cos"]
)

plot!

Julia 绘图里常见的一个习惯是:

  • plot(...) 创建新图
  • plot!(...) 往当前图上继续叠加

例如:

1
2
3
4
x = 0:0.1:2pi

plot(x, sin.(x), label = "sin")
plot!(x, cos.(x), label = "cos")

对应地,很多函数也有带 ! 的版本:

  • scatter!
  • bar!
  • histogram!

这个风格和 Julia 其他地方的 ! 约定是统一的,也就是“修改已有对象”。

子图布局

最简单的做法:

1
2
3
4
p1 = plot(0:0.1:2pi, sin.(0:0.1:2pi), title = "sin")
p2 = plot(0:0.1:2pi, cos.(0:0.1:2pi), title = "cos")

plot(p1, p2, layout = (1, 2))

这对于做最基础的对比图已经够用了。

保存图片

1
2
p = plot(0:0.1:2pi, sin.(0:0.1:2pi))
savefig(p, "sin.png")

也可以直接:

1
savefig("sin.png")

常见格式包括:

  • png
  • pdf
  • svg

如果只是插入笔记或报告,通常 pngpdf 就够了。

一个科学计算里常见的小例子

例如画一个函数和采样点:

1
2
3
4
5
6
7
8
9
10
using Plots

x = 0:0.01:2pi
y = sin.(x)

xs = 0:0.4:2pi
ys = sin.(xs)

plot(x, y, label = "sin(x)", linewidth = 2)
scatter!(xs, ys, label = "samples", color = :red)

这已经很接近日常数值实验里最常见的使用方式了。

什么时候不必坚持 Julia 绘图

需要说明的是,Julia 绘图并不是不能做复杂图,而是如果你的目标只是“尽快把复杂可视化做完”,那么生态成熟度通常还是 Python 更占优势。

所以经验上可以简单分成:

  • 基础科学计算绘图:Julia 直接画,够用而且方便
  • 复杂数据可视化、定制化很重、和现有 Python 工作流深度绑定:直接回 Python

这其实是很务实的选择,没有必要为了“全都用 Julia”而增加额外成本。

小结

基础绘图用 Plots.jl 基本就够了,函数曲线、散点图、直方图、热图这些都很直接,叠加图就用带 ! 的版本。真正复杂的可视化没有必要硬留在 Julia,直接回 Python 往往更省事。