Как построить трехмерную поверхность с несколькими значениями X для каждого значения Z? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть 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 значений.Как построить такой график?Графики любого типа, которые делают эту работу, хороши, нет необходимости, чтобы они были поверхностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...