Python 基于变量值的自定义绘图标记

Python 基于变量值的自定义绘图标记,python,plotly,Python,Plotly,我使用下面的代码在Python中创建了一个简单的绘图折线图。我有两个变量(在代码的底部): ctime仅使用金额中每个元素的当前时间;有10次 金额为0-1000之间的一组金额;这是十个数量 我想按以下方式为打印标记上色: 金额不足300元;该值的特定标记将为绿色 金额在300至400之间;该值的特定标记将为黄色 金额大于400;该值的特定标记将为红色 有什么方法可以为它构建一个条件类型处理程序吗 layout = Layout( title='Current Amount',

我使用下面的代码在Python中创建了一个简单的绘图折线图。我有两个变量(在代码的底部):

ctime仅使用金额中每个元素的当前时间;有10次 金额为0-1000之间的一组金额;这是十个数量

我想按以下方式为打印标记上色:

金额不足300元;该值的特定标记将为绿色 金额在300至400之间;该值的特定标记将为黄色 金额大于400;该值的特定标记将为红色

有什么方法可以为它构建一个条件类型处理程序吗

layout = Layout(
    title='Current Amount',
    titlefont=Font(
        family='"Open sans", verdana, arial, sans-serif',
        size=17,
        color='#444'
    ),
    font=Font(
        family='"Open sans", verdana, arial, sans-serif',
        size=12,
        color='#444'
    ),
    showlegend=True,
    autosize=True,
    width=803,
    height=566,
    xaxis=XAxis(
        title='Time',
        titlefont=Font(
            family='"Open sans", verdana, arial, sans-serif',
            size=14,
            color='#444'
        ),
        range=[1418632334984.89, 1418632334986.89],
        domain=[0, 1],
        type='date',
        rangemode='normal',
        autorange=True,
        showgrid=False,
        zeroline=False,
        showline=True,
        autotick=True,
        nticks=0,
        ticks='inside',
        showticklabels=True,
        tick0=0,
        dtick=1,
        ticklen=5,
        tickwidth=1,
        tickcolor='#444',
        tickangle='auto',
        tickfont=Font(
            family='"Open sans", verdana, arial, sans-serif',
            size=12,
            color='#444'
        ),
        mirror='allticks',
        linecolor='rgb(34,34,34)',
        linewidth=1,
        anchor='y',
        side='bottom'
    ),
    yaxis=YAxis(
        title='GHI (W/m2)',
        titlefont=Font(
            family='"Open sans", verdana, arial, sans-serif',
            size=14,
            color='#444'
        ),
        range=[-5.968375815056313, 57.068375815056314],
        domain=[0, 1],
        type='linear',
        rangemode='normal',
        autorange=True,
        showgrid=False,
        zeroline=False,
        showline=True,
        autotick=True,
        nticks=0,
        ticks='inside',
        showticklabels=True,
        tick0=0,
        dtick=1,
        ticklen=5,
        tickwidth=1,
        tickcolor='#444',
        tickangle='auto',
        tickfont=Font(
            family='"Open sans", verdana, arial, sans-serif',
            size=12,
            color='#444'
        ),
        exponentformat='B',
        showexponent='all',
        mirror='allticks',
        linecolor='rgb(34,34,34)',
        linewidth=1,
        anchor='x',
        side='left'
    ),
    legend=Legend(
        x=1,
        y=1.02,
        traceorder='normal',
        font=Font(
            family='"Open sans", verdana, arial, sans-serif',
            size=12,
            color='#444'
        ),
        bgcolor='rgba(255, 255, 255, 0.5)',
        bordercolor='#444',
        borderwidth=0,
        xanchor='left',
        yanchor='auto'
    )
)


new_data = Scatter(x=ctime, y=amount)
data = Data( [ new_data ] )

因此,对于您的用例,您需要使用折线图下的属性
marker.color
,该属性在正式文档中给出

颜色(颜色)
设置标记颜色。它接受特定的颜色或映射到 相对于数组的最大值和最小值或相对 到
cmin
cmax
(如果设置)

阅读更多

下面是一个简单的工作示例,演示您的用例,请将其应用到您的解决方案中,并让我知道您的问题是否得到解决

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs,init_notebook_mode,plot,iplot
init_notebook_mode(connected=True)

x = [1,2,3,4,5,6,7,8,9]
y = [100,200,300,400,500,600,700,800,900]

# function below sets the color based on amount
def SetColor(x):
    if(x < 300):
        return "green"
    elif(x >= 300 | x <= 400):
        return "yellow"
    elif(x > 400):
        return "red"

# Create a trace
trace = go.Scatter(
    x = x,
    y = y,
    marker = dict(color=list(map(SetColor, y)))
)

iplot([trace], filename='basic-line')
导入matplotlib.pyplot作为plt
作为pd进口熊猫
将numpy作为np导入
导入plotly.graph_objs作为go
从plotly.offline导入下载\u plotlyjs,初始化\u笔记本\u模式,绘图,iplot
初始笔记本模式(已连接=真)
x=[1,2,3,4,5,6,7,8,9]
y=[100200300400500600700800900]
#下面的函数根据数量设置颜色
def SetColor(x):
如果(x<300):
返回“绿色”
elif(x>=300 | x 400):
返回“红色”
#创建跟踪
trace=go.Scatter(
x=x,
y=y,
marker=dict(color=list(map(SetColor,y)))
)
iplot([trace],filename='basic-line')
输出:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import plotly.graph_objs as go
from plotly.offline import download_plotlyjs,init_notebook_mode,plot,iplot
init_notebook_mode(connected=True)

x = [1,2,3,4,5,6,7,8,9]
y = [100,200,300,400,500,600,700,800,900]

# function below sets the color based on amount
def SetColor(x):
    if(x < 300):
        return "green"
    elif(x >= 300 | x <= 400):
        return "yellow"
    elif(x > 400):
        return "red"

# Create a trace
trace = go.Scatter(
    x = x,
    y = y,
    marker = dict(color=list(map(SetColor, y)))
)

iplot([trace], filename='basic-line')