在 Python 中使用 Plotly 创建多个图形的模板

问题描述 投票:0回答:1

我正在尝试使用 Python 中的 Plotly 创建热图和折线图的模板。我想结合使用这个模板和plotly_white。 但是,将它们组合起来会消除我的热图的色阶颜色。

Combining my template with the plotly_white removes the color of the heatmap

The colorscale I want for my heatmap are those. I still get them by only using mytemplate

我在以下函数中定义我的模板

THEME = {
    'background_color': '#ffffff',
    'font_family': 'Roboto',
    'accent_font_family': 'Roboto Slab',
    'dark_color': '#2A2B2E',
    'pale_color': '#DFD9E2',
    'line_chart_color': 'black',
    'label_font_size': 14,
    'label_background_color': '#ffffff',
    'colorscale': 'Bluyl'
}
def create_custom_theme():
    pio.templates['mytemplate'] = go.layout.Template(
        layout=go.Layout(
            font=dict(
                family=THEME['font_family']+' , '+ THEME['accent_font_family'],
                color=THEME['dark_color']
            ),
            paper_bgcolor=THEME['background_color'],
            plot_bgcolor=THEME['background_color'],
            hoverlabel=dict(
                bgcolor=THEME['label_background_color'],
                font=dict(
                    size=THEME['label_font_size']
                )
            ),
            hovermode="closest",
            newshape=dict(
                line_color=THEME['line_chart_color']
            ),
            colorscale=dict(diverging=THEME['colorscale']), 
            xaxis=dict(
                tickangle=-45
            )
        )
    )

并将其设置为默认值,如下所示

def set_default_theme():
    pio.templates.default='mytemplate+plotly_white'

另外,我想知道是否可以在悬停模板中使用模板中定义的两个字体系列。目前,我使用 span 来避免使用模板

def get_heatmap_hover_template():
    return ('<span style="font-family: Roboto Slabk"><b>Neighborhood : </b></span>%{y}'
            +'<br><span style="font-family: Roboto Slabk"><b>Year : </b></span>%{x}</br>'
            +'<span style="font-family: Roboto Slabk"><b>Trees planted : </b></span>%{z}<extra></extra>')
python plotly visualization
1个回答
0
投票

你就快到了。这是你应该做的:

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

THEME = {
    'background_color': '#ffffff',
    'font_family': 'Roboto',
    'accent_font_family': 'Roboto Slab',
    'dark_color': '#2A2B2E',
    'pale_color': '#DFD9E2',
    'line_chart_color': 'black',
    'label_font_size': 14,
    'label_background_color': '#ffffff',
    'colorscale': 'Bluyl'
}

def create_custom_theme():
    pio.templates['mytemplate'] = go.layout.Template(
        layout=go.Layout(
            font=dict(
                family=THEME['font_family']+', '+THEME['accent_font_family'],
                color=THEME['dark_color']
            ),
            paper_bgcolor=THEME['background_color'],
            plot_bgcolor=THEME['background_color'],
            hoverlabel=dict(
                bgcolor=THEME['label_background_color'],
                font=dict(
                    size=THEME['label_font_size']
                )
            ),
            hovermode="closest",
            newshape=dict(
                line_color=THEME['line_chart_color']
            ),
            coloraxis=dict(
                colorscale=THEME['colorscale']
            ),
            xaxis=dict(
                tickangle=-45
            )
        )
    )

create_custom_theme()

def set_default_theme():
    pio.templates.default = 'mytemplate+plotly_white'

set_default_theme()

def get_heatmap_hover_template():
    return ('<span style="font-family: Roboto Slab"><b>Neighborhood : </b></span>%{y}'
            +'<br><span style="font-family: Roboto Slab"><b>Year : </b></span>%{x}</br>'
            +'<span style="font-family: Roboto Slab"><b>Trees planted : </b></span>%{z}<extra></extra>')

heatmap_data = [
    [1, 20, 30],
    [20, 1, 60],
    [30, 60, 1]
]

line_data = [1, 2, 3, 4, 5]

heatmap = go.Figure(data=go.Heatmap(
    z=heatmap_data,
    colorscale=THEME['colorscale'],
    hovertemplate=get_heatmap_hover_template()
))

line_chart = go.Figure(data=go.Scatter(
    y=line_data,
    mode='lines',
    line=dict(color=THEME['line_chart_color'])
))

heatmap.show()
line_chart.show()

要将自定义模板与

plotly_white
合并,同时保留
colorscale
,您需要确保在合并模板时不会覆盖
colorscale
设置。

enter image description here enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.