我的绘图选项

我初步研究了一下 Plots.jl 的绘图选项, 并搜索了一些帖子, 现在制作的平面图形已经能满足我的要求了. 这方面的资源似乎很少, 我将我的代码分享一下, 给大家提供一个参考.

using Plots, LaTeXStrings

function change_ticks!(p)
    for i in ([xticks, xticks!], [yticks, yticks!], [zticks, zticks!])
        ticks = i[1](p)
        a = ticks[1][1]
        b = latexstring.(ticks[1][2])
        newticks = (a, b)
        i[2](newticks)
    end
    p
end

gr()

figure = plot(; tickfontsize=12, frame=:box,
    aspect=0.8, xlabel=L"x", ylabel=L"y", guidefontsize=15, linewidth=1, legendfontsize=12)

plot!(0:0.01:2pi, sin.(0:0.01:2pi), color=:black, label=L"y=\sin(x)")

plot!(0:0.01:2pi, cos.(0:0.01:2pi), color=:red, label=L"y=\cos(x)")

change_ticks!(figure)

这里我定义了一个函数 change_ticks!, 可以将图中的刻度字体自动转变为 \LaTeX 数字字体. 上面的代码产生的图是这样的:
plot_57

5 个赞

感谢分享!
我也借楼分享一下使用 Makie.jl 实现上述图片。在Makie里提供了theme_latexfonts的视觉主题,可以比较方便地使用 \LaTeX 字体。

using GLMakie
set_theme!(theme_latexfonts())
f=Figure(fontsize=12)
ax=Axis(f[1,1],xticklabelsize=12,yticklabelsize=12,xlabel=L"x",ylabel=L"y")
lines!(ax,0:0.01:2π,sin.(0:0.01:2π),color=:black,label=L"y=\sin(x)",linewidth=1)
lines!(ax,0:0.01:2π,cos.(0:0.01:2π),color=:red,label=L"y=\cos(x)",linewidth=1)
axislegend(ax,position=:lb,labelsize=15)
display(f)
3 个赞

Awesome!
这里还可以把刻度换成四面都有并且朝向里面, 我更喜欢这种风格:

ax=Axis(f[1,1],xticklabelsize=12,yticklabelsize=12,xlabel=L"x",ylabel=L"y",xticksmirrored = true, yticksmirrored = true,xtickalign = 1,ytickalign = 1)
1 个赞

请问gr()这一行有什么用啊

Plots.jl有多个后端,例如plotlyjs和gr,那个命令是选择gr作为后端

1 个赞