我正在使用绘图来绘制大量数据的比较。
描述每一行的字符串往往变长,所以我需要使它们成为多行。
但是,对于许多情节,图例可以在屏幕上运行。
我想将图例分成两列。
有没有办法在剧情中做到这一点?看help(plotly.graph_objs.Legend)
没有像matplotlib那样的ncol或类似的参数,我在剧情文档中找不到任何对此的引用。
以下是一些示例代码:
import numpy as np
import matplotlib.cm as cm
py.sign_in("XXX", "XXXX")
N = 10
colors=['rgba(%f,%f,%f,%f)' % tuple(c) for c in cm.rainbow((np.linspace(0,1,N)),bytes=True)]
data = []
lab = 'Long<br>Multiline<br>string<br>describing %s'
for i in range(0,N):
x = np.linspace(0,np.random.uniform(5,10),10)
y = np.linspace(1,np.random.uniform(0,1),10)
label = lab % i
d = Scatter(
x=x,y=y,
mode='lines',
name=label,text=(label,)*len(x),
xaxis='x1',yaxis='y1',
line=Line( color=colors[i]) )
data.append(d)
py.iplot(data)
答案 0 :(得分:4)
不幸的是,情节上还不支持多列传说。
一种解决方法是使用注释。考虑,
import plotly.plotly as py
from plotly.graph_objs import *
import numpy as np
import matplotlib.cm as cm
N = 10
colors=['rgba(%f,%f,%f,%f)' % tuple(c) for c in cm.rainbow((np.linspace(0,1,N)),bytes=True)]
data = []
annotations = []
lab = 'Long<br>Multiline<br>string<br>describing %s'
for i in range(0, N):
x = np.linspace(0, np.random.uniform(5, 10), 10)
y = np.linspace(1, np.random.uniform(0, 1), 10)
label = lab % i
d = Scatter(
x=x,y=y,
mode='lines',
name=label,text=(label,)*len(x),
xaxis='x1',yaxis='y1',
line=Line( color=colors[i]) )
data.append(d)
a = Annotation(
text=label,
font=Font( color=colors[i] ),
x=i, y=1,
xref='page', yref='page'
)
annotations.append(a)
layout = Layout(
showlegend=False,
annotations=annotations
)
py.plot({'data': data, 'layout': layout}, filename='multi-column-legend')
答案 1 :(得分:0)
定位对我有用。
fig.update_layout(
xaxis_range=['2018-05-30','2020-05-31'],
legend=dict(x=-0.01, y=-0.9),
legend_orientation="h")
当我通过x轴更改图例的位置时,负值也会影响图例的列。