相关文章推荐
儒雅的绿茶  ·  Groovy 对 XML,JSON ...·  6 月前    · 
不羁的投影仪  ·  Python 教程之 ...·  1 年前    · 

Plotly:如何在折线图上添加一条水平线?

14 人关注

我用下面的代码做了一个折线图,我想在y=1处添加一条水平线。我试着按照plotly网站上的说明操作,但还是没有显示。有谁知道原因吗?

date = can_tot_df.date
growth_factor = can_tot_df.growth_factor
trace0 = go.Scatter(
            x=date,
            y=growth_factor,
            mode = 'lines',
            name = 'growth_factor'
fig = go.Figure()
fig.add_shape(
        type='line',
        x0=date.min(),
        y0=1,
        x1=date.max(),
        y1=1,
        line=dict(
            color='Red',
data = [trace0]
iplot(data)
    
1 个评论
如果你收到了你需要的答案,请考虑将其中一个建议标记为已接受的解决方案。
python
plotly
plotly-python
gboge
gboge
发布于 2020-03-29
5 个回答
vestland
vestland
发布于 2020-03-29
已采纳
0 人赞同

Short answer, and a general solution:

fig.add_shape(type='line',
                x0=0,
                y0=40,
                x1=8,
                y1=40,
                line=dict(color='Red',),
                xref='x',
                yref='y'

Details and specifics about OP's question

这很难讲正是在没有你的数据样本的情况下,有什么问题。 我是什么可以可以肯定的是,你缺少参数xrefyref来指定直线以yx轴为单位绘制。从你的示例代码来看,这就是你想做的,因为你是以日期来指定你的X值的。

Also, you don't need to worry about iplot for newer versions of plotly. You 可以 display your chart just as easily by just running fig.show(). The figure and code sample below will show you how to use fig.show() and how to define your lines in terms of axis units.

Plot:

Code:

import plotly.graph_objects as go
import numpy as np
x = np.arange(10)
fig = go.Figure(data=go.Scatter(x=x, y=x**2))
fig.add_shape(type='line',
                x0=0,
                y0=40,
                x1=8,
                y1=40,
                line=dict(color='Red',),
                xref='x',
                yref='y'
fig.show()

An alternative to xref='x' is xref='paper'. Now you 可以 specify x0 as a float between 0 and 1 spanning from the start and end of the plot.

谢谢你。我是CS的新手。你能为我这样的初学者推荐一些好的plotly教程吗?我现在几乎是在复制和粘贴plotly网站上的东西,不知道什么是什么。
@gboge - 说实话,这就是我学习plotly的方式......只是通过使用它和 不断 指的是文档--它做得很出色。 对我帮助最大的是认识到数据结构只是一堆 list dict 。 一切顺利!
@gboge plotly的人为他们的产品编写了一份绝对精彩的文档。你会发现一切 here .你会发现一些伟大的细节在 开始工作 基础知识 .
@gboge 对于一个伟大的可视化数据和plotly plot的布局结构,请看一下 this .
Moritz Wittig
Moritz Wittig
发布于 2020-03-29
0 人赞同

You could also use fig.add_hline(y=1) --> see https://plotly.com/python/horizontal-vertical-shapes/

import plotly.graph_objects as go
import numpy as np
x = np.arange(10)
fig = go.Figure(data=go.Scatter(x=x, y=x**2))
fig.add_hline(y=40, line_width=3, line_dash="dash", line_color="green")
fig.show()
    
endo.anaconda
endo.anaconda
发布于 2020-03-29
0 人赞同

如果你使用子图,那么这是我发现的在子图中添加另一条线的最简单方法。这个例子在y=80处为所有x值画一条水平线

from plotly.subplots import make_subplots
fig = make_subplots(rows=2, cols=1,
                    shared_xaxes=True,
                    vertical_spacing=0.02)
[some graph]
fig.add_trace(go.Scatter(
        name='Y=80',
        x = [df['date'].min(), df['date'].max()],
        y = [80, 80],
        mode = "lines",
        marker = dict(color = 'rgba(80, 26, 80, 0.8)')
    ),row=1, col=1)

i found the solution on github :

非常方便,谢谢
DSBLR
DSBLR
发布于 2020-03-29
0 人赞同
df = df
fig = px.scatter(df, x="date", y="growth_factor", mode = 'lines',
      hover_name=df['growth_factor'] )
fig.update_layout(shapes=[
dict(
  type= 'line',
  yref= 'y', y0= 1, y1= 1,   # adding a horizontal line at Y = 1
  xref= 'paper', x0= 0, x1= 1

fig.show()

S3DEV
S3DEV
发布于 2020-03-29
0 人赞同

你正在向你的 fig 对象添加线,但是 fig 没有被传递到 iplot() 函数中,只有你的 data 。 所以只有轨迹被绘制出来。

如果你使用的是 plotly 的后期版本,新的语法允许你简单地使用 fig 对象来创建这个情节,比如。

from plotly import graph_objects as go
fig = go.Figure()
# Contrived dataset for example.
x = [1, 2, 3, 4]
y = [i**2 for i in x]
fig.add_trace(go.Scatter(
              mode = 'lines',
              name = 'growth_factor'))
fig.add_shape(type='line',
              x0=min(x),
              y0=5,
              x1=max(x),
              y1=5,
              line=dict(color='Red'))
fig.update_shapes(dict(xref='x', yref='y'))