【问题标题】:How to change default symbol sequence in Plolty?如何更改 Plotly 中的默认符号序列?
【发布时间】:2021-11-04 11:41:43
【问题描述】:

如何更改 Plotly 中的默认符号序列?我正在尝试使用以下 MWE

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

my_template = pio.templates['ggplot2'] # Copy this template.
# Now modify some specific settings of the template.
my_template.data.scatter = [
    go.Scatter(
        marker = dict(size=22),
        symbol_sequence = ['circle', 'square', 'diamond', 'cross', 'x', 'star'],
    )
]
pio.templates.default = my_template # Set my template as default.

fig = px.line(
    data_frame = px.data.gapminder(),
    x = "year",
    y = "lifeExp",
    color = "country",
    symbol = "continent",
)

fig.show()

这会引发错误

ValueError: Invalid property specified for object of type plotly.graph_objs.Scatter: 'symbol'

我有plotly.__version__ == 5.3.1

我还注意到,在这个 MWE 中,默认标记大小由于某种原因不起作用,我插入的值被忽略了。

【问题讨论】:

  • 看起来是正确的。你能在这里提供一个示例数据集以便我调试吗?
  • 你能用marker_symbol代替symbol_sequence吗?
  • @chitown88 该代码已经失败。我现在将添加一个完整的 MWE。 @rftr marker_symbol 也失败了。
  • 你的意思是它已经失败了?
  • 如果您运行该代码,则会引发错误。

标签: python plotly default plotly-python


【解决方案1】:

creating themes你可以看到:

如果跟踪类型属性设置为包含多个跟踪的列表,则 随着更多跟踪添加到默认属性循环 图。

因此,您可以设置多个go.Scatter(),并将"diamond" 替换为symbol

symbol_template.data.scatter = [
    go.Scatter(marker=dict(symbol="diamond", size=10)),
    go.Scatter(marker=dict(symbol="square", size=10)),
    go.Scatter(marker=dict(symbol="circle", size=10)),
]

或者您可以使用具有指定序列的列表推导,如下所示:

new_sequence = ['pentagon', 'hexagram', 'star', 'diamond', 'hourglass', 'bowtie', 'square']

my_template.data.scatter = [
    go.Scatter(marker=dict(symbol=s, size=12)) for s in new_sequence
]

剧情:

完整代码:

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

my_template = pio.templates['ggplot2'] 

new_sequence = ['pentagon', 'hexagram', 'star', 'diamond', 'hourglass', 'bowtie', 'square']

my_template.data.scatter = [
    go.Scatter(marker=dict(symbol=s, size=12)) for s in new_sequence
]

pio.templates.default = my_template

df = px.data.gapminder()
df = df.tail(100)

fig = px.line(
    data_frame = df,
    x = "year",
    y = "lifeExp",
    color = "country",
    symbol = "continent",
)

fig.show()

【讨论】:

    【解决方案2】:

    浏览模板,模板本身似乎没有标记大小或顺序。为什么不直接用.update_traces()调整marker大小,把符号序列放到px.line()里面呢?

    import plotly.express as px
    import plotly.io as pio
    import plotly.graph_objects as go
    
    my_template = pio.templates['ggplot2'] # Copy this template.
    pio.templates.default = my_template # Set my template as default.
    
    fig = px.line(
        data_frame = px.data.gapminder(),
        x = "year",
        y = "lifeExp",
        color = "country",
        symbol = "continent",
        symbol_sequence = ['circle', 'square', 'diamond', 'cross', 'x', 'star']
    
    )
    
    fig.update_traces(marker=dict(size=22))
    fig.show()
    

    原文:

    添加额外参数后:

    【讨论】:

    • 看着the documentation 应该可以做我想做的事。此外,我不想手动更改我创建的每个图形中的每个属性。毕竟,这就是模板的用途。
    • 那么问题是如何更改默认符号序列。它可能不是您喜欢的解决方案,但它是解决它的解决方案。不知道为什么它被否决了。
    • 你的答案并没有改变默认的符号序列,它只是改变了一个数字的序列。
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2014-12-23
    • 1970-01-01
    • 2012-07-03
    • 2013-08-07
    相关资源
    最近更新 更多