Неуклюжий график двух наборов сезонных данных на одном графике - PullRequest
0 голосов
/ 19 июня 2019

У меня есть ряд ежемесячных данных инвентаризации с 2017 года. У меня есть инвентаризация с декабря2018 года

Я пытаюсь нанести данные инвентаризации на ежемесячно-сезонной основе, а затем наложить данные инвентаризации_прогноз с января 2015 года по декабрь 2019 года.

Датафрейм выглядит так:

enter image description here

Первый способ, которым я пытался сделать график, показывает все данные, которые я хочу, но я не могу контролировать цвет линии inventory_zj. В его цвете преобладает color=year(date):N из alt.Chart, который я настроил. Он игнорирует color='green', который я передаю mark_line()

base = alt.Chart(inv.loc['2000':].reset_index(), title=f"usa total inventory").mark_line().encode(
    x='month',
    y="inventory",
    color="year(date):N"
)

#this ignores my 'green' color instruction, and marks it the same light blue 2019 color
joe = base.mark_line(color='green').encode(
    alt.Y('inventory_zj', scale=alt.Scale(zero=False), )
)

base+joe

enter image description here

Я пытался использовать многоуровневую систему, но она совсем не работает - я не могу отобразить слой "joe"

base = alt.Chart(inv.loc['2000':].reset_index(), title=f"usa total inventory").encode(
    x='month(date)'
)

doe = base.mark_line().encode(
    alt.Y('inventory', scale=alt.Scale(zero=False), ),
    color="year(date):N"
)


joe = base.mark_line(color="green").encode(
    alt.Y('inventory_zj', scale=alt.Scale(zero=False), ),
)



#looks identical to the first example
alt.layer(
    doe, joe
).resolve_scale(
    y='shared'
).configure_axisLeft(labelColor='black').configure_axisRight(labelColor='green',titleColor='green')

#independent shows a second y-axis (which is different from the left y-axis) but no line
alt.layer(
    doe, joe
).resolve_scale(
    y='independent'
).configure_axisLeft(labelColor='black').configure_axisRight(labelColor='green',titleColor='green')

enter image description here

Я чувствую, что, должно быть, пытаюсь собрать эту схему в корне неверным образом. Я должен быть в состоянии разделить ту же левую ось Y, иметь исторические данные, раскрашенные по году, и иметь уникальный цвет для данных, прогнозируемых на 2019 год. Но, похоже, я все путаю.

1 Ответ

0 голосов
/ 19 июня 2019

Как упоминалось в документах Настройка визуализаций , существует несколько способов указать такие вещи, как цвет линии, с четко определенной иерархией: свойства меток переопределения кодировок, которые переопределяют конфигурации верхнего уровня.

В вашей диаграмме вы пишете base.mark_point(color='green'), где base содержит цветовую кодировку, которая переопределяет свойство mark. Если вы не извлекаете слой из базы (чтобы у него не было цветовой кодировки), тогда линия будет зеленой, как вы и ожидали. Примерно так:

base = alt.Chart(inv.loc['2000':].reset_index(), title=f"usa total inventory")

inventory = base.mark_line().encode(
    x='month',
    y="inventory",
    color="year(date):N"
)

joe = base.mark_line(color='green').encode(
    x='month',
    y=alt.Y('inventory_zj', scale=alt.Scale(zero=False))
)

inventory + joe
...