python数组plot_使用matplotlib或plotly Python3绘制颜色数组

1586010002-jmsa.png

I am trying to plot the candles using the OHLC values. But I am now willing to plot only the color of the candles.

I am trying to predict the close price and plotting it using the matplotlib. See the following:

plt.figure(figsize=(21,7))

plt.plot(yTest,label='Price',color='blue')

plt.plot(test_pred_list,label='Predicted',color='red')

plt.title('Price vs Predicted')

plt.legend(loc='upper left')

plt.show()

bV2Tl.png

What I am willing to achieve is the graph plotted like a box of same size, and the color of the box should resemble the color of the candle in the test and predicted. See the example image of what I am willing to achieve:

YW2MO.png

The above output consists of only the color of the candles that is decided by checking the open and close values.

Here is the sample data. The Real dataset and the Predicted values of the Close price.

Edited

Please suggest me the above is unachievable then can the below is possible with such dataset.

CT2Xr.png

解决方案

So, if I understand, you really just want to draw a series of rectangles. This can be done by adding patches in matplotlib coloured by open > close,

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.lines import Line2D

from matplotlib.patches import Rectangle

def draw_rects(ax, quotes, width=5., height=1., yloc=1., colorup='g',

colordown='r', edgecolor='k', alpha=1.0):

OFFSET = width / 2.0

patches = []

for q in quotes:

t, open, close, high, low = q[:5]

if close > open:

color = colorup

else:

color = colordown

rect = Rectangle(

xy=(t - OFFSET, yloc),

width=width,

height=height,

facecolor=color,

edgecolor=edgecolor,

)

rect.set_alpha(alpha)

patches.append(rect)

ax.add_patch(rect)

ax.autoscale_view()

return patches

fig, ax = plt.subplots(1,1)

quotes = np.genfromtxt("./out.csv", skip_header=1, delimiter=',')

p1 = draw_rects(ax, quotes, yloc=1)

p2 = draw_rects(ax, quotes, yloc=4)

labels = [item.get_text() for item in ax.get_yticklabels()]

labels[2] = 'Predicted'

labels[8] = 'Real'

ax.set_yticklabels(labels)

plt.show()

which looks like this,

Up8Rk.png

you can adjust width, edgecolor, etc as needed. I've plotted the real data for both as the predicted link you had is not formatted in the same way. I've added the same data at a different yloc to draw_rects and changed the y tick labels as an example.

The data in out.csv is just

time,open,high,low,close

10,1.1661,1.16615,1.16601,1.16603

20,1.16623,1.16623,1.1661,1.1661

30,1.16617,1.16624,1.16617,1.16623

40,1.16613,1.16618,1.16612,1.16618

50,1.16615,1.16615,1.16612,1.16613

60,1.16613,1.16615,1.16613,1.16615

70,1.16617,1.16621,1.16612,1.16612

80,1.16618,1.16626,1.16615,1.16617

90,1.16614,1.16619,1.16614,1.16618

100,1.16618,1.16618,1.16609,1.16614

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值