如何使用 Plots.jl 将特定的 x 刻度、标签和垂直线添加到绘图中?

Ant*_*llo 7 plot julia

我正在尝试将两条垂直线添加到绘图中,并在 x 轴上带有相应的刻度和标签,以突出显示重要点。

我找到了两种方法(后面的 A 和 B),但在第一种方法中,新的刻度/标签替换而不是附加旧的,而在第二种方法中,标签打印在某种不一致的位置(取决于范围)和无法将它们带到我想要的地方:

using Plots, StatPlots, DataFrames
pyplot()
df = DataFrame(a = 1:10, b = 10*rand(10), c = 10 * rand(10))
f = Plots.font("DejaVu Sans", 10)
@df df plot(:a, [:b :c], label=["serie a" "serie b"], xtickfont=f, ytickfont=f, legendfont=f, guidefont=f, titlefont=f)
Run Code Online (Sandbox Code Playgroud)

A:

plot!([5,7], seriestype="vline", xticks = ([5,7],["\$\\bar \\delta \$","\$\\bar \\gamma \$"]), label="")
Run Code Online (Sandbox Code Playgroud)

这显示如下: A的截图

乙:

plot!([5], seriestype="vline", label="")
annotate!(5, 0, text("\$ \\bar \\delta \$",f, :bottom, :left))
plot!([7], seriestype="vline", label="")
annotate!(7, 0, text("\$\\bar \\gamma \$",f, :top)
Run Code Online (Sandbox Code Playgroud)

这显示如下: B的截图

Ben*_*ier 5

xticks一种解决方案是从原始图中获取并将它们与xticks您想要的合并。下面是与您的示例接近的 MWE

\n
using Plots, DataFrames\ndf = DataFrame(a = 1:10, b = 10rand(10), c = 10rand(10))\nplt = plot(df.a, [df.b df.c], label=["serie a" "serie b"])\nold_xticks = xticks(plt[1]) # grab xticks of the 1st subplot\nnew_xticks = ([5, 8], ["\\$\\\\bar \\\\delta\\$", "\\$\\\\bar \\\\gamma\\$"])\nvline!(new_xticks[1])\nkeep_indices = findall(x -> all(x .\xe2\x89\xa0 new_xticks[1]), old_xticks[1])\nmerged_xticks = (old_xticks[1][keep_indices] \xe2\x88\xaa new_xticks[1], old_xticks[2][keep_indices] \xe2\x88\xaa new_xticks[2])\nxticks!(merged_xticks)\n
Run Code Online (Sandbox Code Playgroud)\n

并产生

\n

在此输入图像描述

\n

请注意,我故意将索引移至 ,7以便8我必须小心删除那里的原始 xtick ,以便此解决方案更加通用。

\n

另请注意,Plots.jl v1.13.0xticks中添加了类似的 ticks-getter 函数。

\n