Проблема:
У меня есть набор данных с парами значений x
и y
, плюс значения lower_limit
и upper_limit
для y
.
Я хочу построить x
против y
на графике рассеивания plot.ly, и раскрасить маркер зеленым, если lower_limit
≤ y
≤ upper_limit
, иначе красным .
Я знаю, что могу использовать 2 трассировки или добавить столбец color
в DataFrame.Однако я хотел бы создать эти цвета на лету и использовать только одну трассировку.
Пример:
Рассмотрим этот набор данных:
x y lower_limit upper_limit
0 1 13 10 15
1 2 13 15 20
2 3 17 15 20
Первый маркер (x
= 1, y
= 13) должен быть зеленым, потому что lower_limit
≤ y
≤ upper_limit
(10 ≤ 13 ≤ 15), как и третий.
Однаковторой должен быть красным, потому что y
<<code>lower_limit.
Затем я хочу создать этот график:
MWE:
import pandas as pd
import plotly.graph_objs as go
import plotly.plotly as py
import plotly.offline as po
data = [
[1, 13, 10, 15],
[2, 13, 15, 20],
[3, 17, 15, 20]
]
df = pd.DataFrame(
data,
columns=['x', 'y', 'lower_limit', 'upper_limit']
)
trace = go.Scatter(
x=df['x'],
y=df['y'],
mode='markers',
marker=dict(
size=42,
# I want the color to be green if
# lower_limit ≤ y ≤ upper_limit
# else red
color='green',
)
)
po.plot([trace])