matplotlib finance candlestick2_ohlc:垂直线的颜色和宽度

时间:2015-08-30 01:02:52

标签: python matplotlib charts finance candlestick-chart

关于candlestick2_ohlc的垂直线,如何将其黑色的默认颜色更改为其他颜色?我一直在看源代码,但我无法弄清楚如何正确地改变它。

此外,当您处理大约400个或更多数据点时,'width'参数需要相当大。但是当它变大并放大时,烛台会重叠。

无论如何要解决这个问题?

from matplotlib.finance import candlestick2_ohlc
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import matplotlib.dates as mdates
from pandas import read_csv
import numpy as np

path1 = "./ES 06-15.Last.txt"  # typical stock data
t_0 = 30
t_end = 431
N_data = read_csv(path1, sep=';|,', names=['datetime1', 'open1', 'high1',
                  'low1', 'close1', 'volume1'],
                  skiprows=t_0, nrows=t_end - t_0 + 3,
                  converters={'open1': np.float32, 'high1': np.float32,
                              'low1': np.float32, 'close1': np.float32})

fig = plt.figure(facecolor='k')
ax1 = plt.subplot(1,1,1, axisbg='#191919')

ax1.yaxis.label.set_color('w')
ax1.xaxis.label.set_color("w")
ax1.spines['bottom'].set_color("#5998ff")
ax1.spines['top'].set_color("#5998ff")
ax1.spines['left'].set_color("#5998ff")
ax1.spines['right'].set_color("#5998ff")
ax1.tick_params(axis='y', colors='w')
ax1.tick_params(axis='x', colors='yellow')
plt.ylabel('Price')

x = np.arange(len(N_data))
my_xticks = N_data['datetime1']
plt.xticks(x,my_xticks)
ax1.xaxis.set_major_locator(mticker.MaxNLocator(6))
for label in ax1.xaxis.get_ticklabels():
    label.set_rotation(25)

candlestick2_ohlc(ax1, N_data['open1'], N_data['high1'],
                  N_data['low1'], N_data['close1'], width=2,
                  colorup='#008000', colordown='#FF0000', alpha=1)
plt.show()

1 个答案:

答案 0 :(得分:1)

我知道这是一个古老的问题,但这是你的答案。

打开位于/site-packages/matplotlib/finance.py的源文件,并围绕第1127行编辑candlestick2_ohlc功能。

应该有以下代码:

rangeCollection = LineCollection(rangeSegments,
                                 colors=((0, 0, 0, 1), ),
                                 linewidths=lw,
                                 antialiaseds=useAA,
                                 )

如果您更改为。

rangeCollection = LineCollection(rangeSegments,
                                 colors=colors,  # << this bit
                                 linewidths=lw,
                                 antialiaseds=useAA,
                                 )

这会使每支蜡烛的灯芯颜色与主体颜色相同。

或者,如果您希望每个蜡烛芯的颜色与方向无关,请编辑def部分。

def candlestick2_ohlc(ax, opens, highs, lows, closes, width=4,
                 colorup='k', colordown='r', linecolor=None,
                 alpha=0.75,
                 ):

添加linecolor=None将提供默认设置。

然后再次编辑。

if linecolor is None:
    linecolor = colors
rangeCollection = LineCollection(rangeSegments,
                                 colors=linecolor,
                                 linewidths=lw,
                                 antialiaseds=useAA,
                                 )

现在从主脚本调用函数时没有linecolor 参数,默认将是...灯芯与蜡烛体相同的颜色。

candlestick2_ohlc(ax1, popen, phigh, plow, pclose, width=2,
                  colorup='g', colordown='r', alpha=1)

或者如果需要白色。

candlestick2_ohlc(ax1, popen, phigh, plow, pclose, width=2,
                  colorup='g', colordown='r', linecolor='w', alpha=1)