我希望能够在以下代码中为图例添加标题。但是,看看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')
答案 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)
备注:强>
您需要使用此方法为注释定义x
和y
位置,以用于不同的图例。
您可以在text
属性中使用html(例如:text='Legend Title<br>kinda lengthy',
)
以前的尝试:
另一种方法是创建图例并使用注释将标题添加到图例中。如果您不在可编辑模式下使用图表。所以在下面的例子中,图例设置为x = 0和y = 1,因为我希望我的图例标题高于我的实际图例,我将注释位置设置为x = 0,y = 1.5。需要将x-ref和y-ref设置为纸张。这将给出一个很好的注释
代码:
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'})