如何在 Python 中使用 Plotly Express 在同一 y 轴上绘制多条线
How to plot multiple lines on the same y-axis using Plotly Express in Python
我刚刚安装了 plotly express。我正在尝试做一些简单的事情——将我的数据框的每一列绘制在同一个 y 轴上,并将索引作为 x 轴。这里是 questions/observations:
数据框是否有必要将索引作为列用作 x 轴?我不能直接使用 x 轴的索引吗?
如何为同一 x 轴添加在 y 轴上 plotly 中调用的多条轨迹?
请注意,我不是尝试使用 plotly 添加跟踪,而是尝试使用 plotly-express。
另外,网上有几个类似的post,最接近的是this:
https://community.plot.ly/t/multiple-traces-plotly-express/23360
但是,此 post 展示了如何添加散点图,而不是直线。我想绘制一条线,但没有 add_line 类似于此处示例中显示的 add_scatter。
提前感谢任何帮助
示例代码:
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()
PLot:
不确定您要查找的线路类型,但您是否尝试过类似下面的方式
fig.add_scatter(x=df['Date'], y=df['AAPL.Low'],mode='lines')
在标准散点图上,您可以将模式设置为线条、标记和文本的任意组合。
简答:
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]
引用全部或部分数据框列
代码 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()
有一种方法可以在单个图形中添加绘图。
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)
我刚刚安装了 plotly express。我正在尝试做一些简单的事情——将我的数据框的每一列绘制在同一个 y 轴上,并将索引作为 x 轴。这里是 questions/observations:
数据框是否有必要将索引作为列用作 x 轴?我不能直接使用 x 轴的索引吗? 如何为同一 x 轴添加在 y 轴上 plotly 中调用的多条轨迹?
请注意,我不是尝试使用 plotly 添加跟踪,而是尝试使用 plotly-express。
另外,网上有几个类似的post,最接近的是this: https://community.plot.ly/t/multiple-traces-plotly-express/23360 但是,此 post 展示了如何添加散点图,而不是直线。我想绘制一条线,但没有 add_line 类似于此处示例中显示的 add_scatter。
提前感谢任何帮助
示例代码:
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()
PLot:
不确定您要查找的线路类型,但您是否尝试过类似下面的方式
fig.add_scatter(x=df['Date'], y=df['AAPL.Low'],mode='lines')
在标准散点图上,您可以将模式设置为线条、标记和文本的任意组合。
简答:
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]
代码 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()
有一种方法可以在单个图形中添加绘图。
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)