Альтаир - Ареаплот с разными цветами для негатива и позитива - PullRequest
0 голосов
/ 09 ноября 2019

У меня в панде есть столбец DataFrames с положительными и отрицательными значениями, мне нужно сделать график площади с разными цветами для положительной и отрицательной оси Y.

Пока я не могу этого сделатьс альтернативным условием

brush = alt.selection(type='interval', encodings=['x'])

upper = alt.Chart(yData['plotY'].fillna(0).reset_index()[24000:26000],
                  title = '_name').mark_area().encode(x = alt.X('{0}:T'.format(yData['plotY'].index.name),
                                                                scale = alt.Scale(domain=brush)),
                                                      y = 'plotY',
#                                                       color=alt.condition(
#                                                             alt.datum.plotY > 0,
#                                                             alt.value("steelblue"),  # The positive color
#                                                             alt.value("orange")  # The negative color
#                                                         ),
                                                      tooltip=['plotY']).properties(width = 700,
                                                                                  height = 230)

lower = upper.copy().properties(
    height=20
).add_selection(brush)

p = alt.vconcat(upper, lower).configure_concat(spacing=0)
p

Graph

Как сделать график с разными цветами для положительного и отрицательного?

1 Ответ

1 голос
/ 09 ноября 2019

Вы можете сделать что-то вроде этого:

import altair as alt
import pandas as pd
import numpy as np

x = np.linspace(0, 100, 1000)
y = np.sin(x)
df = pd.DataFrame({'x': x, 'y': y})

alt.Chart(df).transform_calculate(
    negative='datum.y < 0'
).mark_area().encode(
    x='x',
    y=alt.Y('y', impute={'value': 0}),
    color='negative:N'
)

enter image description here

Некоторые примечания:

  • мыиспользуйте вычисленную цветовую кодировку, а не цветовое условие, потому что кодировка фактически разделит данные на две группы, что необходимо для меток области (метки области, в отличие от меток точек, рисуют один элемент диаграммы для каждой группы данных и одинэлемент диаграммы не может иметь несколько цветов)

  • Аргумент impute для y важен, поскольку он говорит каждой группе обрабатывать значение как ноль, если оно не определено, а другая группа имеет значениеопределены. Это предотвращает странные артефакты, когда между точками в группе проводится прямая линия.

...