我想绘制一个数据,其中x axis
的日期时间值和另一组值为y
。作为一个例子,我将使用matplotlib中的example,其中y
是股票价格。下面是代码。
import matplotlib.pyplot as plt
from matplotlib.finance import quotes_historical_yahoo_ochl
from matplotlib.dates import YearLocator, MonthLocator, DateFormatter
import datetime
date1 = datetime.date(1995, 1, 1)
date2 = datetime.date(2004, 4, 12)
years = YearLocator() # every year
months = MonthLocator() # every month
yearsFmt = DateFormatter('%Y')
quotes = quotes_historical_yahoo_ochl('INTC', date1, date2)
if len(quotes) == 0:
raise SystemExit
dates = [q[0] for q in quotes]
opens = [q[1] for q in quotes]
fig, ax = plt.subplots()
ax.plot_date(dates, opens, '-')
# format the ticks
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)
ax.autoscale_view()
# format the coords message box
def price(x):
return '$%1.2f' % x
ax.fmt_xdata = DateFormatter('%Y-%m-%d')
ax.fmt_ydata = price
ax.grid(True)
fig.autofmt_xdate()
plt.show()
现在,我想做的是根据一些标准为图中的每个值着色。为了简单起见,假设示例中的标准基于年份。也就是说,属于同一年的价格将用相同的颜色表示。我该怎么做谢谢!
2条答案
按热度按时间gpfsuwkq1#
您可以使用numpy数组,并在您想要的范围内(在本例中为一年)使用掩码。为了使用示例中的内置
YearLocator
函数,您需要首先绘制图表并设置刻度,然后从示例中删除并替换为每年的范围。其给出,
s3fp2yjn2#
我通常使用的方法是使用
for
循环绘制数据的不同部分,并在绘制时对每个部分进行着色。在您的示例中,此部分:变成: