У меня есть CSV-файл, содержащий некоторые данные в следующей форме: Форма данных (Продолжается до AskSize5)
Мне нужно построить трехмерную поверхность, указав время, цену предложения (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 значений.Как построить такой график?Графики любого типа, которые делают эту работу, хороши, нет необходимости, чтобы они были поверхностью.