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

时间:2018-07-19 06:26:02

标签: python python-3.x matplotlib plotly

我正在尝试使用OHLC值绘制蜡烛图。但是我现在只愿意绘制蜡烛的颜色。
我正在尝试预测收盘价并使用matplotlib进行绘制。请参阅以下内容:

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()

output image

我愿意实现的是绘制的图形像一个大小相同的盒子,盒子的颜色应该类似于测试中和预测的蜡烛的颜色。请参阅我愿意实现的示例图像:
test output

以上输出仅包含通过检查打开和关闭值确定的蜡烛颜色。

这是示例数据。收盘价的Real datasetPredicted values

已编辑
请建议我以上是无法实现的,然后可以使用此类数据集进行以下操作。
output achieveable or not

1 个答案:

答案 0 :(得分:1)

因此,据我了解,您真的只想绘制一系列矩形。这可以通过在matplotlib中添加补丁(通过打开>关闭,

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()

看起来像这样

enter image description here

您可以根据需要调整宽度,边缘颜色等。我已经绘制了两者的真实数据,因为您所拥有的预测链接的格式不同。我将相同的数据添加到draw_rects的另一个yloc上,并更改了y刻度标签作为示例。

out.csv中的数据只是

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