Plotly | ValueError: Invalid element(s) received for the 'symbol' property of scatter.marker. Invalid elements include: [['circle']]

Plotly | ValueError: Invalid element(s) received for the 'symbol' property of scatter.marker. Invalid elements include: [['circle']]

目标:将 symbols 分配给 marker_symbols 以创建 Plotly Figure 通过。 Dash 前端。

Documentation 部分 自定义标记符号

您可以将 strint(或转换为 str)的 list 传递给 marker_symbol:

fig = go.Figure(go.Scatter(... marker_symbol=symbols ...))

但是,在尝试此操作时出现以下错误:

Traceback (most recent call last):
  File "/home/me/PycharmProjects/linechart/linechart/app.py", line 610, in render_graph
    figure.add_trace(trace)
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 2099, in add_trace
    return self.add_traces(
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 2183, in add_traces
    data = self._data_validator.validate_coerce(data)
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/_plotly_utils/basevalidators.py", line 2680, in validate_coerce
    trace = self.get_trace_class(trace_type)(
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/graph_objs/_scatter.py", line 3286, in __init__
    self._process_kwargs(**dict(arg, **kwargs))
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 4332, in _process_kwargs
    self[k] = v
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 4859, in __setitem__
    res[prop[-1]] = value
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 4819, in __setitem__
    self._set_prop(prop, value)
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 5163, in _set_prop
    raise err
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/plotly/basedatatypes.py", line 5158, in _set_prop
    val = validator.validate_coerce(val)
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/_plotly_utils/basevalidators.py", line 609, in validate_coerce
    self.raise_invalid_elements(invalid_els[:10])
  File "/home/me/miniconda3/envs/linechart/lib/python3.9/site-packages/_plotly_utils/basevalidators.py", line 305, in raise_invalid_elements
    raise ValueError(
ValueError: 
    Invalid element(s) received for the 'symbol' property of scatter.marker
        Invalid elements include: [['circle']]

    The 'symbol' property is an enumeration that may be specified as:
      - One of the following enumeration values:
            [0, '0', 'circle', 100, '100', 'circle-open', 200, '200',
            'circle-dot', 300, '300', 'circle-open-dot', 1, '1',
            'square', 101, '101', 'square-open', 201, '201',
            'square-dot', 301, '301', 'square-open-dot', 2, '2',
            'diamond', 102, '102', 'diamond-open', 202, '202',
            'diamond-dot', 302, '302', 'diamond-open-dot', 3, '3',
            'cross', 103, '103', 'cross-open', 203, '203',
            'cross-dot', 303, '303', 'cross-open-dot', 4, '4', 'x',
            104, '104', 'x-open', 204, '204', 'x-dot', 304, '304',
            'x-open-dot', 5, '5', 'triangle-up', 105, '105',
            'triangle-up-open', 205, '205', 'triangle-up-dot', 305,
            '305', 'triangle-up-open-dot', 6, '6', 'triangle-down',
            106, '106', 'triangle-down-open', 206, '206',
            'triangle-down-dot', 306, '306', 'triangle-down-open-dot',
            7, '7', 'triangle-left', 107, '107', 'triangle-left-open',
            207, '207', 'triangle-left-dot', 307, '307',
            'triangle-left-open-dot', 8, '8', 'triangle-right', 108,
            '108', 'triangle-right-open', 208, '208',
            'triangle-right-dot', 308, '308',
            'triangle-right-open-dot', 9, '9', 'triangle-ne', 109,
            '109', 'triangle-ne-open', 209, '209', 'triangle-ne-dot',
            309, '309', 'triangle-ne-open-dot', 10, '10',
            'triangle-se', 110, '110', 'triangle-se-open', 210, '210',
            'triangle-se-dot', 310, '310', 'triangle-se-open-dot', 11,
            '11', 'triangle-sw', 111, '111', 'triangle-sw-open', 211,
            '211', 'triangle-sw-dot', 311, '311',
            'triangle-sw-open-dot', 12, '12', 'triangle-nw', 112,
            '112', 'triangle-nw-open', 212, '212', 'triangle-nw-dot',
            312, '312', 'triangle-nw-open-dot', 13, '13', 'pentagon',
            113, '113', 'pentagon-open', 213, '213', 'pentagon-dot',
            313, '313', 'pentagon-open-dot', 14, '14', 'hexagon', 114,
            '114', 'hexagon-open', 214, '214', 'hexagon-dot', 314,
            '314', 'hexagon-open-dot', 15, '15', 'hexagon2', 115,
            '115', 'hexagon2-open', 215, '215', 'hexagon2-dot', 315,
            '315', 'hexagon2-open-dot', 16, '16', 'octagon', 116,
            '116', 'octagon-open', 216, '216', 'octagon-dot', 316,
            '316', 'octagon-open-dot', 17, '17', 'star', 117, '117',
            'star-open', 217, '217', 'star-dot', 317, '317',
            'star-open-dot', 18, '18', 'hexagram', 118, '118',
            'hexagram-open', 218, '218', 'hexagram-dot', 318, '318',
            'hexagram-open-dot', 19, '19', 'star-triangle-up', 119,
            '119', 'star-triangle-up-open', 219, '219',
            'star-triangle-up-dot', 319, '319',
            'star-triangle-up-open-dot', 20, '20',
            'star-triangle-down', 120, '120',
            'star-triangle-down-open', 220, '220',
            'star-triangle-down-dot', 320, '320',
            'star-triangle-down-open-dot', 21, '21', 'star-square',
            121, '121', 'star-square-open', 221, '221',
            'star-square-dot', 321, '321', 'star-square-open-dot', 22,
            '22', 'star-diamond', 122, '122', 'star-diamond-open',
            222, '222', 'star-diamond-dot', 322, '322',
            'star-diamond-open-dot', 23, '23', 'diamond-tall', 123,
            '123', 'diamond-tall-open', 223, '223',
            'diamond-tall-dot', 323, '323', 'diamond-tall-open-dot',
            24, '24', 'diamond-wide', 124, '124', 'diamond-wide-open',
            224, '224', 'diamond-wide-dot', 324, '324',
            'diamond-wide-open-dot', 25, '25', 'hourglass', 125,
            '125', 'hourglass-open', 26, '26', 'bowtie', 126, '126',
            'bowtie-open', 27, '27', 'circle-cross', 127, '127',
            'circle-cross-open', 28, '28', 'circle-x', 128, '128',
            'circle-x-open', 29, '29', 'square-cross', 129, '129',
            'square-cross-open', 30, '30', 'square-x', 130, '130',
            'square-x-open', 31, '31', 'diamond-cross', 131, '131',
            'diamond-cross-open', 32, '32', 'diamond-x', 132, '132',
            'diamond-x-open', 33, '33', 'cross-thin', 133, '133',
            'cross-thin-open', 34, '34', 'x-thin', 134, '134',
            'x-thin-open', 35, '35', 'asterisk', 135, '135',
            'asterisk-open', 36, '36', 'hash', 136, '136',
            'hash-open', 236, '236', 'hash-dot', 336, '336',
            'hash-open-dot', 37, '37', 'y-up', 137, '137',
            'y-up-open', 38, '38', 'y-down', 138, '138',
            'y-down-open', 39, '39', 'y-left', 139, '139',
            'y-left-open', 40, '40', 'y-right', 140, '140',
            'y-right-open', 41, '41', 'line-ew', 141, '141',
            'line-ew-open', 42, '42', 'line-ns', 142, '142',
            'line-ns-open', 43, '43', 'line-ne', 143, '143',
            'line-ne-open', 44, '44', 'line-nw', 144, '144',
            'line-nw-open', 45, '45', 'arrow-up', 145, '145',
            'arrow-up-open', 46, '46', 'arrow-down', 146, '146',
            'arrow-down-open', 47, '47', 'arrow-left', 147, '147',
            'arrow-left-open', 48, '48', 'arrow-right', 148, '148',
            'arrow-right-open', 49, '49', 'arrow-bar-up', 149, '149',
            'arrow-bar-up-open', 50, '50', 'arrow-bar-down', 150,
            '150', 'arrow-bar-down-open', 51, '51', 'arrow-bar-left',
            151, '151', 'arrow-bar-left-open', 52, '52',
            'arrow-bar-right', 152, '152', 'arrow-bar-right-open']
      - A tuple, list, or one-dimensional numpy array of the above

如何声明跟踪

elif callback_triggered_by(self.customisation_tab.line_marker_button.id):
    figure = go.Figure(figure)
    figure.update_traces(marker_symbol=markers_to_plot)
    figure = self.remove_template_and_cache_figs(figure, instance_id)
    return default_return_list(n_outputs, {0: figure})
    """
    figure = go.Figure(figure)
    for trace, line_mark in zip(figure.data, markers_to_plot):
        trace.update(marker_symbol=line_mark)  # ''.join(line_mark) ineffective in 'trace'
    figure = self.remove_template_and_cache_figs(figure, instance_id)
    return default_return_list(n_outputs, {0: figure, 1: markers_to_plot})
    """
markers_to_plot = ['circle']

trace 感兴趣的键值对:'marker_symbol': (['circle'],)

{'y': [32.69230769230769, 38.333333333333336, 49.23076923076923, 53.1578947368421, 47.0, 43.0, 47.35294117647059, 61.904761904761905, 44.23076923076923, 57.69230769230769, 52.5, 42.5, 45.0, 50.0, 40.294117647058826, 32.857142857142854, 50.0, 54.11764705882353, 50.0, 52.5, 38.75, 39.0, 34.54545454545455, 39.0, 30.0, 32.5, 42.666666666666664, 45.0, 49.333333333333336, 39.285714285714285, 43.1578947368421, 50.65217391304348, 36.666666666666664, 66.25, 39.35897435897436, 42.333333333333336, 30.0, 63.1578947368421, 37.64705882352941, 46.666666666666664, 41.42857142857143, 43.84615384615385, 45.16129032258065, 46.0, 44.285714285714285, 30.526315789473685, 46.1764705882353, 40.0, 43.125, 45.0, 43.57142857142857, 43.5, 56.666666666666664, 34.09090909090909, 46.25, 33.57142857142857, 47.5, 49.166666666666664, 49.333333333333336, 34.44444444444444], 'line': {'color': '#2dd070', 'dash': 'solid', 'width': 2}, 'name': '_percent_Tumour', 'type': 'scatter', 'x': [Timestamp('2020-06-01 00:00:00'), Timestamp('2020-06-02 00:00:00'), Timestamp('2020-06-03 00:00:00'), Timestamp('2020-06-04 00:00:00'), Timestamp('2020-06-05 00:00:00'), Timestamp('2020-06-06 00:00:00'), Timestamp('2020-06-07 00:00:00'), Timestamp('2020-06-08 00:00:00'), Timestamp('2020-06-09 00:00:00'), Timestamp('2020-06-10 00:00:00'), Timestamp('2020-06-11 00:00:00'), Timestamp('2020-06-12 00:00:00'), Timestamp('2020-06-13 00:00:00'), Timestamp('2020-06-14 00:00:00'), Timestamp('2020-06-15 00:00:00'), Timestamp('2020-06-16 00:00:00'), Timestamp('2020-06-17 00:00:00'), Timestamp('2020-06-18 00:00:00'), Timestamp('2020-06-19 00:00:00'), Timestamp('2020-06-20 00:00:00'), Timestamp('2020-06-21 00:00:00'), Timestamp('2020-06-22 00:00:00'), Timestamp('2020-06-23 00:00:00'), Timestamp('2020-06-24 00:00:00'), Timestamp('2020-06-25 00:00:00'), Timestamp('2020-06-26 00:00:00'), Timestamp('2020-06-27 00:00:00'), Timestamp('2020-06-28 00:00:00'), Timestamp('2020-06-29 00:00:00'), Timestamp('2020-06-30 00:00:00'), Timestamp('2020-07-01 00:00:00'), Timestamp('2020-07-02 00:00:00'), Timestamp('2020-07-03 00:00:00'), Timestamp('2020-07-04 00:00:00'), Timestamp('2020-07-05 00:00:00'), Timestamp('2020-07-06 00:00:00'), Timestamp('2020-07-07 00:00:00'), Timestamp('2020-07-08 00:00:00'), Timestamp('2020-07-09 00:00:00'), Timestamp('2020-07-10 00:00:00'), Timestamp('2020-07-11 00:00:00'), Timestamp('2020-07-12 00:00:00'), Timestamp('2020-07-13 00:00:00'), Timestamp('2020-07-14 00:00:00'), Timestamp('2020-07-15 00:00:00'), Timestamp('2020-07-16 00:00:00'), Timestamp('2020-07-17 00:00:00'), Timestamp('2020-07-18 00:00:00'), Timestamp('2020-07-19 00:00:00'), Timestamp('2020-07-20 00:00:00'), Timestamp('2020-07-21 00:00:00'), Timestamp('2020-07-22 00:00:00'), Timestamp('2020-07-23 00:00:00'), Timestamp('2020-07-24 00:00:00'), Timestamp('2020-07-25 00:00:00'), Timestamp('2020-07-26 00:00:00'), Timestamp('2020-07-27 00:00:00'), Timestamp('2020-07-28 00:00:00'), Timestamp('2020-07-29 00:00:00'), Timestamp('2020-07-30 00:00:00')], 'mode': 'lines+markers', 'marker_symbol': (['circle'],), 'yaxis': 'y', 'opacity': 0.8, 'error_y': {'type': 'data', 'symmetric': True, 'array': None, 'color': '#2dd070', 'thickness': 2, 'width': 2}, 'marker': {'size': 6}}

失败的解决方案

trace['marker_symbol'] = (trace['marker_symbol'][0]):

'marker_symbol': ['circle', 'square']

trace['marker_symbol'] = tuple(trace['marker_symbol'][0]):

'marker_symbol': ('circle', 'square')

trace['marker_symbol'] = tuple([trace['marker_symbol'][0]]):

'marker_symbol': (['circle', 'square'],)

认为我需要:'marker_symbol': (['circle', 'square'])

错误是 ['circle'], 中的 ,,当 python 编译器解释这是元组中的列表时。

删除 , 修复了大小写。