下面的简单代码可从股票数据绘制烛台图,显示60天移动平均线。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_finance import candlestick2_ohlc
from mpl_finance import candlestick_ohlc
data = pd.read_csv('C:\\AAPL.csv')
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = fig.add_subplot(111)
data['MA60'] = data['Close'].rolling(window=60).mean()
cl =candlestick2_ohlc(ax=ax1,opens=data['Open'],
highs=data['High'],lows=data['Low'],
closes=data['Close'],width=0.4, colorup='#77d879',
colordown='#db3f3f')
ax1.set_xticks(np.arange(len(data)))
ax1.set_xticklabels(data['Date'], fontsize=6, rotation=-90)
ax2.plot(data.Date, data['MA60'], label='MA_60')
plt.show() # plt.show() shall be after "plt.savefig" otherwise outputs an empty image file.
上面的代码看起来很笨拙,但是可以正常工作。
数据有90行,因此可以毫无问题地显示60天移动平均线。
但是我只想要图表的一部分,即最近45天。
如果代码仅读取和使用最近45天的数据,则无法生成60MA的图表。
所以我想用整个90天的时间进行制作(在那里有60MA),并且只显示并保存图像的右半部分。
plt.savefig('C:\\AAPL.png')
img = plt.imread('C:\\AAPL.png')
print(img.shape) # (480, 640, 4)
img_cropped = img[:, 320:, :] # right half of the image
img_cropped.savefig('C:\\AAPL-1.png')
无法解决问题。
什么是适当的和体面的方式,可以从整个数据中产生图像的某些部分?谢谢。
答案 0 :(得分:1)
您是如此接近,您只在最后一行出错了!当您使用plt.imread()
重新加载绘图时,它变成了图像而不是图形,因此您必须使用plt.imsave()
将其保存在最后一行:
plt.imsave('result.png',img_cropped)