Python 绘图散点图标记的条件格式

Python 绘图散点图标记的条件格式,python,colors,plotly,plotly-python,Python,Colors,Plotly,Plotly Python,问题: 我有一个带有x和y值对的数据集,加上y的lower\u limit和upper\u limit值 我想在plot.ly散点图中绘制xvs.y,如果下限≤ y≤ 上限,否则为红色 我知道我可以使用2个跟踪,或者在数据框中添加一个color列。但是,我想动态生成这些颜色,并且只使用一个轨迹 示例: 考虑这个数据集: x y lower_limit upper_limit 0 1 13 10 15 1 2 13

问题:
我有一个带有
x
y
值对的数据集,加上
y
lower\u limit
upper\u limit

我想在plot.ly散点图中绘制
x
vs.
y
,如果
下限
≤ <代码>y≤ <代码>上限,否则为红色

我知道我可以使用2个跟踪,或者在数据框中添加一个
color
列。但是,我想动态生成这些颜色,并且只使用一个轨迹

示例:
考虑这个数据集:

   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)应该是绿色的,因为
下限
≤ <代码>y≤ <代码>上限(10≤ 13≤ 15) ,就像第三个一样。
但是,第二个应该是红色的,因为
y
下限

然后我想生成这个图:


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])

我建议创建一个新数组来存储颜色值,请在下面的示例中找到,该示例使用,
np.where
np.logical\u和
来形成条件比较,请让我知道这是否适合您的问题

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])
将plotly.offline作为py导入
导入plotly.graph_objs作为go
从plotly.offline导入初始笔记本模式、iplot、plot
从plotly导入工具
作为pd进口熊猫
进口numpy
初始笔记本模式(已连接=真)
数据=[
[1, 13, 10, 15],
[2, 13, 15, 20],
[3, 17, 15, 20]
]
df=pd.DataFrame(
数据,
列=['x','y','lower_limit','upper_limit']
)

#df['color']=np.where(np.logical_)和(df['lower_limit']>=df['y'],df['y']=df['y'],df['y']感谢您的回答。但是,正如问题中所述,我希望尽可能不在表中添加列。如果您这样做,两种颜色(或n种条件)的图例都不会显示,您知道该怎么做吗?