如何在plotly的散点图中添加一条单独的线?

9
考虑以下 MWE 来利用 Python API 绘制 plotly 散点图:
import plotly.plotly as py
import plotly.graph_objs
import plotly.offline
plotly.offline.init_notebook_mode()

data = list(range(10))
trace = plotly.graph_objs.Scatter(
    x=list(range(len(data))),
    y=data
)
plotly.offline.iplot([trace])

在此输入图片描述

如果我现在想要在这个图形上添加一条(比如说)水平线怎么办?我已经阅读了文档,例如线性和散点的部分以及线状图表的部分,但是没有一个例子涵盖了如何叠加不同的图形或者简单地绘制直线和类似的形状。

一个天真的方法是将线作为第二个散点图添加,如下所示:

import plotly.plotly as py
import plotly.graph_objs
import plotly.offline
plotly.offline.init_notebook_mode()

data = list(range(10))
trace = plotly.graph_objs.Scatter(
    x=list(range(len(data))),
    y=data
)
trace_line = plotly.graph_objs.Scatter(
    x=list(range(len(data))),
    y=[4] * len(data),
    mode='lines'
)
plotly.offline.iplot([trace, trace_line])

在此输入图片描述

然而,这种方法似乎并不是最佳选择:除了需要添加一行冗长的代码外,它还需要手动“采样”直线,并且在鼠标悬停时将线高度添加到工具提示中。

有更好的方法来实现这个吗?


1
你能不能只添加另一个数据集,其中包含所有相同的值并绘制它? - Jeeter
1
@Jeeter,当然可以,看看我的编辑。我希望有比那更好的方法。例如,使用cufflinks+pandas,可以将hlinevline选项添加到iplot中以实现此目的(请参见例如此处In[43])。在仅使用plotly时,难道没有等效的方法吗? - glS
我实际上没有太多使用plotly的经验,所以我不知道。但是希望你能找到答案! - Jeeter
3个回答

11

你好,根据你的问题,我看到你需要使用Plotly的形状功能并为图表生成一条水平线。

请查看下面的代码,以执行与您在问题中展示的相同的图表。

代码:

from plotly.offline import iplot
import plotly.graph_objs as go


data = list(range(10))
trace = go.Scatter(
    x=list(range(len(data))),
    y=data
)
layout = {
    'shapes': [
        # Line Horizontal
        {
            'type': 'line',
            'x0': 0,
            'y0': 4,
            'x1': 10,
            'y1': 4,
            'line': {
                'color': 'rgb(50, 171, 96)',
                'width': 4
            },
        }
    ],
    'showlegend': True
}

fig = {
    'data': [trace],
    'layout': layout,
}


iplot(fig)

输出:

plotly shapes

其他参考:

  1. plotly形状示例

  2. plotly形状参考


这正是我要的,谢谢!顺便问一下,为什么你需要导入 cufflinksplotly.toolsdownload_plotlyjs呢? - glS
@glS 我已经编辑了我的代码,这些是从另一个单元格复制过来的,请参考更新后的代码。 - Naren Murali
我该如何在水平线上添加标签?“name”似乎无效。 - Rylan Schaeffer

6

另外,您可以使用 add_shape 方法,请参阅此处的文档。 如果添加以下代码,则可以添加与 y=4 相同的线。

fig.add_shape(type="line",
              x0=4, 
              y0=0, 
              x1=4, 
              y1=10)

2
你可以添加下一行代码:
fig.add_hline(y=4, line_width=2, line_dash='dash')

此外,请查看文档以深入了解Plotly最近添加的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接