Plots
非常简单而且功能强大,但有时我想对剧情的各个元素有更多的控制来微调其外观。访问Julia剧情的后端特定功能
是否可以直接更新后端的绘图对象?
例如,默认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")
然而,当使用像plot!(xlabel="foo")
一个Plots
命令,此前已PyPlot
所做的所有更改会被覆盖(这并不令人惊讶)。
剩下的问题是如何交互式地更新gui,而不必明确地调用PyPlot.savefig
。
但是,您可以使用图表符号直接编辑Plots对象。在这种情况下'p [1] [:xaxis] [:mirror] = true;显示(p)'。 display()对于任何要显示的图的更新都是必不可少的。 –
我知道'p'是一个'Plots'对象,但它似乎在'p.o'中包装了至少部分功能性的'PyPlot'对象,请参阅我的更新问题以获得解决方法。当然,如果可能的话,应该使用'Plots'接口,就像在这个例子中一样,但是有时我只知道如何在'PyPlot'中做出特定的改变。因此,我希望在绘图的90%完成后,将控制完全交给'PyPlot'(当使用'pyplot'后端时)。 – tim
非常令人印象深刻的黑客行为:-) –