python Y轴值无序

23c0lvtd  于 9个月前  发布在  Python
关注(0)|答案(2)|浏览(112)

我使用AlphaVantage API下载数据点,然后将其转换为pandas DataFrame。
我想用Plotly绘制一个散点图/线图来绘制新的DataFrame。在Google Colab中绘制这些图时,这些图看起来很完美,但是,我似乎无法在PyCharm和Jupiter Notebook中复制我的结果。
在PyCharm和JN中绘图时,Y轴值的绘制顺序是无序的,就像图形试图创建尽可能直的直线一样(参见第二张图,仔细观察y轴)。
下面是代码和图形的简化示例:
两个示例中使用的代码完全相同
预期结果(样本来自Colab):x1c 0d1x
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()

字符串

wwtsj6pe

wwtsj6pe1#

我在plotly上收到了我的问题的答案,并决定分享。我使用了以下两种技术的组合:
该错误是由于您的数据结构中的列的数据类型。dtypes值的类型为object。
不过,这在plotly的早期版本中并不是问题(必须安装在您的Google Collab上)。新版本要求值为数字。
您可以像这样将列转换为数字:

#converting to type numeric
cols = weekly_data.columns.drop('DATE')
weekly_data[cols] = weekly_data[cols].apply(pd.to_numeric)

字符串
或者添加autotypebers ='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()

f45qwnt8

f45qwnt82#

错误在于y轴值的数据类型。我猜它们当前是字符串。尝试将值转换为float,这应该可以解决问题。要将y轴中的所有值转换为float(这将是嵌套框中的'CLOSE'列),您可以这样做:
第一个月

相关问题