Matplotlib - 填充问题
Matplotlib - Trouble with fills
我正在尝试使用 matplot lib 对股票进行一些基本绘图,但我很难尝试填充绘图的体积部分。
我试图在两个单独的图表(一个在另一个之上)中绘制股票价格和交易量。当我绘制 2 条直线(代码中的 ATTEMPT 1)时,它看起来不错 - 如您所料。
当我尝试填充成交量线下方(代码中的 ATTEMPT 2)时,价格图看起来完全被挤压成大约 5 像素宽,而第二个成交量图中什么也没有。
我认为它与 x 轴(日期)系列有关,因为它仅在 ATTEMPT 2 中明确设置。
另外,我试图在双轴的单个图表中绘制相同的数据。我只在一个图表中得到相同的结果。我假设相同的解决方案将解决这两种图表的问题?
另外,谁能告诉我如何缩小 y 轴的比例?
我错过了什么?
谢谢!
本
import datetime
import numpy as np
import matplotlib.colors as colors
import matplotlib.finance as finance
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# get the stock data
fh = finance.fetch_historical_yahoo('AAPL', (2007, 2, 12), (2011, 2, 12))
r = mlab.csv2rec(fh)
fh.close()
r.sort()
# *** ATTEMPT 1: 2 standard line plots ******************************
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False)
ax1.plot(r.close)
ax2.plot(r.volume)
f.subplots_adjust(hspace=0)
# *** ATTEMPT 2: Fill the volume plot *******************************
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False)
ax1.plot(r.close)
ax2.fill_between(r.date,0, r.volume, facecolor='#0079a3', alpha=0.4)
f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)
因为你 link 这两个 xaxes,它们应该共享相同的 x 轴数据。使用 plot(x,y)
语法而不是 plot(y)
应该可以解决问题。
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False)
ax1.plot(r.date,r.close)
ax2.fill_between(r.date,0, r.volume, facecolor='#0079a3', alpha=0.4)
f.subplots_adjust(hspace=0)
我正在尝试使用 matplot lib 对股票进行一些基本绘图,但我很难尝试填充绘图的体积部分。
我试图在两个单独的图表(一个在另一个之上)中绘制股票价格和交易量。当我绘制 2 条直线(代码中的 ATTEMPT 1)时,它看起来不错 - 如您所料。
当我尝试填充成交量线下方(代码中的 ATTEMPT 2)时,价格图看起来完全被挤压成大约 5 像素宽,而第二个成交量图中什么也没有。
我认为它与 x 轴(日期)系列有关,因为它仅在 ATTEMPT 2 中明确设置。
另外,我试图在双轴的单个图表中绘制相同的数据。我只在一个图表中得到相同的结果。我假设相同的解决方案将解决这两种图表的问题?
另外,谁能告诉我如何缩小 y 轴的比例?
我错过了什么?
谢谢!
本
import datetime
import numpy as np
import matplotlib.colors as colors
import matplotlib.finance as finance
import matplotlib.dates as mdates
import matplotlib.ticker as mticker
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# get the stock data
fh = finance.fetch_historical_yahoo('AAPL', (2007, 2, 12), (2011, 2, 12))
r = mlab.csv2rec(fh)
fh.close()
r.sort()
# *** ATTEMPT 1: 2 standard line plots ******************************
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False)
ax1.plot(r.close)
ax2.plot(r.volume)
f.subplots_adjust(hspace=0)
# *** ATTEMPT 2: Fill the volume plot *******************************
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False)
ax1.plot(r.close)
ax2.fill_between(r.date,0, r.volume, facecolor='#0079a3', alpha=0.4)
f.subplots_adjust(hspace=0)
plt.setp([a.get_xticklabels() for a in f.axes[:-1]], visible=False)
因为你 link 这两个 xaxes,它们应该共享相同的 x 轴数据。使用 plot(x,y)
语法而不是 plot(y)
应该可以解决问题。
f, (ax1, ax2) = plt.subplots(2, sharex=True, sharey=False)
ax1.plot(r.date,r.close)
ax2.fill_between(r.date,0, r.volume, facecolor='#0079a3', alpha=0.4)
f.subplots_adjust(hspace=0)