2017-09-10 5 views
0

J'utilise Plots.jl avec le backend GR.Plots.jl: tracés à l'intérieur du cycle

Pour tout, je ne peux pas sembler pouvoir tracer! l'intérieur d'une boucle for:

using Plots 
fn(m,x) = m*x 
plot([0, 10], [fn(1, 0), fn(1, 10)]) 
for m in 2:4 
    plot!([0, 10], [fn(m, 0), fn(m, 10)]) 
end 

plot inside loop

Étrangement, la même chose sans utiliser un cycle fonctionne:

using Plots 
fn(m,x) = m*x 
plot([0, 10], [fn(1, 0), fn(1, 10)]) 
plot!([0, 10], [fn(2, 0), fn(2, 10)]) 
plot!([0, 10], [fn(3, 0), fn(3, 10)]) 
plot!([0, 10], [fn(4, 0), fn(4, 10)]) 

plot without loop

Répondre

2

C'est parce que lui-même complote se produit lorsque l'objet Plot est renvoyé à la console, qui appelle implicitement la fonction Base.display. La méthode display sur un objet Plot génère le tracé que vous voyez. Les objets générés dans un cycle for ne sont pas automatiquement renvoyés à la console, ce qui signifie que vous ne pouvez pas voir le tracé; mais vous pouvez les afficher en appelant explicitement display:

using Plots 
fn(m,x) = m*x 
plot([0, 10], [fn(1, 0), fn(1, 10)]) 
for m in 2:4 
    display(plot!([0, 10], [fn(m, 0), fn(m, 10)])) 
end 

ou

p = plot([0, 10], [fn(1, 0), fn(1, 10)]) 
for m in 2:4 
    plot!(p, [0, 10], [fn(m, 0), fn(m, 10)]) 
end 
p