Plotly Graph 上的 Y 轴值乱序 Python
Y Axis Values Out of Order on Plotly Graph Python
我正在使用 AlphaVantage API 下载数据点,然后将其转换为 pandas DataFrame。
我想使用 Plotly 绘制带有 Scatter/Line 图形的新 DataFrame。
在 Google Colab 中绘制时,这些图表似乎很完美,但是,我似乎无法在 PyCharm 和 Jupiter Notebook 中复制我的结果。
在 PyCharm 和 JN 中绘制时,Y 轴值的绘制顺序是乱序的,就像图表试图创建尽可能直的线(参见第二张图片并仔细观察y 轴)。
下面是代码和图表的简化示例:
两个实例中使用的代码完全相同
期望的结果(来自 Colab 的示例):
PyCharm 和 JN(当前问题图)的结果:
见代码:
import requests
import pandas as pd
import plotly.graph_objects as go
# DATA FROM API
response = requests.get(url='https://www.alphavantage.co/query?function=TIME_SERIES_WEEKLY&symbol=IBM&apikey=demo')
response.raise_for_status()
stock_weekly = response.json()['Weekly Time Series']
# CHANGE DATA FORMAT, RENAME COLUMNS AND CONVERT TO DATETIME, FINALLY FLIP TO HAVE DATE IN ASCENDING ORDER
raw_weekly_data = pd.DataFrame(stock_weekly)
weekly_data = raw_weekly_data.T
weekly_data.reset_index(level=0, inplace=True)
weekly_data.rename(columns={
'index': 'DATE',
'1. open': 'OPEN',
'2. high': 'HIGH',
'3. low': 'LOW',
'4. close': 'CLOSE',
'5. volume': 'VOLUME'
},
inplace=True)
weekly_data['DATE'] = pd.to_datetime(weekly_data['DATE'])
weekly_data = weekly_data[::-1]
weekly_data = weekly_data.reset_index(drop=True)
# PLOT
fig = go.Figure()
fig.add_trace(go.Scatter(
x=weekly_data['DATE'],
y=weekly_data['CLOSE']))
fig.show()
错误在于您的 y 轴值的数据类型。我猜他们目前是字符串。尝试将值转换为浮点数,这应该可以解决问题。要将 y 轴中的所有值转换为浮点数(即数据框中的 'CLOSE' 列),您可以执行以下操作:
weekly_data['CLOSE'] = weekly_data['CLOSE'].astype(float)
我在 plotly 上收到了我的问题的答案并决定分享。我结合使用了以下两种技术:
The error is due to the data types of your columns in your dataframe.
dtypes The values are of type object.
However this was not a problem is previous versions of plotly (which
must be installed on your Google Collab). The newer releases requires
the values to be numeric.
您可以像这样将列转换为数字:
#converting to type numeric
cols = weekly_data.columns.drop('DATE')
weekly_data[cols] = weekly_data[cols].apply(pd.to_numeric)
或者只添加 autotypenumbers=‘convert types’ 来更新你的数字:
fig = go.Figure()
fig.add_trace(go.Scatter(
x=weekly_data['DATE'],
y=weekly_data['CLOSE']))
fig.update_layout(autotypenumbers='convert types')
fig.show()
我正在使用 AlphaVantage API 下载数据点,然后将其转换为 pandas DataFrame。
我想使用 Plotly 绘制带有 Scatter/Line 图形的新 DataFrame。 在 Google Colab 中绘制时,这些图表似乎很完美,但是,我似乎无法在 PyCharm 和 Jupiter Notebook 中复制我的结果。
在 PyCharm 和 JN 中绘制时,Y 轴值的绘制顺序是乱序的,就像图表试图创建尽可能直的线(参见第二张图片并仔细观察y 轴)。
下面是代码和图表的简化示例:
两个实例中使用的代码完全相同
期望的结果(来自 Colab 的示例):
PyCharm 和 JN(当前问题图)的结果:
见代码:
import requests
import pandas as pd
import plotly.graph_objects as go
# DATA FROM API
response = requests.get(url='https://www.alphavantage.co/query?function=TIME_SERIES_WEEKLY&symbol=IBM&apikey=demo')
response.raise_for_status()
stock_weekly = response.json()['Weekly Time Series']
# CHANGE DATA FORMAT, RENAME COLUMNS AND CONVERT TO DATETIME, FINALLY FLIP TO HAVE DATE IN ASCENDING ORDER
raw_weekly_data = pd.DataFrame(stock_weekly)
weekly_data = raw_weekly_data.T
weekly_data.reset_index(level=0, inplace=True)
weekly_data.rename(columns={
'index': 'DATE',
'1. open': 'OPEN',
'2. high': 'HIGH',
'3. low': 'LOW',
'4. close': 'CLOSE',
'5. volume': 'VOLUME'
},
inplace=True)
weekly_data['DATE'] = pd.to_datetime(weekly_data['DATE'])
weekly_data = weekly_data[::-1]
weekly_data = weekly_data.reset_index(drop=True)
# PLOT
fig = go.Figure()
fig.add_trace(go.Scatter(
x=weekly_data['DATE'],
y=weekly_data['CLOSE']))
fig.show()
错误在于您的 y 轴值的数据类型。我猜他们目前是字符串。尝试将值转换为浮点数,这应该可以解决问题。要将 y 轴中的所有值转换为浮点数(即数据框中的 'CLOSE' 列),您可以执行以下操作:
weekly_data['CLOSE'] = weekly_data['CLOSE'].astype(float)
我在 plotly 上收到了我的问题的答案并决定分享。我结合使用了以下两种技术:
The error is due to the data types of your columns in your dataframe. dtypes The values are of type object.
However this was not a problem is previous versions of plotly (which must be installed on your Google Collab). The newer releases requires the values to be numeric.
您可以像这样将列转换为数字:
#converting to type numeric
cols = weekly_data.columns.drop('DATE')
weekly_data[cols] = weekly_data[cols].apply(pd.to_numeric)
或者只添加 autotypenumbers=‘convert types’ 来更新你的数字:
fig = go.Figure()
fig.add_trace(go.Scatter(
x=weekly_data['DATE'],
y=weekly_data['CLOSE']))
fig.update_layout(autotypenumbers='convert types')
fig.show()