Python量化炒股常用的Matplotlib包
Matplotlib 是一个用于创建数据可视化的 Python 库,可以绘制各种类型的图表,包括折线图、柱状图、散点图、饼图等。它提供了类似于 MATLAB 的界面,使得用户可以轻松地生成高质量的图形。
Matplotlib 的主要特点:
- 灵活性: 可以绘制几乎所有类型的统计图表和科学图形。
- 可定制性: 支持对图形的各个元素(线条、标签、标题等)进行个性化定制。
- 交互性: 提供交互式功能,允许用户在图形上进行交互操作。
- 支持多种输出格式: 可以将图形保存为图片文件(PNG、JPG 等)或嵌入到 Jupyter Notebook 中。
- 广泛应用: 在数据分析、机器学习、科学研究等领域中被广泛使用。
示例代码:
绘制简单折线图:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.plot(x, y)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Simple Line Plot')
plt.show()
绘制柱状图:
data = {
'A': 10, 'B': 20, 'C': 15, 'D': 25}
names = list(data.keys())
values = list(data.values())
plt.bar(names, values)
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart')
plt.show()
绘制散点图:
import numpy as np
x = np.random.rand(50)
y = np.random.rand(50)
colors = np.random.rand(50)
sizes = 1000 * np.random.rand(50)
plt.scatter(x, y, c=colors, s=sizes, alpha=0.5)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Scatter Plot')
plt.colorbar()
plt.show()
通过 Matplotlib,用户可以根据不同需求快速生成各种类型的图表,帮助更好地理解数据、展示结果,并加强数据分析的可视化呈现。
figure()函数
figure()函数可以用于创建一个图形示例,即创建一个绘图的画布,其语法格式如下:
figure(num=None, figsize=None,dpi=None,facecolor=None,edgecolor=None,frameon=True)
figure()函数的各参数意义
figure() 函数是 Matplotlib 中用于创建新图形(Figure)的函数,它可以接受多个参数来调整图形的各种属性。以下是 figure() 函数中常用参数的意义:
num: 图形的编号(整数或字符串)。如果给定编号的图形已经存在,则将其激活并返回该图形对象;否则,将创建一个新的编号为 num 的图形。默认值为 None。
figsize: 以英寸为单位的图形大小,是一个二元组 (width, height)。例如 (6, 4) 表示宽度为 6 英寸、高度为 4 英寸。默认值为 (6.4, 4.8)。
dpi: 图形分辨率(每英寸点数),用于控制图形的清晰度。默认值为 100。
facecolor: 图形的背景颜色。可以使用颜色名称(如 'red')、RGB 元组(如 (0.2, 0.3, 0.4))或十六进制值(如 '#FFDD44')来指定。默认为 'white'。
edgecolor: 图形的边框颜色。与 facecolor 类似,可以使用颜色名称、RGB 元组或十六进制值来指定。默认为 'white'。
frameon: 控制是否绘制图形边框。如果设置为 False,则不绘制边框。默认为 True。
clear: 如果为 True,则在创建新图形之前清除当前图形。默认为 False。
Figure()函数示例代码:
要使用figure()函数,首先要导入Matplotlib中的pyplot模块。
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 36) # 设置x坐标值
y = 10 * x + 6 # 设置y坐标值
plt.figure() # 创建默认的画布
plt.plot(x, y) # 利用x和y坐标值在画布上绘制图形
plt.show() # 显示绘制的图形
首先导入Numpy包,并设置别名np;然后导入Matplotlib中的pyplot模块,并设置别名plt。接着定义变量x为一个数组,变量y为变量x的一次方程。然后调用figure()绘制默认的画布,接着在画布上绘制图形,最后显示绘制的图形。
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
在创建画布时,还可以进一步设置画布,修改plt.figure()如下:
plt.figure(figsize=(6,3), dpi=120,facecolor='pink')
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
通过调整 figure() 函数中的参数,可以自定义图形的外观和属性,使得生成的图形更符合需求和美观。
plot()函数
plot()函数用来绘制线条或标记的轴,其语法格式如下:
plot(*args, **kwargs)
参数是一个可变长度参数,允许多个x、y对和可选的格式字符串。
plot() 函数是 Matplotlib 中用于绘制图形的函数,主要用于绘制折线图、散点图等。plot() 函数接受多个参数来控制绘图的样式、颜色、标记等属性。以下是常用的 plot() 函数参数及其意义:
- x: x 轴数据值序列。
- y: y 轴数据值序列。
- color(或 c): 线条颜色。可以是颜色名称(如 'red')、RGB 元组(如 (0.2, 0.3, 0.4))或十六进制值(如 '#FFDD44')来指定。
- linestyle(或 ls): 线条风格。可选值有 '-'(实线)、'--'(虚线)、'-.'(点划线)、':'(点线)等。
- linewidth(或 lw): 线宽。
- marker: 数据点的标记类型。例如 'o'(圆圈)、'^'(三角形)、's'(正方形)等。
- markersize(或 ms): 标记大小。
- label: 曲线的标签,用于图例显示。
- alpha: 线条和标记的透明度。
- title: 图表标题。
- xlabel: x 轴标签。
- ylabel: y 轴标签。
利用plot()函数绘制图形
示例代码:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 绘制折线图
plt.plot(x, y, color='blue', linestyle='--', linewidth=2, marker='o', markersize=8, label='Data')
plt.title('Line Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.legend()
plt.show()
通过调整 plot() 函数中的参数,可以自定义绘制的线条样式、颜色、标记形状等,使得生成的图形更具吸引力和可读性。Matplotlib 提供了丰富的参数选项,可以满足用户对图形样式的个性化需求。
利用plot()函数显示股票的收盘价图形
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
df = get_price('002465.XSHE', start_date='2024-03-3', end_date='2024-04-10', frequency='daily')
myc1 = df['close']
plt.figure(figsize=(12,3))
plt.plot(myc1, 'ob')
plt.show()
df是海格通信(002465)2024年03月3日~2024年04月10日的报价信息。变量myc1为df的收盘价,然后利用plot()显示海格通信(002465)2024年-03月3日~2024年04月10日的收盘价图形。
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
利用dataframe的plot()函数显示股票的图形
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
df = get_price('002465.XSHE', start_date='2023-07-3', end_date='2024-04-25',frequency='daily')
df.close.plot(color='red')
df.open.plot(color='blue')
在这里设置收盘价为红色、开盘价为蓝色。
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
subplot()函数
利用subplot()函数可以在同一图中绘制不同的内容,其语法结构如下:
subplot(nrows, ncols, plotNum)
注意:subplot()可以规划figure划分为n个子图,但每条subplot命令只会创建一个子图。
subplot()函数的各参数意义
subplot() 函数是 Matplotlib 中用于创建多个子图(Subplot)的函数,可以将多个图形显示在同一画布上。该函数接受多个参数来控制子图的布局和样式。以下是常用的 subplot() 函数参数及其意义:
- nrows: 子图的行数。
- ncols: 子图的列数。
- index: 当前子图位置编号,从左上角开始,按照从左到右、从上到下的顺序递增。
- projection: 投影类型,用于指定绘制子图的类型,如 3D 图形等。
- polar: 是否使用极坐标。
- sharex(或 sharey): 控制子图之间的 x 轴(或 y 轴)共享。可选值为 'all'、'row'、'col' 或 False。
- subplot_kw: 字典形式的关键字参数,用于传递给 add_subplot() 方法。
示例代码:
import matplotlib.pyplot as plt
# 创建一个 2x2 的子图布局
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')
plt.subplot(2, 2, 2)
plt.plot([1, 2, 3, 4], [1, 2, 3, 4])
plt.title('Subplot 2')
plt.subplot(2, 1, 2)
plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
plt.title('Subplot 3')
plt.tight_layout() # 自动调整子图布局
plt.show()
利用subplot()函数绘制多个图形
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦和余弦曲线上的点的x和y坐标
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
y_tan = np.tan(x)
plt.figure(figsize=(12, 3))
# 建立subplot网格,高为2,宽为2
# 激活第一个subplot
plt.subplot(2, 2, 1)
# 绘制第一个图形
plt.plot(x, y_sin, 'ob')
plt.title('正弦曲线')
# 将第二个subplot激活,并绘制第二个图形
plt.subplot(2, 2, 2)
plt.plot(x, y_cos, '*m')
plt.title('余弦曲线')
# 将第二个subplot激活,并绘制第三个图形
plt.subplot(223)
plt.plot(x, y_tan, ':r')
plt.title('正切曲线')
# 展示图像
plt.show()
通过调用 subplot() 函数,并设定合适的参数,用户可以在同一画布上创建并展示多个子图,有助于比较不同数据之间的关系或趋势。Matplotlib 提供了丰富的子图布局选项,满足用户对多图显示的需求。
利用subplot()函数绘制股票图形
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
df = get_price('002465.XSHE', start_date = '2022-07-3', end_date='2024-04-25', frequency='daily')
myc1 = df['close'] # 收盘价
myc2 = df['volume'] # 成交量
plt.figure(figsize=(12, 6))
# 激活第一个subplot
plt.subplot(2, 1, 1)
plt.plot(myc1, '-b') # 实线蓝色绘制收盘价格
plt.subplot(2, 1, 2)
plt.plot(myc2, '-r') # 实线红色绘制成家量
plt.show()
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
add_axes()函数
Add_axes()函数为新增子区域,该区域可以坐落在figure内任意位置,且该区域可以任意设置大小。
subplot() 函数是 Matplotlib 中用于创建多个子图(Subplot)的函数,可以将多个图形显示在同一画布上。该函数接受多个参数来控制子图的布局和样式。以下是常用的 subplot() 函数参数及其意义:
- nrows: 子图的行数。
- ncols: 子图的列数。
- index: 当前子图位置编号,从左上角开始,按照从左到右、从上到下的顺序递增。
- projection: 投影类型,用于指定绘制子图的类型,如 3D 图形等。
- polar: 是否使用极坐标。
- sharex(或 sharey): 控制子图之间的 x 轴(或 y 轴)共享。可选值为 'all'、'row'、'col' 或 False。
- subplot_kw: 字典形式的关键字参数,用于传递给 add_subplot() 方法。
示例代码:
import matplotlib.pyplot as plt
# 创建一个 2x2 的子图布局
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.title('Subplot 1')
plt.subplot(2, 2, 2)
plt.plot([1, 2, 3, 4], [1, 2, 3, 4])
plt.title('Subplot 2')
plt.subplot(2, 1, 2)
plt.plot([1, 2, 3, 4], [10, 20, 25, 30])
plt.title('Subplot 3')
plt.tight_layout() # 自动调整子图布局
plt.show()
通过调用 subplot() 函数,并设定合适的参数,用户可以在同一画布上创建并展示多个子图,有助于比较不同数据之间的关系或趋势。Matplotlib 提供了丰富的子图布局选项,满足用户对多图显示的需求。
add_axes()函数的应用
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import matplotlib.pyplot as plt
# 新建figure
fig = plt.figure()
# 定义数据
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 3, 4, 2, 5, 8, 6]
# 新建区域ax1
# figure的百分比,从figure 10% 的位置开始绘制,宽高是figure的80%
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
# 获得绘制的句柄
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(x, y, 'c')
ax1.set_title('新建区域')
# 新增区域ax2,嵌套在ax1内
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
# 获得绘制的句柄
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(x, y, 'm')
ax2.set_title('嵌套区域')
plt.show()
add_axes方法有4个参数,分别是left、bottom、width和height。Left为左侧间距、bottom为底部间距、width为宽度、height为高度。需要注意的是,这4个参数的大小都在0到1之间。
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
利用add_axes()函数绘制股票图形
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 新建figure
fig = plt.figure()
# 定义数据
df = get_price('002465.XSHE', start_date='2022-07-3', end_date='2024-04-25', frequency='daily')
myc1 = df['close'] # 收盘价
# 新建区域ax1
# figure的百分比,从figure 10%的位置开始绘制,宽高是figure的80%
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
# 获得绘制的句柄
ax1 = fig.add_axes([left, bottom, width, height])
ax1.plot(myc1, 'c')
ax1.set_title('新建区域')
# 新增区域ax2,嵌套在ax1内
left, bottom, width, height = 0.2, 0.6, 0.25, 0.25
# 获得绘制的句柄
ax2 = fig.add_axes([left, bottom, width, height])
ax2.plot(myc1, 'm')
ax2.set_title('嵌套区域')
plt.show()
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
legend()函数
legend()函数用于为图像添加图题,其语法结构如下:
legend(*args, **kwargs)
legend() 函数是 Matplotlib 中用于添加图例到图形中的函数,它用于标识不同数据系列或曲线的含义。通过 legend() 函数,用户可以在图形中直观地展示数据标签,帮助观众更好地理解绘制的图表。
legend() 函数的常用参数:
- labels: 图例标签文本列表,用于指定每个数据系列的名称。
- loc: 图例位置,控制图例显示在图形的哪个位置。常见取值有 'upper right'、'lower left'、'center' 等。
- title: 图例标题文本。
- bbox_to_anchor: 控制图例的实际位置。是一个二元组 (x, y),表示图例左下角边界与画布左下角边界的偏移量。
- shadow: 是否显示图例的阴影。
- fontsize: 图例文本的字体大小。
- borderpad: 图例内边距大小。
- fancybox: 是否使用圆角框样式。
- framealpha: 图例框的透明度。
示例代码:
import matplotlib.pyplot as plt
# 绘制折线图并添加图例
x = [1, 2, 3, 4, 5]
y1 = [2, 4, 6, 8, 10]
y2 = [1, 3, 5, 7, 9]
plt.plot(x, y1, label='Series 1')
plt.plot(x, y2, label='Series 2')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Line Plot with Legend')
plt.legend(loc='upper right', title='Legend', fontsize='medium', shadow=True)
plt.show()
通过调用 legend() 函数,并设定合适的参数,用户可以将图例添加到绘制的图形中,使得图表更具可读性和信息传达效果。 Matplotlib 提供了丰富的选项来自定义图例的外观和位置,以满足用户对图例显示的需求。
利用legend()函数为绘制图形添加标题
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1,25)
flg, ax = plt.subplots()
ax.plot(x, x**3, label="y = x**3")
ax.plot(x, x**4, label="y = x**4")
ax.legend(loc=2); # 左上角
ax.set_xlabel("图形的x轴")
ax.set_ylabel("图形的y轴")
ax.set_title("利用legend()函数为绘制图形添加标题")
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
这里发现,x轴、y轴及标题标签都比较小。下面来改变图题字体大小。具体代码如下:
matplotlib.rcParams.update({
'font.size': 18, 'font.family': 'serif'})
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
利用legend()函数为股票图形添加图题
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = get_price('002465.XSHE', start_date='2022-07-3',end_date='2024-04-25',frequency='daily')
myc1 = df['close'] # 收盘价
myc2 = df['high'] # 最高价
matplotlib.rcParams.update({
'font.size': 15, 'font.family':'serif'})
fig, ax = plt.subplots()
ax.plot(myc1, label='海格通信的收盘价')
ax.plot(myc2, label='海格通信的最高价')
ax.legend(loc=2); # 左上角
ax.set_xlabel('海格通信的日期')
ax.set_ylabel('海格通信收盘价和最高价')
ax.set_title('海格通信的日线图')
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
grid()函数
用坐标对象中的grid()函数可以使用和取消网格线,也可以用plot函数中同样的关键字参数来定制网格样式。
利用grid()函数为绘制图形添加网格线
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1, 25)
fig, axes = plt.subplots(1, 2, figsize=(10, 3))
# 默认网格外观
axes[0].plot(x, x**1.2, x, x**2, lw=2)
axes[0].grid(True)
# 用户定义的网格外观
axes[1].plot(x, x**2, x, x**2.3, lw=3)
axes[1].grid(color='r', alpha=0.5, linestyle='dashed', linewidth=0.5)
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图:
利用grid()函数为绘制股票图形添加网格线
单击聚宽JointQuant量化炒股平台中的“策略研究/研究环境”命令,进入Jupyter Notebook的研究平台。然后单击“新建”按钮,创建Python3文件,输入如下代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = get_price('002465.XSHE', start_date='2023-10-3', end_date='2024-04-25', frequency='daily')
myc1 = df['close'] # 收盘价
myc2 = df['high'] # 最高价
myc3 = df['open'] # 开盘价
myc4 = df['low'] # 最低价
matplotlib.rcParams.update({
'font.size': 12, 'font.family': 'serif'})
fig, ax = plt.subplots()
ax.plot(myc1, 'b', label='海格通信的收盘价')
ax.plot(myc2, 'g', label='海格通信的最高价')
ax.plot(myc3, 'r', label='海格通信的开盘价')
ax.plot(myc4, 'k', label='海格通信的最低价')
ax.grid(True)
ax.legend(loc=3); # 左下角
ax.set_xlabel('海格通信的日期')
ax.set_ylabel('海格通信的4种价格')
ax.set_title('海格通信的日线图')
单击工具栏中的运行按钮,快捷键(shift+enter),运行结果如下图: