Plotly:如何在指定阈值的折线图上显示不同的颜色段? [英] Plotly: How to display different color segments on a line chart for specified thresholds?

查看:70
本文介绍了Plotly:如何在指定阈值的折线图上显示不同的颜色段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个多线图,显示随时间增加的百分比.我想在我的代码中设置一个阈值来设置上限和下限.如果线条超出这些范围,我希望折线图的特定部分与其父部分的颜色不同.

I have a multi-line graph that displays percent increase over time. I'd like to set a threshold in my code to have an upper and lower bound. If the line falls outside these bounds, I'd like that specific part of the line graph to be a different color than its parent.

这就是我正在做的:

import plotly.express as px
import plotly.graph_objects as go



fig = px.line(df14, x = "Date", y = "Percent", color = "POD", 
          title = "POD Growth in Percentage (US)", 
          labels = {"Percent": "Percent Growth"})

fig.update_layout(
font_family="Arial",
font_color="black",
title_font_family="Arial",
title_font_color="black",
legend_title_font_color="black"                                           #style the text (legend, title etc)
)


fig.update_xaxes(title_font_family="Arial")                               #style ance center title
fig.update_layout(
title={
    'text': "POD Growth Percentage in US (Line Graph)",
    'y':0.9,
    'x':0.5,
    'xanchor': 'center',
    'yanchor': 'top'})


fig.update_traces(mode='markers+lines')                                    #add dots to line

fig.show()

这是视觉效果:

让我放大一行以更好地解释:

我想为每个 POD 设置一个阈值,并且如果线条高于或低于此阈值,线条的该部分的颜色将不同.例如:

I would like a threshold set for each POD, and if the line goes above or below this threshold, the color will be different for that part of the line graph. For instance:

POD IAD 的上限可能是 5,IAD 的下限可能是 0.任何大于 5 或​​小于 0 的值都以特定颜色突出显示.

The upper bound for POD IAD may be 5 and the lower bound for IAD may be 0. Any value that is over 5 , or below 0, show be highlighted a specific color.

POD SJC 的上限可能是 10,SJC 的下限可能是 3任何大于 10 或小于 3 的值都应以特定颜色突出显示.

The upper bound for POD SJC may be 10 and the lower bound for SJC may be 3 Any value that is over 10, or below 3, should be highlighted a specific color.

我希望每个 POD 的阈值

请看下面:

线条中突出显示的黄色部分反映了折线图超出或降低了设定阈值的位置.使用 Plotly 可以做到这一点吗?

The highlighted yellow parts of the line reflect where the line graph has exceeded or decreased a set threshold. Is this possible to do this using Plotly?

这是原始数据示例: 更新:

    POD      Start      End         Diff        Percent     Date        
    IAD     4/1/2019    5/1/2019    160.4279    11.10809    04-01-2019 to 05-01-2019
    IAD     5/1/2019    6/1/2019    136.0248    8.476798    05-01-2019 to 06-01-2019
    IAD     6/1/2019    7/1/2019    174.0513    9.998946    06-01-2019 to 07-01-2019
    IAD     7/1/2019    8/1/2019    112.0424    5.851551    07-01-2019 to 08-01-2019
    IAD     8/1/2019    9/1/2019    141.8488    6.998691    08-01-2019 to 09-01-2019
    IAD     9/1/2019    10/1/2019   103.5522    4.774984    09-01-2019 to 10-01-2019
    IAD     10/1/2019   11/1/2019   125.6087    5.528085    10-01-2019 to 11-01-2019
    IAD     11/1/2019   12/1/2019   145.2591    6.058016    11-01-2019 to 12-01-2019
    IAD     12/1/2019   1/1/2020    115.5121    4.542251    12-01-2019 to 01-01-2020
    IAD     1/1/2020    2/1/2020    185.7191    6.985673    01-01-2020 to 02-01-2020
    IAD     2/1/2020    3/1/2020    126.7386    4.455896    02-01-2020 to 03-01-2020
    IAD     3/1/2020    4/1/2020    231.3461    7.786734    03-01-2020 to 04-01-2020
    IAD     4/1/2020    5/1/2020    97.02587      3.02981   04-01-2020 to 05-01-2020
    IAD     5/1/2020    6/1/2020    42.85235      1.298792  05-01-2020 to 06-01-2020
    IAD     6/1/2020    7/1/2020    124.666    3.729997     06-01-2020 to 07-01-2020
    IAD     7/1/2020    8/1/2020    357.9974    10.32609    07-01-2020 to 08-01-2020
    IAD     8/1/2020    9/1/2020    490.9587      12.8358   08-01-2020 to 09-01-2020
    IAD     9/1/2020    10/1/2020   204.5478    4.739428    09-01-2020 to 10-01-2020
    IAD     10/1/2020   11/1/2020   287.6025    6.362292    10-01-2020 to 11-01-2020
   SJCtest  4/1/2019    5/1/2019    12.38486    5.780551    04-01-2019 to 05-01-2019
   SJCtest  5/1/2019    6/1/2019    -2.61735    -1.15487    05-01-2019 to 06-01-2019
   SJCtest  6/1/2019    7/1/2019    -5.6187    -2.50814     06-01-2019 to 07-01-2019
   SJCtest  7/1/2019    8/1/2019    3.204252    1.467153    07-01-2019 to 08-01-2019
   SJCtest  8/1/2019    9/1/2019    -25.3782    -11.4521    08-01-2019 to 09-01-2019
   SJCtest  9/1/2019    10/1/2019   -10.9717    -5.59137    09-01-2019 to 10-01-2019

更新原始数据

> {'Unnamed: 0': {0: 1,   1: 2,   2: 3,   3: 4,   4: 5,   5: 6,   6: 7, 
> 7: 8,   8: 9,   9: 10,   10: 11,   11: 12,   12: 13,   13: 14,   14:
> 15,   15: 16,   16: 17,   17: 18,   18: 19,   19: 21,   20: 22,   21:
> 23,   22: 24,   23: 25,   24: 26,   25: 27,   26: 28,   27: 29,   28:
> 30,   29: 31,   30: 32,   31: 33,   32: 34,   33: 35,   34: 36,   35:
> 37,   36: 38,   37: 40,   38: 41,   39: 42,   40: 43,   41: 44,   42:
> 45,   43: 46,   44: 47,   45: 48,   46: 49,   47: 50,   48: 51,   49:
> 52,   50: 53,   51: 54,   52: 55,   53: 56,   54: 57,   55: 58,   56:
> 60,   57: 61,   58: 62,   59: 63,   60: 64,   61: 65,   62: 66,   63:
> 67,   64: 68,   65: 69,   66: 70,   67: 71,   68: 72,   69: 73,   70:
> 74,   71: 75,   72: 76,   73: 77,   74: 78,   75: 80,   76: 81,   77:
> 82,   78: 83,   79: 84,   80: 85,   81: 86,   82: 87,   83: 88,   84:
> 89,   85: 90,   86: 91,   87: 92,   88: 93,   89: 94,   90: 95,   91:
> 96,   92: 97,   93: 98,   94: 100,   95: 101,   96: 102,   97: 103,  
> 98: 104,   99: 105,   100: 106,   101: 107,   102: 108,   103: 109,  
> 104: 110,   105: 111,   106: 112,   107: 113,   108: 114,   109: 115, 
> 110: 116,   111: 117,   112: 118,   113: 120,   114: 121,   115: 122, 
> 116: 123,   117: 124,   118: 125,   119: 126,   120: 127,   121: 128, 
> 122: 129,   123: 130,   124: 131,   125: 132,   126: 133,   127: 134, 
> 128: 135,   129: 136,   130: 137,   131: 138,   132: 140,   133: 141, 
> 134: 142,   135: 143,   136: 144,   137: 145,   138: 146,   139: 147, 
> 140: 148,   141: 149,   142: 150,   143: 151,   144: 152,   145: 153, 
> 146: 155,   147: 156,   148: 157,   149: 158,   150: 159,   151: 160, 
> 152: 161,   153: 162,   154: 163,   155: 164,   156: 165,   157: 166, 
> 158: 167,   159: 168,   160: 169,   161: 170,   162: 171,   163: 172, 
> 164: 173},  'POD': {0: 'IAD ',   1: 'IAD ',   2: 'IAD ',   3: 'IAD ', 
> 4: 'IAD ',   5: 'IAD ',   6: 'IAD ',   7: 'IAD ',   8: 'IAD ',   9:
> 'IAD ',   10: 'IAD ',   11: 'IAD ',   12: 'IAD ',   13: 'IAD ',   14:
> 'IAD ',   15: 'IAD ',   16: 'IAD ',   17: 'IAD ',   18: 'IAD ',   19:
> 'SJCtest ',   20: 'SJCtest ',   21: 'SJCtest ',   22: 'SJCtest ',  
> 23: 'SJCtest ',   24: 'SJCtest ',   25: 'SJCtest ',   26: 'SJCtest ', 
> 27: 'SJCtest ',   28: 'SJCtest ',   29: 'SJCtest ',   30: 'SJCtest ', 
> 31: 'SJCtest ',   32: 'SJCtest ',   33: 'SJCtest ',   34: 'SJCtest ', 
> 35: 'SJCtest ',   36: 'SJCtest ',   37: 'SJCtest2 ',   38: 'SJCtest2
> ',   39: 'SJCtest2 ',   40: 'SJCtest2 ',   41: 'SJCtest2 ',   42:
> 'SJCtest2 ',   43: 'SJCtest2 ',   44: 'SJCtest2 ',   45: 'SJCtest2 ', 
> 46: 'SJCtest2 ',   47: 'SJCtest2 ',   48: 'SJCtest2 ',   49: 'SJCtest2
> ',   50: 'SJCtest2 ',   51: 'SJCtest2 ',   52: 'SJCtest2 ',   53:
> 'SJCtest2 ',   54: 'SJCtest2 ',   55: 'SJCtest2 ',   56: 'SJCtest3 ', 
> 57: 'SJCtest3 ',   58: 'SJCtest3 ',   59: 'SJCtest3 ',   60: 'SJCtest3
> ',   61: 'SJCtest3 ',   62: 'SJCtest3 ',   63: 'SJCtest3 ',   64:
> 'SJCtest3 ',   65: 'SJCtest3 ',   66: 'SJCtest3 ',   67: 'SJCtest3 ', 
> 68: 'SJCtest3 ',   69: 'SJCtest3 ',   70: 'SJCtest3 ',   71: 'SJCtest3
> ',   72: 'SJCtest3 ',   73: 'SJCtest3 ',   74: 'SJCtest3 ',   75:
> 'SJCtest4 ',   76: 'SJCtest4 ',   77: 'SJCtest4 ',   78: 'SJCtest4 ', 
> 79: 'SJCtest4 ',   80: 'SJCtest4 ',   81: 'SJCtest4 ',   82: 'SJCtest4
> ',   83: 'SJCtest4 ',   84: 'SJCtest4 ',   85: 'SJCtest4 ',   86:
> 'SJCtest4 ',   87: 'SJCtest4 ',   88: 'SJCtest4 ',   89: 'SJCtest4 ', 
> 90: 'SJCtest4 ',   91: 'SJCtest4 ',   92: 'SJCtest4 ',   93: 'SJCtest4
> ',   94: 'SJCtest5 ',   95: 'SJCtest5 ',   96: 'SJCtest5 ',   97:
> 'SJCtest5 ',   98: 'SJCtest5 ',   99: 'SJCtest5 ',   100: 'SJCtest5 ',
> 101: 'SJCtest5 ',   102: 'SJCtest5 ',   103: 'SJCtest5 ',   104:
> 'SJCtest5 ',   105: 'SJCtest5 ',   106: 'SJCtest5 ',   107: 'SJCtest5
> ',   108: 'SJCtest5 ',   109: 'SJCtest5 ',   110: 'SJCtest5 ',   111:
> 'SJCtest5 ',   112: 'SJCtest5 ',   113: 'SJCtest6 ',   114: 'SJCtest6
> ',   115: 'SJCtest6 ',   116: 'SJCtest6 ',   117: 'SJCtest6 ',   118:
> 'SJCtest6 ',   119: 'SJCtest6 ',   120: 'SJCtest6 ',   121: 'SJCtest6
> ',   122: 'SJCtest6 ',   123: 'SJCtest6 ',   124: 'SJCtest6 ',   125:
> 'SJCtest6 ',   126: 'SJCtest6 ',   127: 'SJCtest6 ',   128: 'SJCtest6
> ',   129: 'SJCtest6 ',   130: 'SJCtest6 ',   131: 'SJCtest6 ',   132:
> 'SJCa ',   133: 'SJCa ',   134: 'SJCa ',   135: 'SJCa ',   136: 'SJCa
> ',   137: 'SJCa ',   138: 'SJCa ',   139: 'SJCa ',   140: 'SJCa ',  
> 141: 'SJCa ',   142: 'SJCa ',   143: 'SJCa ',   144: 'SJCa ',   145:
> 'SJCa ',   146: 'SJCb ',   147: 'SJCb ',   148: 'SJCb ',   149: 'SJCb
> ',   150: 'SJCb ',   151: 'SJCb ',   152: 'SJCb ',   153: 'SJCb ',  
> 154: 'SJCb ',   155: 'SJCb ',   156: 'SJCb ',   157: 'SJCb ',   158:
> 'SJCb ',   159: 'SJCb ',   160: 'SJCb ',   161: 'SJCb ',   162: 'SJCb
> ',   163: 'SJCb ',   164: 'SJCb '},  'Start_Date': {0: '4/1/2019',  
> 1: '5/1/2019',   2: '6/1/2019',   3: '7/1/2019',   4: '8/1/2019',   5:
> '9/1/2019',   6: '10/1/2019',   7: '11/1/2019',   8: '12/1/2019',   9:
> '1/1/2020',   10: '2/1/2020',   11: '3/1/2020',   12: '4/1/2020',  
> 13: '5/1/2020',   14: '6/1/2020',   15: '7/1/2020',   16: '8/1/2020', 
> 17: '9/1/2020',   18: '10/1/2020',   19: '4/1/2019',   20: '5/1/2019',
> 21: '6/1/2019',   22: '7/1/2019',   23: '8/1/2019',   24: '9/1/2019', 
> 25: '10/1/2019',   26: '11/1/2019',   27: '12/1/2019',   28:
> '1/1/2020',   29: '2/1/2020',   30: '3/1/2020',   31: '4/1/2020',  
> 32: '5/1/2020',   33: '6/1/2020',   34: '7/1/2020',   35: '8/1/2020', 
> 36: '9/1/2020',   37: '4/1/2019',   38: '5/1/2019',   39: '6/1/2019', 
> 40: '7/1/2019',   41: '8/1/2019',   42: '9/1/2019',   43: '10/1/2019',
> 44: '11/1/2019',   45: '12/1/2019',   46: '1/1/2020',   47:
> '2/1/2020',   48: '3/1/2020',   49: '4/1/2020',   50: '5/1/2020',  
> 51: '6/1/2020',   52: '7/1/2020',   53: '8/1/2020',   54: '9/1/2020', 
> 55: '10/1/2020',   56: '4/1/2019',   57: '5/1/2019',   58: '6/1/2019',
> 59: '7/1/2019',   60: '8/1/2019',   61: '9/1/2019',   62: '10/1/2019',
> 63: '11/1/2019',   64: '12/1/2019',   65: '1/1/2020',   66:
> '2/1/2020',   67: '3/1/2020',   68: '4/1/2020',   69: '5/1/2020',  
> 70: '6/1/2020',   71: '7/1/2020',   72: '8/1/2020',   73: '9/1/2020', 
> 74: '10/1/2020',   75: '4/1/2019',   76: '5/1/2019',   77: '6/1/2019',
> 78: '7/1/2019',   79: '8/1/2019',   80: '9/1/2019',   81: '10/1/2019',
> 82: '11/1/2019',   83: '12/1/2019',   84: '1/1/2020',   85:
> '2/1/2020',   86: '3/1/2020',   87: '4/1/2020',   88: '5/1/2020',  
> 89: '6/1/2020',   90: '7/1/2020',   91: '8/1/2020',   92: '9/1/2020', 
> 93: '10/1/2020',   94: '4/1/2019',   95: '5/1/2019',   96: '6/1/2019',
> 97: '7/1/2019',   98: '8/1/2019',   99: '9/1/2019',   100:
> '10/1/2019',   101: '11/1/2019',   102: '12/1/2019',   103:
> '1/1/2020',   104: '2/1/2020',   105: '3/1/2020',   106: '4/1/2020',  
> 107: '5/1/2020',   108: '6/1/2020',   109: '7/1/2020',   110:
> '8/1/2020',   111: '9/1/2020',   112: '10/1/2020',   113: '4/1/2019', 
> 114: '5/1/2019',   115: '6/1/2019',   116: '7/1/2019',   117:
> '8/1/2019',   118: '9/1/2019',   119: '10/1/2019',   120: '11/1/2019',
> 121: '12/1/2019',   122: '1/1/2020',   123: '2/1/2020',   124:
> '3/1/2020',   125: '4/1/2020',   126: '5/1/2020',   127: '6/1/2020',  
> 128: '7/1/2020',   129: '8/1/2020',   130: '9/1/2020',   131:
> '10/1/2020',   132: '4/1/2019',   133: '5/1/2019',   134: '6/1/2019', 
> 135: '7/1/2019',   136: '8/1/2019',   137: '9/1/2019',   138:
> '10/1/2019',   139: '11/1/2019',   140: '12/1/2019',   141:
> '1/1/2020',   142: '2/1/2020',   143: '3/1/2020',   144: '4/1/2020',  
> 145: '5/1/2020',   146: '4/1/2019',   147: '5/1/2019',   148:
> '6/1/2019',   149: '7/1/2019',   150: '8/1/2019',   151: '9/1/2019',  
> 152: '10/1/2019',   153: '11/1/2019',   154: '12/1/2019',   155:
> '1/1/2020',   156: '2/1/2020',   157: '3/1/2020',   158: '4/1/2020',  
> 159: '5/1/2020',   160: '6/1/2020',   161: '7/1/2020',   162:
> '8/1/2020',   163: '9/1/2020',   164: '10/1/2020'},  'End_Date': {0:
> '5/1/2019',   1: '6/1/2019',   2: '7/1/2019',   3: '8/1/2019',   4:
> '9/1/2019',   5: '10/1/2019',   6: '11/1/2019',   7: '12/1/2019',   8:
> '1/1/2020',   9: '2/1/2020',   10: '3/1/2020',   11: '4/1/2020',   12:
> '5/1/2020',   13: '6/1/2020',   14: '7/1/2020',   15: '8/1/2020',  
> 16: '9/1/2020',   17: '10/1/2020',   18: '11/1/2020',   19:
> '5/1/2019',   20: '6/1/2019',   21: '7/1/2019',   22: '8/1/2019',  
> 23: '9/1/2019',   24: '10/1/2019',   25: '11/1/2019',   26:
> '12/1/2019',   27: '1/1/2020',   28: '2/1/2020',   29: '3/1/2020',  
> 30: '4/1/2020',   31: '5/1/2020',   32: '6/1/2020',   33: '7/1/2020', 
> 34: '8/1/2020',   35: '9/1/2020',   36: '10/1/2020',   37: '5/1/2019',
> 38: '6/1/2019',   39: '7/1/2019',   40: '8/1/2019',   41: '9/1/2019', 
> 42: '10/1/2019',   43: '11/1/2019',   44: '12/1/2019',   45:
> '1/1/2020',   46: '2/1/2020',   47: '3/1/2020',   48: '4/1/2020',  
> 49: '5/1/2020',   50: '6/1/2020',   51: '7/1/2020',   52: '8/1/2020', 
> 53: '9/1/2020',   54: '10/1/2020',   55: '11/1/2020',   56:
> '5/1/2019',   57: '6/1/2019',   58: '7/1/2019',   59: '8/1/2019',  
> 60: '9/1/2019',   61: '10/1/2019',   62: '11/1/2019',   63:
> '12/1/2019',   64: '1/1/2020',   65: '2/1/2020',   66: '3/1/2020',  
> 67: '4/1/2020',   68: '5/1/2020',   69: '6/1/2020',   70: '7/1/2020', 
> 71: '8/1/2020',   72: '9/1/2020',   73: '10/1/2020',   74:
> '11/1/2020',   75: '5/1/2019',   76: '6/1/2019',   77: '7/1/2019',  
> 78: '8/1/2019',   79: '9/1/2019',   80: '10/1/2019',   81:
> '11/1/2019',   82: '12/1/2019',   83: '1/1/2020',   84: '2/1/2020',  
> 85: '3/1/2020',   86: '4/1/2020',   87: '5/1/2020',   88: '6/1/2020', 
> 89: '7/1/2020',   90: '8/1/2020',   91: '9/1/2020',   92: '10/1/2020',
> 93: '11/1/2020',   94: '5/1/2019',   95: '6/1/2019',   96: '7/1/2019',
> 97: '8/1/2019',   98: '9/1/2019',   99: '10/1/2019',   100:
> '11/1/2019',   101: '12/1/2019',   102: '1/1/2020',   103: '2/1/2020',
> 104: '3/1/2020',   105: '4/1/2020',   106: '5/1/2020',   107:
> '6/1/2020',   108: '7/1/2020',   109: '8/1/2020',   110: '9/1/2020',  
> 111: '10/1/2020',   112: '11/1/2020',   113: '5/1/2019',   114:
> '6/1/2019',   115: '7/1/2019',   116: '8/1/2019',   117: '9/1/2019',  
> 118: '10/1/2019',   119: '11/1/2019',   120: '12/1/2019',   121:
> '1/1/2020',   122: '2/1/2020',   123: '3/1/2020',   124: '4/1/2020',  
> 125: '5/1/2020',   126: '6/1/2020',   127: '7/1/2020',   128:
> '8/1/2020',   129: '9/1/2020',   130: '10/1/2020',   131: '11/1/2020',
> 132: '5/1/2019',   133: '6/1/2019',   134: '7/1/2019',   135:
> '8/1/2019',   136: '9/1/2019',   137: '10/1/2019',   138: '11/1/2019',
> 139: '12/1/2019',   140: '1/1/2020',   141: '2/1/2020',   142:
> '3/1/2020',   143: '4/1/2020',   144: '5/1/2020',   145: '6/1/2020',  
> 146: '5/1/2019',   147: '6/1/2019',   148: '7/1/2019',   149:
> '8/1/2019',   150: '9/1/2019',   151: '10/1/2019',   152: '11/1/2019',
> 153: '12/1/2019',   154: '1/1/2020',   155: '2/1/2020',   156:
> '3/1/2020',   157: '4/1/2020',   158: '5/1/2020',   159: '6/1/2020',  
> 160: '7/1/2020',   161: '8/1/2020',   162: '9/1/2020',   163:
> '10/1/2020',   164: '11/1/2020'},  'Diff': {0: 160.427898,   1:
> 136.02479,   2: 174.05132,   3: 112.042449,   4: 141.848796,   5: 103.55216800000001,   6: 125.608671,   7: 145.259097,   8: 115.512121,   9: 185.719089,   10: 126.738628,   11: 231.346125,   12: 97.025865,  
> 13: 42.85235,   14: 124.66596000000001,   15: 357.99735400000003,  
> 16: 490.958654,   17: 204.54779299999998,   18: 287.602512,   19:
> 12.384862,   20: -2.6173490000000004,   21: -5.618695,   22: 3.204252,   23: -25.378199,   24: -10.971694,   25: 4.3095989999999995,   26:
> -18.804298,   27: 2.172899,   28: -13.781198000000002,   29: -41.914787,   30: -54.478880000000004,   31: -12.569756,   32: 5.212716,   33: -8.354158,   34: -24.797067000000002,   35: -15.030110999999998,   36: -6.733579,   37: 20.515503,   38: 16.911068,   39: -3.20907,   40: -6.310559,   41: -28.37903,   42: -2.468109,   43: 17.733227,   44: -7.246225999999999,   45: 9.816127,   46: -27.043909000000003,   47: -14.444707000000001,   48: -16.315007, 
> 49: -13.173909,   50: 3.065297,   51: -38.023148,   52:
> -17.331557999999998,   53: -79.566677,   54: -9.81724,   55: -14.70161,   56: 0.7713479999999999,   57: 1.438835,   58: 2.093475,   59: 15.108785999999998,   60: -30.160431,   61: -4.704619999999999,  
> 62: -11.864922,   63: 8.38772,   64: -9.329917,   65:
> -13.411660999999999,   66: -23.234234,   67: -30.517737,   68: -4.082799,   69: -0.431963,   70: -17.669752,   71: -29.476111,   72: -39.368627000000004,   73: -10.156292,   74: -5.152712999999999,   75: 14.799759,   76: 24.846001,   77: 1.522557,   78: 29.085378000000002,   79: 17.490861,   80: 9.210548,   81: 5.272687,   82: -34.114118,   83:
> -14.522017000000002,   84: 0.977517,   85: 13.740992000000002,   86: -46.837142,   87: -35.071144,   88: 31.125302,   89: -6.35655,   90: -76.485238,   91: -30.657497999999997,   92: -3.9887309999999996,   93: 10.158892999999999,   94: 13.419127,   95: 5.169942,   96:
> -1.2159360000000001,   97: -14.750085,   98: 2.939289,   99: 7.890761,   100: -17.168810999999998,   101: -4.825164,   102: -23.056132,   103:
> -21.905035,   104: -11.41048,   105: -14.285372,   106: -8.342461,   107: 12.303987,   108: 10.871853999999999,   109: 28.386903000000004, 
> 110: -44.330884999999995,   111: 16.979916,   112: 19.051773999999998,
> 113: 10.106931,   114: -5.156007,   115: 4.943011,   116: -3.461768,  
> 117: 4.1415239999999995,   118: 6.816288,   119: 2.135951,   120:
> -13.823120000000001,   121: -10.989626,   122: 0.418397,   123: -18.981256,   124: 11.320344,   125: 10.697455999999999,   126: -10.048842,   127: -6.781886999999999,   128: 1.679831,   129: -14.090216,   130: 9.935841,   131: -8.609016,   132: 0.633534,   133: -0.998959,   134: -11.890945,   135: -4.731419,   136: -16.508375,   137: -6.705882000000001,   138: -4.5014970000000005,   139: 2.958923, 
> 140: -2.216122,   141: 0.555845,   142: 7.907547999999999,   143:
> -19.098307000000002,   144: 0.5591109999999999,   145: 1.6575990000000003,   146: 141.94400100000001,   147: 120.173635,   148: 142.15808700000002,   149: 185.25196,   150: 145.080391,   151:
> 153.529132,   152: 105.33828700000001,   153: 114.990931,   154: 110.346369,   155: 313.465552,   156: 183.225067,   157: 97.446786,   158: 147.22139199999998,   159: 67.11041800000001,   160: 202.904259, 
> 161: 283.446608,   162: 435.956408,   163: 138.866722,   164:
> 265.60073700000004},  'Percent': {0: 11.10808895,   1: 8.476798147,   2: 9.998946416,   3: 5.8515509020000005,   4: 6.998691053,   5:
> 4.774983768999999,   6: 5.528085128,   7: 6.058015553,   8: 4.542250752,   9: 6.985672892999999,   10: 4.455896349,   11: 7.786734158,   12: 3.0298095369999998,   13: 1.29879184,   14: 3.7299973910000004,   15: 10.32609443,   16: 12.83580027,   17: 4.7394278430000005,   18: 6.362291972,   19: 5.780550638999999,   20: -1.154871997,   21: -2.50814364,   22: 1.4671525440000002,   23: -11.45206837,   24: -5.591372156,   25: 2.3263223280000003,   26: -9.919797042999999,   27: 1.2724943000000002,   28: -7.96914578,   29: -26.336533399999997,   30: -46.46943194,   31: -20.02922699,   32: 10.38652118,   33: -15.07969942,   34: -52.70827375,   35: -67.55468889,   36: -93.27974007,   37: 9.402813387,   38: 7.084646625,   39: -1.255449187,   40: -2.500199374,   41: -11.53189369,   42: -1.133654425,   43: 8.238642233,   44: -3.110265117,   45: 4.348584722,   46: -11.48128956,   47: -6.927792359,   48: -8.407238632,   49: -7.411730457000001,   50: 1.862608372,   51: -22.68204813,   52: -13.37184892,   53: -70.86406019,   54: -30.00925321,   55: -64.20813421,   56: 0.34885011899999996,   57: 0.6484658520000001,   58: 0.937425444,   59: 6.702646341,   60: -12.53946732,   61: -2.236423138,   62:
> -5.769221736,   63: 4.328161823,   64: -4.614618367,   65: -6.954385416,   66: -12.94817733,   67: -19.53685876,   68: -3.248354565,   69: -0.35521689700000003,   70: -14.58219683,   71: -28.47831486,   72: -53.18101653,   73: -29.30350463,   74: -21.02918559,   75: 4.4530310239999995,   76: 7.157090832000001,   77: 0.409291454,   78: 7.786816239,   79: 4.344409532,   80: 2.192481078,   81: 1.2281839890000001,   82: -7.849900319,   83: -3.626278258,   84:
> 0.253279403,   85: 3.5513629,   86: -11.68991986,   87: -9.911988763,   88: 9.764667122999999,   89: -1.8167818040000001,   90: -22.26494689, 
> 91: -11.48058055,   92: -1.6874205469999999,   93: 4.371453667,   94:
> 3.693729404,   95: 1.3723787669999998,   96: -0.318404648,   97: -3.8747904839999996,   98: 0.803264717,   99: 2.139245828,   100: -4.557108588999999,   101: -1.3418922629999999,   102: -6.499190071,   103: -6.60391336,   104: -3.68326232,   105: -4.787607361,   106:
> -2.936484265,   107: 4.4619360210000005,   108: 3.7741835389999996,   109: 9.496161526,   110: -13.54370813,   111: 6.000260663,   112:
> 6.351306448,   113: 6.044575831,   114: -2.907847111,   115: 2.87121369,   116: -1.954690645,   117: 2.385137588,   118: 3.834107345,   119: 1.157091192,   120: -7.402630086,   121: -6.355712315,   122: 0.258397668,   123: -11.69241483,   124: 7.896613534,   125: 6.915983594,   126: -6.076406612,   127: -4.366230503,   128: 1.1308641259999999,   129: -9.379480147999999,   130: 7.298593929,   131: -5.89378179,   132: 0.68192986,   133:
> -1.067986868,   134: -12.84984155,   135: -5.86684522,   136: -21.74577714,   137: -11.28804499,   138: -8.54156872,   139: 6.138900437999999,   140: -4.331875908,   141: 1.1357134979999999,   142: 15.97542343,   143: -33.26897683,   144: 1.459536053,   145:
> 4.264846401000001,   146: 9.352928661,   147: 7.241180253,   148: 7.987486665,   149: 9.638910633,   150: 6.885082487999999,   151: 6.816699167,   152: 4.378551195,   153: 4.57927269,   154: 4.201896452,   155: 11.4551689,   156: 6.007535563999999,   157: 3.013993024,   158: 4.4202763439999995,   159: 1.9296724969999999,   160: 5.723796667,   161: 7.562955548,   162: 10.81435501,   163:
> 3.108563316,   164: 5.766284604},  'Date': {0: '04-01-2019 to 05-01-2019',   1: '05-01-2019 to 06-01-2019',   2: '06-01-2019 to
> 07-01-2019',   3: '07-01-2019 to 08-01-2019',   4: '08-01-2019 to
> 09-01-2019',   5: '09-01-2019 to 10-01-2019',   6: '10-01-2019 to
> 11-01-2019',   7: '11-01-2019 to 12-01-2019',   8: '12-01-2019 to
> 01-01-2020',   9: '01-01-2020 to 02-01-2020',   10: '02-01-2020 to
> 03-01-2020',   11: '03-01-2020 to 04-01-2020',   12: '04-01-2020 to
> 05-01-2020',   13: '05-01-2020 to 06-01-2020',   14: '06-01-2020 to
> 07-01-2020',   15: '07-01-2020 to 08-01-2020',   16: '08-01-2020 to
> 09-01-2020',   17: '09-01-2020 to 10-01-2020',   18: '10-01-2020 to
> 11-01-2020',   19: '04-01-2019 to 05-01-2019',   20: '05-01-2019 to
> 06-01-2019',   21: '06-01-2019 to 07-01-2019',   22: '07-01-2019 to
> 08-01-2019',   23: '08-01-2019 to 09-01-2019',   24: '09-01-2019 to
> 10-01-2019',   25: '10-01-2019 to 11-01-2019',   26: '11-01-2019 to
> 12-01-2019',   27: '12-01-2019 to 01-01-2020',   28: '01-01-2020 to
> 02-01-2020',   29: '02-01-2020 to 03-01-2020',   30: '03-01-2020 to
> 04-01-2020',   31: '04-01-2020 to 05-01-2020',   32: '05-01-2020 to
> 06-01-2020',   33: '06-01-2020 to 07-01-2020',   34: '07-01-2020 to
> 08-01-2020',   35: '08-01-2020 to 09-01-2020',   36: '09-01-2020 to
> 10-01-2020',   37: '04-01-2019 to 05-01-2019',   38: '05-01-2019 to
> 06-01-2019',   39: '06-01-2019 to 07-01-2019',   40: '07-01-2019 to
> 08-01-2019',   41: '08-01-2019 to 09-01-2019',   42: '09-01-2019 to
> 10-01-2019',   43: '10-01-2019 to 11-01-2019',   44: '11-01-2019 to
> 12-01-2019',   45: '12-01-2019 to 01-01-2020',   46: '01-01-2020 to
> 02-01-2020',   47: '02-01-2020 to 03-01-2020',   48: '03-01-2020 to
> 04-01-2020',   49: '04-01-2020 to 05-01-2020',   50: '05-01-2020 to
> 06-01-2020',   51: '06-01-2020 to 07-01-2020',   52: '07-01-2020 to
> 08-01-2020',   53: '08-01-2020 to 09-01-2020',   54: '09-01-2020 to
> 10-01-2020',   55: '10-01-2020 to 11-01-2020',   56: '04-01-2019 to
> 05-01-2019',   57: '05-01-2019 to 06-01-2019',   58: '06-01-2019 to
> 07-01-2019',   59: '07-01-2019 to 08-01-2019',   60: '08-01-2019 to
> 09-01-2019',   61: '09-01-2019 to 10-01-2019',   62: '10-01-2019 to
> 11-01-2019',   63: '11-01-2019 to 12-01-2019',   64: '12-01-2019 to
> 01-01-2020',   65: '01-01-2020 to 02-01-2020',   66: '02-01-2020 to
> 03-01-2020',   67: '03-01-2020 to 04-01-2020',   68: '04-01-2020 to
> 05-01-2020',   69: '05-01-2020 to 06-01-2020',   70: '06-01-2020 to
> 07-01-2020',   71: '07-01-2020 to 08-01-2020',   72: '08-01-2020 to
> 09-01-2020',   73: '09-01-2020 to 10-01-2020',   74: '10-01-2020 to
> 11-01-2020',   75: '04-01-2019 to 05-01-2019',   76: '05-01-2019 to
> 06-01-2019',   77: '06-01-2019 to 07-01-2019',   78: '07-01-2019 to
> 08-01-2019',   79: '08-01-2019 to 09-01-2019',   80: '09-01-2019 to
> 10-01-2019',   81: '10-01-2019 to 11-01-2019',   82: '11-01-2019 to
> 12-01-2019',   83: '12-01-2019 to 01-01-2020',   84: '01-01-2020 to
> 02-01-2020',   85: '02-01-2020 to 03-01-2020',   86: '03-01-2020 to

}}

感谢任何建议

更新

有没有办法让整行在上面显示标记点?我试过这个: mode = 'markers+lines' 但没有得到想要的结果:

Is there a way to make the full line display the marker dots on them? I have tried this: mode = 'markers+lines' but did not get the desired result:

**Update, I have figured this out:** 
fig.update_traces(mode='markers+lines')    

更新的问题:

另外,有没有办法在此处的悬停注释上添加日期和百分比标题?.我正在研究 Plotly 文档.

Also,is there a way to add the Date and Percent titles on the hover annotation here?. I am researching the Plotly docs.

推荐答案

我整理了一个建议,它应该完全符合您的要求.下图是由下面的代码示例生成的.该代码使用一个字典,其中包含不同 POD 的不同上限和下限,以及为不同 Pod 设置不同颜色的可能性:

I've put together a suggestion that should do exactly what you're asking for. The following figure is produced by the code sample below. The code uses a dictionary that contains the different upper and lower limits for your different PODs along with a possibility to set different colors for different pods:

lim = {'IAD': {'lower': 90,'upper': 350, 'color':'yellow'},
       'SJCtest': {'lower': 10,'upper': 12, 'color':'green'}}

情节

我很想先过滤你的数据框,然后根据它向图中添加新的痕迹.但我的解决方案实际上遍历每个跟踪的每个数据点,并根据上面的字典为点着色.所以不需要任何数据处理.看一看,运行一些测试,然后告诉我它是如何为您服务的.

I was tempted to filter your dataframe first, and then add new traces to the figure based on that. But my solution actually goes through each datapoint for each trace, and colors the points based on the dictionary above. So no need for any datamunging. Take a look, run a few tests, and let me know how it works out for you.

import pandas as pd
import plotly.express as px
import plotly.graph_objects as go

df = pd.DataFrame({'POD': {0: 'IAD',
                          1: 'IAD',
                          2: 'IAD',
                          3: 'IAD',
                          4: 'IAD',
                          5: 'IAD',
                          6: 'IAD',
                          7: 'IAD',
                          8: 'IAD',
                          9: 'IAD',
                          10: 'IAD',
                          11: 'IAD',
                          12: 'IAD',
                          13: 'IAD',
                          14: 'IAD',
                          15: 'IAD',
                          16: 'IAD',
                          17: 'IAD',
                          18: 'IAD',
                          19: 'SJCtest',
                          20: 'SJCtest',
                          21: 'SJCtest',
                          22: 'SJCtest',
                          23: 'SJCtest',
                          24: 'SJCtest'},
                         'Start': {0: '4/1/2019',
                          1: '5/1/2019',
                          2: '6/1/2019',
                          3: '7/1/2019',
                          4: '8/1/2019',
                          5: '9/1/2019',
                          6: '10/1/2019',
                          7: '11/1/2019',
                          8: '12/1/2019',
                          9: '1/1/2020',
                          10: '2/1/2020',
                          11: '3/1/2020',
                          12: '4/1/2020',
                          13: '5/1/2020',
                          14: '6/1/2020',
                          15: '7/1/2020',
                          16: '8/1/2020',
                          17: '9/1/2020',
                          18: '10/1/2020',
                          19: '4/1/2019',
                          20: '5/1/2019',
                          21: '6/1/2019',
                          22: '7/1/2019',
                          23: '8/1/2019',
                          24: '9/1/2019'},
                         'End': {0: '5/1/2019',
                          1: '6/1/2019',
                          2: '7/1/2019',
                          3: '8/1/2019',
                          4: '9/1/2019',
                          5: '10/1/2019',
                          6: '11/1/2019',
                          7: '12/1/2019',
                          8: '1/1/2020',
                          9: '2/1/2020',
                          10: '3/1/2020',
                          11: '4/1/2020',
                          12: '5/1/2020',
                          13: '6/1/2020',
                          14: '7/1/2020',
                          15: '8/1/2020',
                          16: '9/1/2020',
                          17: '10/1/2020',
                          18: '11/1/2020',
                          19: '5/1/2019',
                          20: '6/1/2019',
                          21: '7/1/2019',
                          22: '8/1/2019',
                          23: '9/1/2019',
                          24: '10/1/2019'},
                         'Diff': {0: 160.4279,
                          1: 136.0248,
                          2: 174.0513,
                          3: 112.0424,
                          4: 141.8488,
                          5: 103.5522,
                          6: 125.6087,
                          7: 145.2591,
                          8: 115.5121,
                          9: 185.7191,
                          10: 126.7386,
                          11: 231.3461,
                          12: 97.02587,
                          13: 42.85235,
                          14: 124.666,
                          15: 357.9974,
                          16: 490.9587,
                          17: 204.5478,
                          18: 287.6025,
                          19: 12.38486,
                          20: -2.61735,
                          21: -5.6187,
                          22: 3.204252,
                          23: -25.3782,
                          24: -10.9717},
                         'Percent': {0: 11.108089999999999,
                          1: 8.476797999999999,
                          2: 9.998946,
                          3: 5.851551000000001,
                          4: 6.998691,
                          5: 4.774984,
                          6: 5.528085,
                          7: 6.058016,
                          8: 4.542251,
                          9: 6.985672999999999,
                          10: 4.455896,
                          11: 7.786734,
                          12: 3.02981,
                          13: 1.298792,
                          14: 3.729997,
                          15: 10.326089999999999,
                          16: 12.8358,
                          17: 4.739428,
                          18: 6.362292,
                          19: 5.780551,
                          20: -1.15487,
                          21: -2.50814,
                          22: 1.4671530000000002,
                          23: -11.4521,
                          24: -5.5913699999999995},
                         'Date': {0: '04-01-2019 to 05-01-2019',
                          1: '05-01-2019 to 06-01-2019',
                          2: '06-01-2019 to 07-01-2019',
                          3: '07-01-2019 to 08-01-2019',
                          4: '08-01-2019 to 09-01-2019',
                          5: '09-01-2019 to 10-01-2019',
                          6: '10-01-2019 to 11-01-2019',
                          7: '11-01-2019 to 12-01-2019',
                          8: '12-01-2019 to 01-01-2020',
                          9: '01-01-2020 to 02-01-2020',
                          10: '02-01-2020 to 03-01-2020',
                          11: '03-01-2020 to 04-01-2020',
                          12: '04-01-2020 to 05-01-2020',
                          13: '05-01-2020 to 06-01-2020',
                          14: '06-01-2020 to 07-01-2020',
                          15: '07-01-2020 to 08-01-2020',
                          16: '08-01-2020 to 09-01-2020',
                          17: '09-01-2020 to 10-01-2020',
                          18: '10-01-2020 to 11-01-2020',
                          19: '04-01-2019 to 05-01-2019',
                          20: '05-01-2019 to 06-01-2019',
                          21: '06-01-2019 to 07-01-2019',
                          22: '07-01-2019 to 08-01-2019',
                          23: '08-01-2019 to 09-01-2019',
                          24: '09-01-2019 to 10-01-2019'}})

