Y 轴值乱序

Man*_*nin 8 python graphing pandas plotly

我正在使用 AlphaVantage API 下载数据点,然后将其转换为 pandas DataFrame。

我想使用 Plotly 用散点图/折线图绘制新的 DataFrame。在 Google Colab 中绘制这些图表时,这些图表似乎很完美,但是,我似乎无法在 PyCharm 和 Jupiter Notebook 中复制我的结果。

在 PyCharm 和 JN 中绘图时,Y 轴值绘制无序,就像图表试图创建尽可能直线一样(参见第二张图片并仔细观察 y 轴)。

这是代码和图表的简化示例:

两个实例中使用完全相同的代码

期望的结果(来自 Colab 的示例): 来自 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()
Run Code Online (Sandbox Code Playgroud)

Man*_*nin 18

我在plotly上收到了我的问题的答案并决定分享。我结合使用了以下两种技术:

\n
\n

该错误是由于数据框中列的数据类型引起的。\ndtypes 值的类型为对象。

\n

不过,对于以前版本的plotly(必须安装在您的Google Collab 上),这不是问题。较新的版本要求\n值必须是数字。

\n
\n

您可以将列转换为数字,如下所示:

\n
#converting to type numeric\ncols = weekly_data.columns.drop('DATE')\nweekly_data[cols] = weekly_data[cols].apply(pd.to_numeric)\n
Run Code Online (Sandbox Code Playgroud)\n

或者只需添加 autotypenumbers=\xe2\x80\x98convert types\xe2\x80\x99 来更新您的数字:

\n
fig = go.Figure()\n\nfig.add_trace(go.Scatter(\n    x=weekly_data['DATE'], \n    y=weekly_data['CLOSE']))\n\nfig.update_layout(autotypenumbers='convert types')\n\nfig.show()\n
Run Code Online (Sandbox Code Playgroud)\n