Plots
jest prosty i potężny, ale czasami chciałbym mieć nieco większą kontrolę nad poszczególnymi elementami fabuły, aby dopracować jej wygląd.Dostęp do funkcji specyficznych dla backendu z działkami Julia
Czy można aktualizować obiekt wydruku bezpośrednio?
przykład dla domyślnego pyplot
backend, próbowałem
using Plots
p = plot(sin)
p.o[:axes][1][:xaxis][:set_ticks_position]("top")
ale fabuła nie zmienia. Dzwonienie pod numer p.o[:show]()
również nie pomaga.
Innymi słowy: czy istnieje sposób użycia interfejsu PyPlot
dla wykresu, który został początkowo utworzony za pomocą Plots
?
Edit:
zmian w obiekcie PyPlot
stają się widoczne (również w GUI) podczas zapisywania rysunku:
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")
Tu użyłem p.o[:axes][1] == gca()
. Trzeba ustawić top_margin=1cm
, ponieważ obszar wykresu nie jest automatycznie dopasowywany (dla mojego aktualnego dostrojenia, to nie ma znaczenia).
Działa to również dla kolejnych aktualizacji, o ile używany jest tylko interfejs PyPlot
. Na przykład, po następujących poleceń, fabuła będzie miał czerwoną prawą krawędź oprócz etykiet na górze:
gca()[:spines]["right"][:set_color]("red")
PyPlot.savefig("test.png")
Jednak, gdy stosuje się Plots
komenda jak plot!(xlabel="foo")
, wszystkie poprzednie zmiany dokonane z PyPlot
są nadpisywane (co nie jest zaskakujące).
Pozostaje pytanie, w jaki sposób zaktualizować GUI interaktywnie, bez konieczności bezpośredniego dzwonienia pod numer PyPlot.savefig
.
Można jednak edytować obiekt wydruku bezpośrednio, korzystając z notacji wykresów. W tym przypadku 'p [1] [: xaxis] [: mirror] = true; wyświetlacz (p) '. 'display()' jest niezbędne dla każdej aktualizacji wykresu do pokazania. –
Rozumiem, że 'p' jest obiektem' Plots', ale zdaje się owijać co najmniej częściowo funkcjonalny obiekt 'PyPlot' w' p.o', zobacz moje zaktualizowane pytanie na obejście tego problemu. Oczywiście, jeśli to możliwe, należy użyć interfejsu 'Plots', tak jak w tym przykładzie, ale czasami tylko wiem, jak wprowadzić konkretną zmianę w' PyPlot'. Dlatego też doceniłbym sposób na całkowite przekazanie kontroli do 'PyPlot' (przy użyciu backendu' pyplot') po tym, jak 90% wykresu zostanie wykonane w 'Plots'. – tim
Bardzo imponujące hakowanie :-) –