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
非常令人印象深刻的黑客行爲:-) –