将字符串转换为matplotlib日期以进行打印



我一直在尝试将字符串日期转换为可以绘制在图形上的格式。

代码


import matplotlib.pyplot as plt
import numpy as np
import urllib
import matplotlib.dates as mdates
import datetime
def graph_data():
fig=plt.figure()
ax1=plt.subplot2grid((1,1),(0,0))
stock_price_url = 'https://pythonprogramming.net/yahoo_finance_replacement'
source_code = urllib.request.urlopen(stock_price_url).read().decode()
stock_data = []
split_source=source_code.split('n')
print(len(split_source))
for line in split_source[1:]:
stock_data.append(line)

date,openn,closep,highp,lowp,openp,volume=np.loadtxt(stock_data,delimiter=',',unpack=True)
x = [datetime.strptime(d, '%Y-%m-%d') for d in date]
ax1.plot_date(x,closep,'-',linewidth=0.1)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Graph')
plt.show()
graph_data()

任何转换方法都会产生相同的错误

ValueError:无法将字符串转换为浮点值:"2017-07-26">

我可以使用什么方法将字符串转换为可以绘制的日期

您的代码没有任何问题。问题出在数据上。如果你查看数据,你会发现从日期到体积特征,你的数据是这样的字符串:data='2017-07-26153.3500153.9300153.0600153.5000153.500012778195.00'。这是字符串的表示。所以你需要先做一些预处理。可能有各种方法可以做到这一点。我发现这个方法对我有帮助:

首先,您必须删除数据中的逗号并将其替换为空格,然后使用split函数将数据转换为split格式。

因此,您需要在代码中进行以下更改:

date = []
closep = []
for i in range(len(stock_data)):
temp = stock_data[i].replace(',', ' ').split()
date.append(temp[0])
closep.append(temp[2])

0和2是数据集中date和closep的位置。

现在,不要像你在绘图方法中使用的那样使用"x"one_answers"closep",而是使用我刚刚通过代码分享的这些"date"one_answers"closep"。

还有一件事是,我认为这个大数据集的图形出现了问题。因此,使用date[0:100],closep[0:100]来尝试较小数据集的绘图。

完整的代码如下所示:

import matplotlib.pyplot as plt
import numpy as np
import urllib
import matplotlib.dates as mdates
import datetime

def graph_data():
fig = plt.figure()
ax1 = plt.subplot2grid((1, 1), (0, 0))
stock_price_url = 
'https://pythonprogramming.net/yahoo_finance_replacement'
source_code = urllib.request.urlopen(stock_price_url).read().decode()
stock_data = []
split_source = source_code.split('n')
for line in split_source[1:]:
stock_data.append(line)
date = []
closep = []
for i in range(len(stock_data)):
temp = stock_data[i].replace(',', ' ').split()
date.append(temp[0])
closep.append(temp[2])
ax1.plot_date(date[0:100], closep[0:100], '-', linewidth=0.1)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Graph')
plt.show()

graph_data()

希望这能有所帮助。

最新更新