Как добавить Legend в график при использовании пакета Gadfly.jl в Julia

Я использую Julia для обработки финансовых данных, а затем рисует графики на основе финансовых данных.

на X-оси графика Я планирую даты (в день цены) на оси Y Я планирую цены акций, MovingAverage13 и MovingAverage21

В настоящее время я использую DataFrames для построения данных

Code-

df=DataFrame(x=dates,y1=pricesClose,y2=m13,y3=m21)
l1=layer(x="x",y="y1",Geom.line,Theme(default_color=color("blue")));
l2=layer(x="x",y="y2",Geom.line,Theme(default_color=color("red")));
l3=layer(x="x",y="y3",Geom.line,Theme(default_color=color("green")));
p=plot(df,l1,l2,l3);
draw(PNG("stock.png",6inch,3inch),p)

Я получаю графы правильно, но я не могу добавить Легенду в Графе, которая показывает синюю линию для Красных линий Закрыть Цены для скользящего среднего 13 зеленая линия для скользящего среднего 21

Как добавить легенду на график?

Ответ 1

Я понимаю из комментариев в этой ссылке, что в настоящее время невозможно получить легенду для списка слоев.

Gadfly основан на Hadley Wickhams ggplot2 для R, и, таким образом, обычный шаблон состоит в том, чтобы упорядочить данные в DataFrame с дискретным столбцом для целей маркировки. В вашем случае такой подход будет выглядеть так:

x = 1:10
df1 = DataFrame(x=x, y=2x, label="double")
df2 = DataFrame(x=x, y=x.^2, label="square")
df3 = DataFrame(x=x, y=1./x, label="inverse")

df = vcat(df1, df2, df3)

p = plot(df, x="x", y="y", color="label", Geom.line,
         Scale.discrete_color_manual("blue","red", "green"))

draw(PNG("stock.png", 6inch, 3inch), p)

stock.png

Ответ 2

Теперь вы можете попробовать с помощью manual_color_key. Единственное изменение в вашем коде необходимо здесь:

p=plot(df,l1,l2,l3, Guide.ylabel("Some text"), Guide.title("My title"), Guide.manual_color_key("Legend", ["I'm blue l1", "I'm red l2", "I'm green l3"], ["blue", "red", "green"]))