对于折线图的绘制,在之前博客的示例中都有使用,在面向对象绘图方法中,一般是创建axes实例后调用plot()方法实现折线图绘制,并通过传递各种参数实现对图像的设置。 散点图的绘制通过axes实例的scatter()方法来实现。scatter()方法的参数和参数取值与绘制折线图的plot()方法基本一致,所以本文将两种图放在一起进行介绍。
In [1]:
from matplotlib import pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams[\'font.sans-serif\'] = [\'SimHei\'] # 中文字体支持
对于折线图的绘制,在之前博客的示例中都有使用,在面向对象绘图方法中,一般是创建axes实例后调用plot()方法实现折线图绘制,并通过传递各种参数实现对图像的设置。 散点图的绘制通过axes实例的scatter()方法来实现。scatter()方法的参数和参数取值与绘制折线图的plot()方法基本一致,所以本文将两种图放在一起进行介绍。
1 多图像绘制¶
在一个axes中,可以绘制多条折线图,秩序多次调用plot()或者scatter()方法即可。
In [2]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig, axes = plt.subplots(1, 2, figsize=(10, 3), tight_layout=True)
# 折线图
axes[0].set_title(\'图1 折 线 图\')
axes[0].plot(x1, y1)
axes[0].plot(x1, y1+0.5)
# 散点图
axes[1].set_title(\'图2 散 点 图\')
axes[1].scatter(x1, y1)
axes[1].scatter(x1, y1+0.5)
plt.show()
2 颜色¶
颜色通过color参数来设置,color参数的值可以使颜色的英文全称,例如\'green\'、\'red\',也可以是简写,例如\'g\'表示\'green\'、\'r表示\'red\',一些常见颜色全称和简写如下所示。
-
\'b\', blue -
\'g\', green -
\'r\', red -
\'c\', cyan -
\'m\', magenta -
\'y\', yellow -
\'k\', black -
\'w\', white
如果觉得这些常见的颜色不够用,设置可以用16进制字符来表示颜色。
In [3]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig, axes = plt.subplots(1, 2, figsize=(10, 3), tight_layout=True)
# 折线图
axes[0].set_title(\'图1 折 线 图\')
axes[0].plot(x1, y1, color=\'red\') # 红色
axes[0].plot(x1, y1+0.5, color=\'g\') # 绿色
axes[0].plot(x1, y1+1, color=\'#008000\') # 也是绿色
# 散点图
axes[1].set_title(\'图2 散 点 图\')
axes[1].scatter(x1, y1, color=\'red\') # 红色
axes[1].scatter(x1, y1+0.5, color=\'g\') # 绿色
axes[1].scatter(x1, y1+1, color=\'#008000\') # 也是绿色
plt.show()
3 图例¶
axes实例中提供了legend()方法用于添加图例,legend()方法会将元素的label字符串设置为图例,如下面的示例所示,有两种参数传递方式来设置label。除了label外,还可以传递loc参数来设置图例的位置,loc参数值可以使代表位置的字符串,也可以是对应的整数,其对应关系如下所示:
=============== =============
Location String Location Code
=============== =============
\'best\' 0
\'upper right\' 1
\'upper left\' 2
\'lower left\' 3
\'lower right\' 4
\'right\' 5
\'center left\' 6
\'center right\' 7
\'lower center\' 8
\'upper center\' 9
\'center\' 10
=============== =============
In [4]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig, axes = plt.subplots(3, 2, figsize=(10, 8), tight_layout=True)
axes[0, 0].plot(x1, y1, label=\'线1\') # 传递label参数
axes[0, 0].plot(x1, y1+0.5, label=\'线2\') # 传递label参数
axes[0, 0].legend(loc=\'best\') # 默认就是best
axes[1, 0].plot(x1, y1, label=\'线1\') # 传递label参数
axes[1, 0].plot(x1, y1+0.5, label=\'线2\') # 传递label参数
axes[1, 0].legend(loc=\'lower right\')
line1, = axes[2, 0].plot(x1, y1) # 注意,等号前面有逗号
line2, = axes[2, 0].plot(x1, y1+0.5)
axes[2, 0].legend(handles=(line1, line2), labels=(\'线1\', \'线2\'), loc=\'upper center\')
axes[0, 1].scatter(x1, y1, label=\'第一组\') # 传递label参数
axes[0, 1].scatter(x1, y1+0.5, label=\'第二组\') # 传递label参数
axes[0, 1].legend(loc=\'best\') # 默认就是best
axes[1, 1].scatter(x1, y1, label=\'第一组\') # 传递label参数
axes[1, 1].scatter(x1, y1+0.5, label=\'第二组\') # 传递label参数
axes[1, 1].legend(loc=\'lower right\')
group1 = axes[2, 1].scatter(x1, y1) # 注意,等号前面没有逗号,这是与plot()方法不同的
group2 = axes[2, 1].scatter(x1, y1+0.5)
axes[2, 1].legend(handles=(group1, group2), labels=(\'第一组\', \'第二组\'), loc=\'upper center\')
plt.show()
4 线型¶
通过传递linestyle或ls参数可以设置线型,参数包含一下几种取值:
============= ===============================
character description
============= ===============================
``\'-\'`` 实线(默认)
``\'--\'`` 长虚线
``\'-.\'`` 点划线
``\':\'`` 虚线
============= ===============================
In [5]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.plot(x1, y1, color=\'black\', label=\'-\', ls=\'-\') # 默认线性就是\'-\'
axes.plot(x1, y1+0.5, color=\'green\', label=\'--\',ls=\'--\')
axes.plot(x1, y1+1, color=\'blue\', label=\'-.\', linestyle=\'-.\')
axes.plot(x1, y1+1.5, color=\'red\', label=\':\', ls=\':\')
axes.legend()
plt.show()
5 标记(形状)¶
参数marker可以在图形中添加标记,标记参数值和对应的标记类型如下所示:
============= ===============================
character description
============= ===============================
``\'.\'`` 点
``\',\'`` 像素点
``\'o\'`` 圆
``\'v\'`` 向下三角形
``\'^\'`` 向上三角形
``\'<\'`` 向左三角形
``\'>\'`` 向右三角形
``\'1\'`` 向下T形
``\'2\'`` 向上T形
``\'3\'`` 向左T形
``\'4\'`` 向右T形
``\'s\'`` 正方形
``\'p\'`` 五边形
``\'*\'`` 星型
``\'h\'`` 六边形1
``\'H\'`` 六边形2
``\'+\'`` 十字形
``\'x\'`` x 形
``\'D\'`` 大菱形
``\'d\'`` 小菱形
``\'|\'`` 竖线
``\'_\'`` 横线
============= ===============================
In [6]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig, axes = plt.subplots(1, 2, figsize=(10, 3), tight_layout=True)
axes[0].plot(x1, y1, color=\'black\', label=\'.\', marker=\'.\')
axes[0].plot(x1, y1+0.5, color=\'green\', label=\',\', marker=\',\')
axes[0].plot(x1, y1+1, color=\'blue\', label=\'o\', marker=\'|\')
axes[0].plot(x1, y1+1.5, color=\'red\', label=\'v\', marker=\'_\')
axes[0].legend()
axes[1].scatter(x1, y1, color=\'black\', label=\'.\', marker=\'.\')
axes[1].scatter(x1, y1+0.5, color=\'green\', label=\',\', marker=\',\')
axes[1].scatter(x1, y1+1, color=\'blue\', label=\'o\', marker=\'|\')
axes[1].scatter(x1, y1+1.5, color=\'red\', label=\'v\', marker=\'_\')
axes[1].legend()
plt.show()
绘制折线图时,在传递了marker参数后,也可以通过以下参数进一步设置标记的样式:
- markeredgecolor 或 mec : 边框颜色
- markeredgewidth 或 mew : 边框粗细
- markerfacecolor 或 mfc :填充色
- markersize 或 ms :大小
In [7]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.plot(x1, y1, color=\'blue\', label=\'线1\', marker=\'*\',markersize=15, markerfacecolor=\'green\',markeredgecolor=\'red\', markeredgewidth=3) # 线1
axes.plot(x1, y1+0.5, color=\'blue\', label=\'线2\', marker=\'*\',markersize=15, markerfacecolor=\'green\',markeredgecolor=\'red\') # 线2
axes.plot(x1, y1+1, color=\'blue\', label=\'线3\', marker=\'*\',markersize=5, markerfacecolor=\'red\') # 线3
axes.plot(x1, y1+1.5, color=\'blue\', label=\'线4\',marker=\'*\',markersize=10, markerfacecolor=\'red\') # 线4
axes.legend()
plt.show()
散点图修改点的样式时,参数与折线图有些许不同:
- s : 大小
- color 或 c : 填充色
- alpha:透明度
- linewidths:边框粗细
- edgecolors:边框颜色
In [8]:
x1 = np.linspace(0.0, 5.0, 10)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
fig = plt.figure()
axes = fig.add_subplot(1, 1, 1)
axes.scatter(x1, y1, color=\'green\', label=\'第一组\', marker=\'*\',s=105,edgecolors=\'red\', linewidths=5)
axes.scatter(x1, y1+0.5, color=\'green\', label=\'第二组\', marker=\'*\',s=15)
axes.scatter(x1, y1+1, color=\'blue\', label=\'第三组\', marker=\'*\',s=5)
axes.scatter(x1, y1+1.5, color=\'blue\', label=\'第四组\',marker=\'*\',s=10)
axes.legend()
plt.show()
6 显示坐标¶
显示坐标可以用添加text的方法实现:
In [9]:
x1 = [i*0.1 for i in range(0, 50, 5)]
y1 = [i*i for i in x1]
fig, axes = plt.subplots(1, 2, figsize=(10, 3), tight_layout=True)
axes[0].plot(x1, y1, color=\'red\', label=\'.\', marker=\'.\') # 默认线性就是\'-\'
axes[1].scatter(x1, y1, color=\'blue\', label=\'.\', marker=\'*\') # 默认线性就是\'-\'
for a, b in zip(x1, y1):
axes[0].text(a, b, (a,b),ha=\'left\', va=\'top\', fontsize=10)
axes[1].text(a, b, (a,b),ha=\'left\', va=\'top\', fontsize=10)
plt.show()