【问题标题】:How to plot multiple lines on the same y-axis using Plotly Express in Python如何在 Python 中使用 Plotly Express 在同一 y 轴上绘制多条线
【发布时间】:2020-01-28 05:21:44
【问题描述】:

我刚刚安装了 plotly express。我正在尝试做一些简单的事情 - 将我的数据框的每一列绘制在同一个 y 轴上,索引作为 x 轴。以下是问题/意见:

数据框是否需要将索引作为列用作 x 轴?我可以不直接使用 x 轴的索引吗? 如何在 y 轴上为同一 x 轴添加多个轨迹?

请注意,我不是尝试使用 plotly 添加跟踪,而是尝试使用 plotly-express。

另外,网上也有一些类似的帖子,最接近的是thishttps://community.plot.ly/t/multiple-traces-plotly-express/23360 但是,这篇文章展示了如何添加散点图,而不是线。我想绘制一条线,并且没有类似于此处示例中显示的 add_scatter 的 add_line。

提前感谢任何帮助

示例代码:

import plotly.express as px 
import pandas as pd 
import numpy as np 

# Get some data
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

# Plot 
fig = px.line(df, x='Date', y='AAPL.High')

# Only thing I figured is - I could do this 
fig.add_scatter(x=df['Date'], y=df['AAPL.Low']) # Not what is desired - need a line 

# Show plot 
fig.show()

剧情:

【问题讨论】:

    标签: python plotly plotly-python plotly-express


    【解决方案1】:

    有一种方法可以在单个图表中添加图表。

     import matplotlib.plotly as plt
     plt.figure(figsize=(-,-))
     ax1 = plt.plot(x1,y1)
     ax2 = plt.plot(x2,y2)
     ax3 = plt.plot(x3,y3)
     plt.legend(handles=[ax1,ax2,ax3],figsize=10)
    

    【讨论】:

      【解决方案2】:

      简答:

      fig = px.line(df, x='Date', y=df.columns[1:-6])
      

      其中df.columns 是作为列表返回的列的列名,或使用例如df.columns[1:-6] 的列的子集


      详情

      您的代码运行良好但如果您特别不想将(有点费力的)add_trace() 函数应用于每一行,您可以使用px.line()。这曾经要求您将数据从wide to long 格式转换。但现在不是了,所以只需定义一个索引并命名您想要绘制的列。或者通过 y=df.columns[1:-6]y=df.columns[1:-6]

      引用您的数据框列的全部或子集

      代码1:

      # imports
      import plotly.express as px 
      import pandas as pd 
      import numpy as np 
      
      # data
      df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
      fig = px.line(df, x='Date', y=df.columns[1:-6])
      
      # Show plot 
      fig.show()
      

      剧情:

      如果您想知道如何使用长格式的数据做同样的事情,以下是使用 pandas 和 plotly 的方法:

      代码2:

      # imports
      import plotly.express as px 
      import pandas as pd 
      import numpy as np 
      
      # data
      df_wide = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
      df_long=pd.melt(df_wide, id_vars=['Date'], value_vars=['AAPL.Open', 'AAPL.High', 'AAPL.Low', 'AAPL.Close', 'mavg'])
      
      # plotly 
      fig = px.line(df_long, x='Date', y='value', color='variable')
      
      # Show plot 
      fig.show()
      

      【讨论】:

      • 谢谢。当您想要处理所有列时,您可以从 df_wide 对象中获取列名,这样您的代码对于第一列中包含日期和其他列中值的任何 csv 都是通用的:df_long=pd.melt(df_wide, id_vars=df_wide.columns[0], value_vars=df_wide.columns[1:])
      【解决方案3】:

      不确定您要寻找哪种类型的线路,但您是否尝试过类似以下的方法

      fig.add_scatter(x=df['Date'], y=df['AAPL.Low'],mode='lines')
      

      在标准散点图上,您可以将模式设置为线条、标记和文本的任意组合。

      【讨论】:

      • 这可能会有所帮助,但问题是关于 plotly.express,而不是标准 plotly。
      猜你喜欢
      • 2020-11-01
      • 2020-04-26
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2016-03-12
      • 2021-11-13
      • 2015-09-01
      相关资源
      最近更新 更多