• 十、基本的自定义

    十、基本的自定义

    在 Matplotlib 教程中,我们将讨论一些可能的图表自定义。 为了开始修改子图,我们必须定义它们。 我们很快会谈论他们,但有两种定义并构造子图的主要方法。 现在,我们只使用其中一个,但我们会很快解释它们。

    现在,修改我们的graph_data函数:

    1. def graph_data(stock):
    2. fig = plt.figure()
    3. ax1 = plt.subplot2grid((1,1), (0,0))

    为了修改图表,我们需要引用它,所以我们将它存储到变量fig。 然后我们将ax1定义为图表上的子图。 我们在这里使用subplot2grid,这是获取子图的两种主要方法之一。 我们将深入讨论这些东西,但现在,你应该看到我们有 2 个元组,它们提供了(1,1)(0,0)1,1表明这是一个 1×1 网格。 然后0,0表明这个子图的『起点』将为0,0

    接下来,通过我们已经编写的代码来获取和解析数据:

    1. stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'
    2. source_code = urllib.request.urlopen(stock_price_url).read().decode()
    3. stock_data = []
    4. split_source = source_code.split('\n')
    5. for line in split_source:
    6. split_line = line.split(',')
    7. if len(split_line) == 6:
    8. if 'values' not in line and 'labels' not in line:
    9. stock_data.append(line)
    10. date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
    11. delimiter=',',
    12. unpack=True,
    13. converters={0: bytespdate2num('%Y%m%d')})

    下面,我们这样绘制数据:

    1. ax1.plot_date(date, closep,'-', label='Price')

    现在,由于我们正在绘制日期,我们可能会发现,如果我们放大,日期会在水平方向上移动。但是,我们可以自定义这些刻度标签,像这样:

    1. for label in ax1.xaxis.get_ticklabels():
    2. label.set_rotation(45)

    这将使标签转动到对角线方向。 接下来,我们可以添加一个网格:

    1. ax1.grid(True)

    然后,其它东西我们保留默认,但我们也可能需要略微调整绘图,因为日期跑到了图表外面。 记不记得我们在第一篇教程中讨论的configure subplots按钮? 我们不仅可以以这种方式配置图表,我们还可以在代码中配置它们,以下是我们设置这些参数的方式:

    1. plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)

    现在,为了防止我们把你遗留在某个地方,这里是完整的代码:

    1. import matplotlib.pyplot as plt
    2. import numpy as np
    3. import urllib
    4. import matplotlib.dates as mdates
    5. def bytespdate2num(fmt, encoding='utf-8'):
    6. strconverter = mdates.strpdate2num(fmt)
    7. def bytesconverter(b):
    8. s = b.decode(encoding)
    9. return strconverter(s)
    10. return bytesconverter
    11. def graph_data(stock):
    12. fig = plt.figure()
    13. ax1 = plt.subplot2grid((1,1), (0,0))
    14. stock_price_url = 'http://chartapi.finance.yahoo.com/instrument/1.0/'+stock+'/chartdata;type=quote;range=10y/csv'
    15. source_code = urllib.request.urlopen(stock_price_url).read().decode()
    16. stock_data = []
    17. split_source = source_code.split('\n')
    18. for line in split_source:
    19. split_line = line.split(',')
    20. if len(split_line) == 6:
    21. if 'values' not in line and 'labels' not in line:
    22. stock_data.append(line)
    23. date, closep, highp, lowp, openp, volume = np.loadtxt(stock_data,
    24. delimiter=',',
    25. unpack=True,
    26. converters={0: bytespdate2num('%Y%m%d')})
    27. ax1.plot_date(date, closep,'-', label='Price')
    28. for label in ax1.xaxis.get_ticklabels():
    29. label.set_rotation(45)
    30. ax1.grid(True)#, color='g', linestyle='-', linewidth=5)
    31. plt.xlabel('Date')
    32. plt.ylabel('Price')
    33. plt.title('Interesting Graph\nCheck it out')
    34. plt.legend()
    35. plt.subplots_adjust(left=0.09, bottom=0.20, right=0.94, top=0.90, wspace=0.2, hspace=0)
    36. plt.show()
    37. graph_data('TSLA')

    结果为:

    十、基本的自定义 - 图1