【问题标题】:Plotting color array using matplotlib or plotly Python3使用 matplotlib 或 plotly Python3 绘制颜色数组
【发布时间】:2018-07-19 06:26:01
【问题描述】:

我正在尝试使用 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()

我愿意实现的是将图形绘制成一个相同大小的盒子,盒子的颜色应该类似于测试和预测中蜡烛的颜色。查看我愿意实现的示例图片:

上述输出仅包含通过检查开盘价和收盘价确定的蜡烛颜色。

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

已编辑
请建议我以上是无法实现的,那么使用此类数据集可以实现以下。

【问题讨论】:

  • 有人可以帮帮我吗?我不知道如何像问题中提到的那样进行绘图
  • matplotlib 金融工具箱有 ohlc,参见例如stackoverflow.com/questions/36334665/… 但它不包括在内,因此您需要从 github.com/matplotlib/mpl_finance 获取
  • 我知道。其实我不太愿意把 OHLC 搞砸。我已经做到了。我只想拥有我在问题中提到的那个。请告诉我。我只想显示蜡烛的颜色而不是蜡烛,因为它们有不同的尺寸,我希望尺寸必须保持不变。查看图像,就像一个堆叠的条形图,但应该反映条形图的值。请告诉我。

标签: python python-3.x matplotlib plotly


【解决方案1】:

所以,如果我理解的话,你真的只是想画一系列矩形。这可以通过在 matplotlib 中添加由 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()

看起来像这样,

您可以根据需要调整宽度、边缘颜色等。我已经绘制了两者的真实数据,因为您拥有的预测链接的格式不同。我已将不同 yloc 中的相同数据添加到 draw_rects 并更改了 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

【讨论】:

  • 是这样的。但是我可以做真实值和预测值的组合吗?此外,我不会只使用打开和关闭。这足以确定蜡烛颜色。您能否修改代码以便我接受您的回答。
  • 如果可能的话,我可以在其中使用 pandas 数据框,还是需要转换为 numpy 数组并使用它?还是没有效果?
  • 我是否可以在单独的数组中计算颜色并通过保持 y 常数来使用它?
  • 我在示例中添加了如何绘制两组数据并标记 y 轴。我个人只是使​​用 df.values 从 pandas 获取 numpy 数组,但您可以调整上述函数以使用数据帧
  • 一切皆有可能,上面的代码只是在一条直线上绘制了一堆矩形。你可以自定义它来做任何你需要的事情。
猜你喜欢
  • 2021-10-21
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
相关资源
最近更新 更多