5

我正在使用绘图图绘制大量数据的比较。描述每一行的字符串往往会变长,所以我需要将它们设为多行。然而,有很多情节,传说可能会跑出屏幕。我想将图例分成两列。有没有办法在情节中做到这一点?看看help(plotly.graph_objs.Legend)matplotlib 没有 ncol 或类似的参数,我在 plotly 文档中找不到任何对此的引用。

这是一些示例代码:

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)
4

2 回答 2

5

不幸的是,plotly 还不支持多列图例。

一种解决方法是使用注释。考虑,

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')

这会产生https://plot.ly/~etpinard/2192/

于 2015-03-23T14:06:52.527 回答
3

定位对我有用。

fig.update_layout(
xaxis_range=['2018-05-30','2020-05-31'],
legend=dict(x=-0.01, y=-0.9),
legend_orientation="h")

当我通过 x 轴更改图例的位置时,负值也会影响图例的列。

于 2020-06-21T08:14:33.217 回答