使用朱莉娅图访问特定的后端功能



Plots既简单又强大,但有时我想对情节的各个元素进行更多的控制以微调其外观。

是否可以直接更新后端的绘图对象?

,例如,对于默认的pyplot后端,我尝试了

using Plots
p = plot(sin)
p.o[:axes][1][:xaxis][:set_ticks_position]("top")

,但情节不会改变。此后致电p.o[:show]()也无济于事。

换句话说:是否有一种方法可以将PyPlot接口用于最初使用Plots创建的绘图?

编辑:

保存图形时,PyPlot对象的更改变得可见(也在GUI中):

using Plots
using PyPlot
p = Plots.plot(sin, top_margin=1cm)
gui() # not needed when using the REPL
gca()[:xaxis][:set_ticks_position]("top")
PyPlot.savefig("test.png")

在这里,我使用了p.o[:axes][1] == gca()。必须设置top_margin=1cm,因为绘图区域未自动调整(对于我的实际微调,这没关系)。

,只要仅使用PyPlot接口,这也适用于后续更新。例如,在以下命令之后,除顶部的标签外,该图还将具有红色右边框:

gca()[:spines]["right"][:set_color]("red")
PyPlot.savefig("test.png")

但是,当使用Plots命令(例如plot!(xlabel="foo"))时,PyPlot进行的所有先前更改都被覆盖(这并不令人惊讶)。

其余的问题是如何交互方式更新GUI,而无需明确致电PyPlot.savefig

no-绘图是绘图对象,而不是pyplot对象。在您的特定示例中,您可以进行plot(sin, xmirror = true)。

我正在尝试做同样的事情,但没有找到更新现有图的解决方案。但这是一个部分答案:您可以从Pyplot Axes对象查询信息

julia> Plots.plot(sin, 1:4)
julia> Plots.PyPlot.plt[:xlim]()
(1.0,4.0)
julia> Plots.plot(sin, 20:24)
julia> ax = Plots.PyPlot.plt[:xlim]()
(20.0,24.0)

它被更新。

相关内容

  • 没有找到相关文章