В Stata я могу легко добавлять полосы на заднем плане, например, сигнализировать о периоде спада:
clear
set obs 2
gen year = 1990
replace year = 2000 if _n == 2
gen x = 0
replace x = 1 if _n == 2
twoway ///
(scatteri 1 `=' 1995 1 `=' 1996, bcolor(gs10) recast(area) lwidth(none)) ///
(line x year)
В результате получается растущая линия с фоновой вертикальной полосой:
В Джулии с Оводом лучшее, что я смог найти, было изобретено:
using Gadfly, DataFrames, Colors
df = DataFrame(year = [1990; 2000], x = [0; 1], color = [1; 1])
x_shade = [1995 1995 1996 1996]
y_shade = [0 1 1 0]
theme = Theme(
discrete_highlight_color = u -> ARGB(1, 1, 1, 0),
default_color = colorant"grey")
p = plot(
layer(
x = x_shade,
y = y_shade,
Geom.polygon(preserve_order = true, fill = true),
order = 1
),
layer(df,
y = "x",
x = "year",
color = "color",
Geom.line,
order = 2
),
theme
)
Результат похож на Stata:
Чтобы удалить обводку, я дал теме функцию, которая возвращает прозрачный белый цвет (как предложено в этой теме ). Мне не удалось установить заливку полосы, поэтому я установил цвет по умолчанию на серый и добавил фиктивное поле color
, чтобы изменить цвет линейного графика с серого на другой цвет. Я также дал координаты y вертикальной полосы по максимуму и минимуму данных, которые могут не совпадать с максимумом и минимумом области просмотра.
Кто-нибудь знает лучший способ?