我有一个csv文件,其中包含以下格式的数据: Data form(持续到AskSize5)
我需要绘制一个3D曲面,其中包含时间,投标价格(Bid1,Bid2,Bid3 ...直到Bid5)及其各自的体积(BidSize1,BidSize2 ... BidSize5),但是对于每个时间值,我需要绘制所有各自的Bid1,... Bid5值及其每个体积。 (对于每个时间值Z,绘制5个X值和5个Y值)。 我试图玩3D绘图,这就是我得到的地方:
import csv
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import axes3d # To be able to use projection 3d
from datetime import datetime
import numpy as np
#Opening CSV File and fetching the rows
with open('FUTURES ORDER BOOK.csv',newline='') as csvfile:
orderBook = csv.reader(csvfile,delimiter=',')
header = next(orderBook)
data = []
for col in orderBook:
time1 = datetime.strptime(col[1],'%H:%M:%S.%f').time()
bid1 = float(col[2])
bidSize1 = int(col[3])
ask1 = float(col[4])
askSize1 = float(col[5])
bid2 = float(col[6])
bidSize2 = int(col[7])
ask2 = float(col[8])
askSize2 = int(col[9])
bid3 = float(col[10])
bidSize3 = int(col[11])
ask3 = float(col[12])
askSize3 = int(col[13])
bid4 = float(col[14])
bidSize4 = int(col[15])
ask4 = float(col[16])
askSize4 = int(col[17])
bid5 = float(col[18])
bidSize5 = int(col[19])
ask5 = float(col[20])
askSize5 = int(col[21])
data.append([time1,bid1,bidSize1,ask1,askSize1,bid2,bidSize2,
ask2,askSize2,bid3,bidSize3,ask3,askSize3,bid4,bidSize4,ask4,askSize4,bid5,bidSize5,ask5,askSize5])
timeAxis = []
bidDepth = []
askDepth = []
bidVDepth = []
askVDepth = []
bid1P = []
bid1V = []
bid2P = []
bid2V = []
bid3P = []
bid3V = []
bid4P = []
bid4V = []
bid5P = []
bid5V = []
ask1P = []
ask1V = []
ask2P = []
ask2V = []
ask3P = []
ask3V = []
ask4P = []
ask4V = []
ask5P = []
ask5V = []
#Fetching the required data from csv
for row in data:
timeAxis.append(row[:][0])
bid1P.append(row[:][1])
bid1V.append(row[:][2])
bid2P.append(row[:][5])
bid2V.append(row[:][6])
bid3P.append(row[:][9])
bid3V.append(row[:][10])
bid4P.append(row[:][13])
bid4V.append(row[:][14])
bid5P.append(row[:][17])
bid5V.append(row[:][18])
bidDepth.append(row[1])
bidDepth.append(row[5])
bidDepth.append(row[9])
bidDepth.append(row[13])
bidDepth.append(row[17])
bidVDepth.append(row[2])
bidVDepth.append(row[6])
bidVDepth.append(row[10])
bidVDepth.append(row[14])
bidVDepth.append(row[18])
askDepth.append(row[3])
askDepth.append(row[7])
askDepth.append(row[11])
askDepth.append(row[15])
askDepth.append(row[19])
askVDepth.append(row[4])
askVDepth.append(row[8])
askVDepth.append(row[12])
askVDepth.append(row[16])
askVDepth.append(row[20])
ask1P.append(row[:][3])
ask1V.append(row[:][4])
ask2P.append(row[:][7])
ask2V.append(row[:][8])
ask3P.append(row[:][11])
ask3V.append(row[:][12])
ask4P.append(row[:][15])
ask4V.append(row[:][16])
ask5P.append(row[:][19])
ask5V.append(row[:][20])
inMinute = []
for value in timeAxis:
inMinute.append(str(value.second) + "." + str(value.microsecond))
floatInMinute = []
for value in inMinute:
floatInMinute.append(float(value))
print(len(floatInMinute))
print(len(bidDepth))
print(len(bidVDepth))
figBid = plt.figure(figsize = (8,8))
figAsk = plt.figure(figsize = (8,8))
ax1 = figBid.add_subplot(111,projection = '3d')
ax2 = figAsk.add_subplot(111,projection = '3d')
ax1.plot(bidDepth,floatInMinute,bidVDepth,cmap=cm.coolwarm,antialiased = False)
ax2.plot(askDepth,floatInMinute,askVDepth,cmap=cm.coolwarm,antialiased = False)
ax1.set_xlabel("Time")
ax1.set_ylabel("Bid ")
ax1.set_zlabel("Volume")
ax2.set_xlabel("Time")
ax2.set_ylabel("Ask")
ax2.set_zlabel("Volume")
发生以下错误:'ValueError:x和y必须具有相同的第一维,但形状为(135,)和(27,)',这意味着我的时间数组包含27个值,但是投标价格和数量有135个值。如何绘制这样的图?任何使该工作有效的图形都可以,不需要将其作为表面。