如何解决Python:在Plotly的子图中共享图例 示例代码:输出:图1:图2:
我试图绘制带有两个子图的图,但是我得到了具有相同名称的单独图例。
import plotly as py
import plotly.graph_objs as go
trace0 = go.Scatter(
x=[1,2,3,4,5],y=[1,xaxis='x1',yaxis='y1',name='legend'
)
trace1 = go.Scatter(
x=[1,y=[5,1],xaxis='x2',yaxis='y2',name='legend'
)
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
)
]
)
layout = go.Layout(
xaxis1=dict(
domain=[0,0.45],),yaxis1=dict(
domain=[0.75,yaxis2=dict(
domain=[0.75,anchor="x2"
),xaxis2=dict(
domain=[0.55,showticklabels=False
)
)
fig = go.Figure(data=data,layout = layout)
iplot(fig)
我期望什么?
两个图都有一个共同的图例。当我悬停/单击图例时,我应该能够隔离痕迹(所有常见的图例都应隔离)
如果我单击图1中的“图例”,则图2中的“图例”也应隔离,因为它们具有共同的图例。
请忠告。
解决方法
听起来您想通过一个图例项来控制相关轨迹。如果我理解正确,请在下面看看。
要注意的关键属性是: legendgroup
和 showlegend
。这是指向Plotly's docs on the subject的链接。
示例代码:
import numpy as np
from plotly.offline import iplot
# Creating a dataset.
x = np.linspace(0,np.pi*2,250)
y1 = [np.sin(i) for i in x]
y2 = [np.cos(i) for i in x]
y3 = [np.sin(i) for i in x**2]
y4 = [np.cos(i) for i in x**2]
# Plot the data with grouped legends.
data = []
layout = {}
data.append({'x': x,'y': y1,'name': 'sin','legendgroup': 'sin'})
data.append({'x': x,'y': y2,'name': 'cos','legendgroup': 'cos'})
data.append({'x': x,'y': y3,'yaxis': 'y2','legendgroup': 'sin','showlegend': False})
data.append({'x': x,'y': y4,'legendgroup': 'cos','showlegend': False})
layout['xaxis1'] = {'domain': [0.00,1.00],'anchor': 'y2'}
layout['yaxis1'] = {'domain': [0.55,1.00]}
layout['yaxis2'] = {'domain': [0.00,0.45]}
iplot({'data': data,'layout': layout})
输出:
请注意,在图1中,正弦曲线和余弦曲线都显示在两个图中。然后,在图2中,我使用单个图例项关闭了两个图中的cos跟踪。
图1:
图2:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。