问题:
我有一个数据集,其中包含x
和y
值对,以及lower_limit
的{{1}}和upper_limit
值。
我想在plot.ly散点图中绘制y
对x
,如果y
≤lower_limit
≤{ {1}},否则为红色。
我知道我可以使用2条跟踪,或在DataFrame中添加一个y
列。但是,我想即时生成这些颜色并仅使用一条迹线。
示例:
考虑以下数据集:
upper_limit
第一个标记(color
= 1, x y lower_limit upper_limit
0 1 13 10 15
1 2 13 15 20
2 3 17 15 20
= 13)应该是绿色的,因为x
≤y
≤lower_limit
(10≤13≤ 15),就像第三个一样。
但是第二个应该是红色的,因为y
<upper_limit
。
MWE:
y
答案 0 :(得分:3)
我建议创建一个存储颜色值的新数组,请在下面的示例中使用np.where
和np.logical_and
进行条件比较,请让我知道这是否合适为您的问题!
import plotly.offline as py
import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot, plot
from plotly import tools
import pandas as pd
import numpy
init_notebook_mode(connected=True)
data = [
[1, 13, 10, 15],
[2, 13, 15, 20],
[3, 17, 15, 20]
]
df = pd.DataFrame(
data,
columns=['x', 'y', 'lower_limit', 'upper_limit']
)
#df['color'] = np.where(np.logical_and(df['lower_limit'] >= df['y'], df['y'] <= df['upper_limit']), 'green', 'red')
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=np.where(np.logical_and(df['lower_limit'] >= df['y'], df['y'] <= df['upper_limit']), 'green', 'red'),
)
)
iplot([trace])
参考: