【问题标题】:Plotly: Plotly express area chart with a single color for fill and linePlotly:用单色填充和线条绘制面积图
【发布时间】:2021-06-04 20:03:06
【问题描述】:

您好,我试图弄清楚如何在每个国家/地区仅使用一种颜色 - 填充颜色。以下示例给出了每个国家/地区的透明色和较深颜色的混合。我只希望一种颜色。感谢您的帮助

import plotly
#import plotly.graph_objects as go
import plotly.express as px
df = px.data.gapminder()
fig = px.area(df, x="year", y="pop", color="country",
          groupnorm='fraction')
plotly.io.write_image(fig, file='areatest.png', format='png')

【问题讨论】:

  • 我认为没有 plotly.express 来控制填充。这是一个无填充设置。fig.update_traces(fill='none') 请参考this。

标签: python colors plotly


【解决方案1】:

px.area 没有任何参数可以直接为您提供单一颜色。但这不应该阻止你。只需使用:

fig.for_each_trace(lambda trace: trace.update(fillcolor = trace.line.color))

...得到:

...而不是默认结果:

完整代码:

import plotly
import plotly.express as px
df = px.data.gapminder()
df = df[df['continent']=='Americas']
fig = px.area(df, x="year", y="pop", color="country",
          groupnorm='fraction')
fig.for_each_trace(lambda trace: trace.update(fillcolor = trace.line.color))
fig.show()

一些细节:

px.area 将为与color 参数关联的每一行分配一种颜色,然后将该颜色的部分透明版本应用于相应的区域/填充。如果您运行fig.show,您可以检查第一个类别的颜色:

Scatter({
    'fillcolor': '#636efa',
    'groupnorm': 'fraction',
    'hovertemplate': 'country=Argentina<br>year=%{x}<br>pop=%{y}<extra></extra>',
    'legendgroup': 'Argentina',
    'line': {'color': '#636efa'},

在这里你只能看到'line': {'color': '#636efa'},而fillcolor 无处可寻无疑会有点令人困惑。但是如果你使用fig.full_figure_for_development,你可以看到实际上传递给javascript的填充颜色是'rgba(99, 110, 250, 0.5)':

Scatter({
    'connectgaps': False,
    'error_x': {'visible': False},
    'error_y': {'visible': False},
    'fill': 'tonexty',
    'fillcolor': 'rgba(99, 110, 250, 0.5)',

这正是您在运行时要覆盖的内容:

fig.for_each_trace(lambda trace: trace.update(fillcolor = trace.line.color))

【讨论】:

  • 哇,一个超级容易实现的解决方案,谢谢!!!看来你对 plotly 很熟悉。
猜你喜欢
  • 2023-01-17
  • 1970-01-01
  • 2015-09-28
  • 2019-08-09
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2016-06-15
  • 2014-08-11
相关资源
最近更新 更多