在 matplotlib 中自定义灯芯和烛台时出现问题 (mpl_finance)
Problem customizing wicks and candlesticks in matplotlib (mpl_finance)
我希望实现用户的代码:importanceofbeingernest
在下面post:
但是,当我尝试使用 candlestick2_ohlc
实现它时出现以下错误:
141
--> 142 for line, patch in zip(lines, patches):
143 patch.set_edgecolor("k")
144 patch.set_linewidth(0.72)
TypeError: zip argument #1 must support iteration
这是代码:
fig, ax = plt.subplots()
candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5)
lines, patches = candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5)
for line, patch in zip(lines, patches):
patch.set_edgecolor("k")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
line.set_color("k")
line.set_zorder(0)
candlestick_ohlc_black(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5)
这来自 matplotlib 文档。请注意,通过使用 candlestick2_ohlc 方法,我必须添加开盘价、最高价、最低价、收盘价作为参数,而不是将它们全部叠加。
matplotlib.finance.candlestick2_ohlc(ax, opens, highs, lows, closes, width=4, colorup='k', colordown='r', alpha=0.75)
我也试过这个而不是for line, patch in zip(lines, patches):
循环:
for line in lines:
line.set_color("k")
line.set_zorder(0)
for patch in patches:
patch.set_edgecolor("k")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
并得到以下错误:
141
--> 142 for line in lines:
143 line.set_color("k")
144 line.set_zorder(0)
TypeError: 'LineCollection' object is not iterable
更新,感谢 importanceofbeingernest,我也尝试过:
lines, patches = candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5,colorup='g',colordown='r')
patches.set_edgecolor("k") # works
patches.set_linewidth(0.72) #works
patches.set_antialiased(False) # no idea if works
lines.set_color("b") # doesn't work
lines.set_zorder(0) #doesn't work
线条似乎不起作用,但补丁可以。
仍在努力寻找解决方法。
更新 2 显示图表的最小示例代码:
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
import datetime
import pandas_datareader.data as web
import matplotlib.ticker as ticker
from mpl_finance import candlestick2_ohlc
def generate_chart_EnterTrade(quotes):
quotes['Date'] = quotes.index
# Order the dataframe
quotes = quotes[['Date','Open', 'High', 'Low', 'Close','Volume']]
fig, ax = plt.subplots()
candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.33,colorup='g',colordown='r')
'''
lines, patches = candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5,colorup='g',colordown='r')
patches.set_edgecolor("k") # works
patches.set_linewidth(0.72) #works
patches.set_antialiased(False) # no idea if works
lines.set_color("b") # doesn't work
lines.set_zorder(0) #doesn't work
'''
def mydate(x,pos):
try:
a = quotes['Date'][int(x)]
return '{: %d %b}'.format(a)
except IndexError:
return ''
ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))
ax.yaxis.tick_right()
fig.tight_layout()
plt.grid(color='#C0C0C0', linestyle='--', linewidth=0.5)
plt.show()
end = datetime.datetime.now()
start = end - datetime.timedelta(days=100)
data = web.DataReader('AAPL', 'yahoo', start, end)
generate_chart_EnterTrade(data)
输出:
以下适合我
lines, patches = candlestick2_ohlc(ax, ..., alpha=1)
lines.set_color("b")
lines.set_zorder(1)
此图中的结果(放大):
我希望实现用户的代码:importanceofbeingernest
在下面post:
但是,当我尝试使用 candlestick2_ohlc
实现它时出现以下错误:
141
--> 142 for line, patch in zip(lines, patches):
143 patch.set_edgecolor("k")
144 patch.set_linewidth(0.72)
TypeError: zip argument #1 must support iteration
这是代码:
fig, ax = plt.subplots()
candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5)
lines, patches = candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5)
for line, patch in zip(lines, patches):
patch.set_edgecolor("k")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
line.set_color("k")
line.set_zorder(0)
candlestick_ohlc_black(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5)
这来自 matplotlib 文档。请注意,通过使用 candlestick2_ohlc 方法,我必须添加开盘价、最高价、最低价、收盘价作为参数,而不是将它们全部叠加。
matplotlib.finance.candlestick2_ohlc(ax, opens, highs, lows, closes, width=4, colorup='k', colordown='r', alpha=0.75)
我也试过这个而不是for line, patch in zip(lines, patches):
循环:
for line in lines:
line.set_color("k")
line.set_zorder(0)
for patch in patches:
patch.set_edgecolor("k")
patch.set_linewidth(0.72)
patch.set_antialiased(False)
并得到以下错误:
141
--> 142 for line in lines:
143 line.set_color("k")
144 line.set_zorder(0)
TypeError: 'LineCollection' object is not iterable
更新,感谢 importanceofbeingernest,我也尝试过:
lines, patches = candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5,colorup='g',colordown='r')
patches.set_edgecolor("k") # works
patches.set_linewidth(0.72) #works
patches.set_antialiased(False) # no idea if works
lines.set_color("b") # doesn't work
lines.set_zorder(0) #doesn't work
线条似乎不起作用,但补丁可以。 仍在努力寻找解决方法。
更新 2 显示图表的最小示例代码:
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
import datetime
import pandas_datareader.data as web
import matplotlib.ticker as ticker
from mpl_finance import candlestick2_ohlc
def generate_chart_EnterTrade(quotes):
quotes['Date'] = quotes.index
# Order the dataframe
quotes = quotes[['Date','Open', 'High', 'Low', 'Close','Volume']]
fig, ax = plt.subplots()
candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.33,colorup='g',colordown='r')
'''
lines, patches = candlestick2_ohlc(ax,quotes['Open'],quotes['High'],quotes['Low'],quotes['Close'],width=0.5,colorup='g',colordown='r')
patches.set_edgecolor("k") # works
patches.set_linewidth(0.72) #works
patches.set_antialiased(False) # no idea if works
lines.set_color("b") # doesn't work
lines.set_zorder(0) #doesn't work
'''
def mydate(x,pos):
try:
a = quotes['Date'][int(x)]
return '{: %d %b}'.format(a)
except IndexError:
return ''
ax.xaxis.set_major_formatter(ticker.FuncFormatter(mydate))
ax.yaxis.tick_right()
fig.tight_layout()
plt.grid(color='#C0C0C0', linestyle='--', linewidth=0.5)
plt.show()
end = datetime.datetime.now()
start = end - datetime.timedelta(days=100)
data = web.DataReader('AAPL', 'yahoo', start, end)
generate_chart_EnterTrade(data)
输出:
以下适合我
lines, patches = candlestick2_ohlc(ax, ..., alpha=1)
lines.set_color("b")
lines.set_zorder(1)
此图中的结果(放大):