【问题标题】:Why do I get this error: not enough values to unpack (expected 5, got 4)?为什么我会收到此错误:没有足够的值来解包(预期 5,得到 4)?
【发布时间】:2019-08-08 14:40:12
【问题描述】:

基本上我想要一个包含 3 个子图的图表。第二个图将是烛台图,是我目前正在处理的图。但是,我不断收到“没有足够的值来解包”错误,我真的不知道为什么???

start = dt.datetime(2016,1,1)
end = dt.datetime(2016,12,31)    

fig = plt.figure()
ax1 = plt.subplot2grid((6,1), (0,0), rowspan = 1, colspan = 1)
ax2 = plt.subplot2grid((6,1), (1,0), rowspan = 4, colspan = 1)
ax3 = plt.subplot2grid((6,1), (5,0), rowspan = 1, colspan = 1)

df2 = pdr.data.DataReader('TSLA', 'yahoo', startdate, enddate)
df2.drop('Adj Close', axis = 1, inplace = True)
MA20 = df2['Close'].rolling(20).mean()
MA50 = df2['Close'].rolling(50).mean()

cols = ['Open', 'High', 'Low', 'Close', 'Volume']
df2 = df2[cols] #reordering columns to OHLC order

candlestick_ohlc(ax2, df2, width=0.4, colorup='#77d879', colordown='#db3f3f')

plt.show()

我收到此错误:

>---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-329-f2bd49065390> in <module>
     18 df2 = df2[cols]
     19 
---> 20 candlestick_ohlc(ax2, df2, width=0.4, colorup='#77d879', colordown='#db3f3f')
     21 
     22 ax1.plot(MA20, label = '20-day')

>c:\users\cecilia\appdata\local\programs\python\python35\lib\site-packages\mpl_finance.py in candlestick_ohlc(ax, quotes, width, colorup, colordown, alpha)
    234     return _candlestick(ax, quotes, width=width, colorup=colorup,
    235                         colordown=colordown,
--> 236                         alpha=alpha, ochl=False)
    237 
    238 

>c:\users\cecilia\appdata\local\programs\python\python35\lib\site-packages\mpl_finance.py in _candlestick(ax, quotes, width, colorup, colordown, alpha, ochl)
    281             t, open, close, high, low = q[:5]
    282         else:
--> 283             t, open, high, low, close = q[:5]
    284 
    285         if close >= open:

>ValueError: not enough values to unpack (expected 5, got 4)

我得到的图表似乎也不正确。它是全红色的,但对于收盘价高于开盘价的烛台,我将颜色设置为绿色,但没有出现绿色蜡烛。我已经按照 'OHLC' 的顺序排列了与函数相对应的列,所以我也不知道为什么会这样。

【问题讨论】:

  • 请粘贴完整的错误信息。错误回溯将指向导致问题的确切行。
  • 还要检查 minimal reproducible example 并确保您的代码是 1。
  • @Error-SyntacticalRemorse 好的,我已经这样做了!
  • @ImportanceOfBeingErnest 我已经编辑了代码!谢谢
  • 哦,您似乎忘记提供任何日期或时间值了。

标签: python-3.x matplotlib candlestick-chart


【解决方案1】:

candlestick_ohlc 需要将日期作为输入。此外,日期需要转换为数字。因此,以下将起作用。

import datetime as dt
import matplotlib.pyplot as plt
import pandas_datareader as pdr
from mpl_finance import candlestick_ohlc
import matplotlib.dates as mdates


start = dt.datetime(2016,1,1)
end = dt.datetime(2016,12,31)    

fig, ax = plt.subplots()
df2 = pdr.data.DataReader('TSLA', 'yahoo', start, end)
df2.drop('Adj Close', axis = 1, inplace = True)

df2.reset_index(inplace=True)
df2["Date"] = mdates.date2num(df2["Date"].values)
print(df2.head())

cols = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume']
df2 = df2[cols] #reordering columns to OHLC order

candlestick_ohlc(ax, df2.values, width=0.4, colorup='#77d879', colordown='#db3f3f')

ax.xaxis_date()

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2016-07-05
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多