关于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()
答案 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)