【发布时间】:2021-11-06 12:29:51
【问题描述】:
这个问题来自本教程找到here:
我希望我的情节看起来像下面的情节,但有时间序列数据和缩放数据不是x_lim , y_lim 数据,而是来自不同的来源。
所以在上面的图中,我想要来自不同来源的盘中数据,下面的图将是某些股票的每日数据。但是因为它们都有不同的来源,所以我不能使用限制来缩放。为此,我将每天使用 yahoo datareader,盘中使用 yfinance。
代码:
import pandas as pd
from pandas_datareader import data as web
from matplotlib.patches import ConnectionPatch
df = web.DataReader('goog', 'yahoo')
df.Close = pd.to_numeric(df['Close'], errors='coerce')
fig = plt.figure(figsize=(6, 5))
plt.subplots_adjust(bottom = 0., left = 0, top = 1., right = 1)
sub1 = fig.add_subplot(2,2,1)
sub1 = df.Close.plot()
sub2 = fig.add_subplot(2,1,2) # two rows, two columns, second cell
df.Close.pct_change().plot(ax =sub2)
sub2.plot(theta, y, color = 'orange')
con1 = ConnectionPatch(xyA=(df[1:2].index, df[2:3].Close), coordsA=sub1.transData,
xyB=(df[4:5].index, df[5:6].Close), coordsB=sub2.transData, color = 'green')
fig.add_artist(con1)
xy 坐标有问题。通过上面的代码,我得到了:
TypeError:无法将数组数据从 dtype('O') 转换为 dtype('float64') 根据规则“安全”
xyA=(df[1:2].index, df[2:3].Close)
我在这里所做的是我的 xvalue 是日期 df[1:2].index 而我的 y 值是价格 df[2:3].Close
是否将 df 转换为数组,然后在这里绘制我唯一的选择?如果有任何其他方法可以让ConnectionPatch 正常工作,请告知。
df.dtypes
High float64
Low float64
Open float64
Close float64
Volume int64
Adj Close float64
dtype: object
【问题讨论】:
-
您是否使用已有的答案解决了问题?底部的图表说要使用烛台图,但如果您实际绘制图表,由于数据跨越五年,蜡烛太小而无法产生任何可视化效果。因此,每月烛台和每日缩放图的时间序列是不明确的。您对此有何看法?我正在准备一个答案。
-
@r-beginners 该图应在主图中显示每日图(紫色)。这将显示详细的长期图表(可能是 12 个月)。然后,在上面的两个子图中(绿色图)之一中,一小部分将在较小的时间范围内使用日线图进行缩放,例如 2 个月。另一个将有最新蜡烛(橙色)的盘中图。我希望我已经回答了。谢谢
-
@Slartibartfast 所有的工具都在我的回答中。我将它与您问题中的代码粘贴在一起,请参阅我的答案中的编辑。
-
除非我当然错过了什么:)
-
是否需要在左上2个月左右、右上最新蜡烛、城市图1年左右的折线图上填写相关时间段?我看到您已经根据您的 cmets 更新了您的答案。
标签: python python-3.x pandas matplotlib