Plotly传奇标题

时间:2017-08-07 20:33:37

标签: python plotly

我希望能够在以下代码中为图例添加标题。但是,看看docs,我认为没有办法解决这个问题。

import plotly.plotly as py
import plotly.graph_objs as go

trace0 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[1, 2, 3, 4, 5],
)

trace1 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[5, 4, 3, 2, 1],
)

data = [trace0, trace1]
fig = go.Figure(data=data)

py.iplot(fig, filename='default-legend')

6 个答案:

答案 0 :(得分:10)

<强>更新

如果没有定义图例但具有注释定位属性,请使用以下代码。

import plotly.offline as py_offline
import plotly.graph_objs as go
py_offline.init_notebook_mode()

trace0 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[1, 2, 3, 4, 5],
)

trace1 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[5, 4, 3, 2, 1],
)

data = [trace0, trace1]
layout = go.Layout(
    annotations=[
        dict(
            x=1.12,
            y=1.05,
            align="right",
            valign="top",
            text='Legend Title',
            showarrow=False,
            xref="paper",
            yref="paper",
            xanchor="center",
            yanchor="top"
        )
    ]
)
fig = go.Figure(data=data, layout = layout)

py_offline.iplot(fig)

备注:

  1. 您需要使用此方法为注释定义xy位置,以用于不同的图例。

  2. 您可以在text属性中使用html(例如:text='Legend Title<br>kinda lengthy',

  3. 以前的尝试:

    另一种方法是创建图例并使用注释将标题添加到图例中。如果您不在可编辑模式下使用图表。所以在下面的例子中,图例设置为x = 0和y = 1,因为我希望我的图例标题高于我的实际图例,我将注释位置设置为x = 0,y = 1.5。需要将x-ref和y-ref设置为纸张。这将给出一个很好的注释 plotly legend title

    代码:

    import plotly.plotly as py
    import plotly.graph_objs as go
    
    trace0 = go.Scatter(
        x=[1, 2, 3, 4, 5],
        y=[1, 2, 3, 4, 5],
    )
    
    trace1 = go.Scatter(
        x=[1, 2, 3, 4, 5],
        y=[5, 4, 3, 2, 1],
    )
    
    data = [trace0, trace1]
    layout = go.Layout(
        legend=dict(
            x=0,
            y=1,
            traceorder='normal',
            font=dict(
                family='sans-serif',
                size=12,
                color='#000'
            ),
            bgcolor='#E2E2E2',
            bordercolor='#FFFFFF',
            borderwidth=2
        ),
        annotations=[
            dict(
                x=0,
                y=1.05,
                xref='paper',
                yref='paper',
                text='Legend Title',
                showarrow=False
            )
        ]
    )
    fig = go.Figure(data=data, layout = layout)
    
    py.iplot(fig)
    

答案 1 :(得分:7)

我之前通过创建无数据跟踪

完成了这项工作
import plotly.plotly as py
import plotly.graph_objs as go

dummy_trace = go.Scatter(
    x=[None], y=[None],
    name='<b>Legend Heading</b>',
    # set opacity = 0
    line={'color': 'rgba(0, 0, 0, 0)'}
)

trace0 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[1, 2, 3, 4, 5],
)

trace1 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[5, 4, 3, 2, 1],
)

data = [dummy_trace, trace0, trace1]
fig = go.Figure(data=data)

py.iplot(fig)

答案 2 :(得分:1)

仅有轻微的添加属性name与已经提出的解决方案,

import plotly
import plotly.plotly as py
import plotly.graph_objs as go

plotly.offline.init_notebook_mode(connected=True)

trace0 = go.Scatter(
x=[1, 2, 3, 4, 5],
y=[1, 2, 3, 4, 5],
name="Data1")

data = [trace0]
layout = go.Layout(
legend=dict(
    x=0,
    y=1,
    traceorder='normal',
    font=dict(
        family='sans-serif',
        size=12,
        color='#000'
    ),
    bgcolor='#E2E2E1',
    bordercolor='#FFFFFF',
    borderwidth=2
),
annotations=[
    dict(
        x=0,
        y=1.05,
        xref='paper',
        yref='paper',
        text='Legend Title',
        showarrow=False
    )
])
fig = go.Figure(data=data, layout = layout)
plotly.offline.iplot(fig)

name属性有助于在添加自定义名称来定义的图例。

答案 3 :(得分:1)

从 plotly v4.5 开始,添加了图例标题。 您可以通过以下方式为图例添加标题 fig.update_layout(legend_title_text='Legend title')

在文档 here 中查找示例。

答案 4 :(得分:0)

通过包装袖扣与jupyter密谋很容易。

安装这些依赖项:

!pip install pandas cufflinks plotly

根据数据创建数据框架。

import pandas as pd

加载数据

x=[1, 2, 3, 4, 5]
y=[1, 2, 3, 4, 5]

将第二个y列表添加到y1

x=[1, 2, 3, 4, 5]
y1=[5, 4, 3, 2, 1]

从数据列表创建数据框

data = pd.DataFrame({"x": x, "y": y, "y1": y1}).set_index("x")

加载袖扣及其配置

import cufflinks as cf
cf.set_config_file(offline=True) 

绘制数据框

data.iplot()

您将在x轴上输入x,y在y轴上输入y1。您可以从右侧单击图例来显示和隐藏行。

参考:

答案 5 :(得分:0)

离散 数据的另一个(现在可能没有实际意义)选项是使用数据框的列标题之一作为图例标题。下面是由三个 (Geo)DataFrames 组成的区域分布图示例。

df1['Legend'] = 'Label1'
df2['Legend'] = 'Label2'
df3['Legend'] = 'Label3'
merged = df1.append(df2)
merged = df2.append(df3)

fig = px.choropleth(merged, geojson=merged.geometry, locations=merged.index, color=merged['Legend'], color_discrete_map={
    'Label1':'red',
    'Label2':'lightgrey',
    'Label3':'lightblue'})

这里是一个使用 mapbox choropleth 的例子 improvised choropleth map legend using column name