fig = px.line(df, x="Date", y="Diff", color = 'POD')

import plotly.graph_objects as go
included = 0

lim = {'IAD': {'lower': 90,'upper': 350, 'color':'yellow'},
       'SJCtest': {'lower': 10,'upper': 12, 'color':'green'}}

for i, d in enumerate(fig.data):
    for j, y in enumerate(d.y):
        if y < lim[d.name]['lower'] or y > lim[d.name]['upper']:
             
             if j == 0:
                fig.add_traces(go.Scatter(x=[fig.data[i]['x'][j]],
                                          y=[fig.data[i]['y'][j]],
                                          mode = 'markers',
                                          marker = dict(color=lim[d.name]['color']),
                                          name = d.name + ' threshold',
                                          legendgroup = d.name + ' threshold'))
                included = included + 1
             else:
                fig.add_traces(go.Scatter(x=[fig.data[i]['x'][j-1], fig.data[i]['x'][j]],
                                          y=[fig.data[i]['y'][j-1], fig.data[i]['y'][j]],
                                          mode = 'lines',
                                          # marker = dict(color='yellow'),
                                          line = dict(width = 6, color = lim[d.name]['color']),
                                          name = d.name + ' threshold',
                                          legendgroup = d.name + ' threshold',
                                          showlegend = False if included > 0 else True,
                                         ))
                included = included + 1
            
fig.show()

这篇关于Plotly:如何在指定阈值的折线图上显示不同的颜色段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