定义图表类型——柱状图、线性图和堆积柱状图
matplotlib绘图基础知识
from matplotlib.pyplot import *
Matplotlib中的基本图标包括以下元素:
- x轴和y轴:水平和垂直的轴线
- x轴和y轴刻度:刻度标示坐标轴的分隔,包括最小刻度和最大刻度
- x轴和y轴刻度标签:表示特定坐标轴的值
- 绘图区域:实际绘图的区域
- **plot()**可以只传入y轴的值,**plot()**为x轴提供默认值。
- **plot()**可以同时传入x轴的值和y轴的值。
matplotlib绘制柱状图、线性图和堆积柱状图
- 绘制直线图
plot(x,y)
- 绘制直方图
bar(x,y)
- 绘制水平的直方图
barh(x,y)
- 绘制箱型图
boxplot(x)
- 绘制水平箱型图
boxplot(x,vert=False)
- 绘制散点图
scatter(x,y)
工作原理
- 调用**figure()**方法,创建一个新的图表
- 调用**subplot(n,p,q)或subplot(npq)**方法把图表分割成n*p的网格,其中第一个参数是行数,第二个参数是列数,第三个参数表示图形的标号。
- 用简单命令创建垂直柱状图(bar())、水平柱状图(barh())、箱线图**(boxplot())、散点图(scatter())。对于堆叠柱状图,需要把两个柱状图方法调用连在一起。通过设置参数bottom=?**(此值为第一个柱状图的y值),把第二个柱状图和前一个连起来形成堆叠柱状图。
补充说明
箱型图
几个最重要的显示选项
- 首先我们可以添加从箱体延伸出来的箱须来展示数据集合的整个范围
- 箱体和箱须主要用于表现一个或多个数据集合中数据的变化,容易对数据进行对比而且易于理解
- 在同一个箱线图中可以呈现5种数据:
- 最小值
- 第二四分位数:其以下为数据集合中较低的25%数据
- 中值
- 第三四分位数:其以上为数据集合中较高的25%数据
- 最大值
箱型图详解可参考:箱型图介绍,绘制
简单的正弦图和余弦图
我们用 -Pi 到 Pi 之间相同间隔的 256 个点来计算正弦值和余弦值。
import matplotlib.pyplot as plt
import numpy as np
# 生成在(-pi,pi)之间均匀分布的 256 个点
x = np.linspace(-np.pi, np.pi, 256, endpoint=True)
# 计算 cos(x)
y = np.cos(x)
# 计算 sin(x)
y1 = np.sin(x)
# 绘制 cos 和 sin
plt.plot(x, y)
plt.plot(x, y1)
plt.show()
以这个简单图表为基础,可以进一步定制化来添加更多的信息,并且让坐标轴及其边界更精确些。
# 定义标题
plt.title("$\sin$ 和 $\cos$ 函数")
# 设置 x 轴的范围
plt.xlim(-3.0, 3.0)
# 设置 y 轴的范围
plt.ylim(-1.0, 1.0)
# 在特定值处设置记号
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
上述代码中,用如 sin ,或 −π 的表达式在图表中写上希腊字母,是一种 Latex 语法。
设置坐标轴的长度和范围
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
操作步骤
- 调用不带参数的 axis() 方法将返回坐标轴的默认值。在 jupyter notebook 的交互模式下,将会显示一个只有坐标轴的空白图
plt.axis()
#默认值(0.0, 1.0, 0.0, 1.0),分别表示xmin、xmax、ymin和ymax
- 可以设置x轴和y轴的值
matplotlib.rcParams['axes.unicode_minus']=False
l = [-1, 1, -10, 10]
plt.axis(l)
工作原理
-
如果不使用 axis() 或者其他参数设置,matplotlib 会自动使用最小值,刚好可以让我们在一个图中看到所有的数据点。
-
如果设置 axis() 的范围比数据集合中的最大值小,matplotlib 按照设置执行,这样就无法在图中看到所有的数据点。这可能会引起困惑甚至是错误,因为我们认为我们看到了绘制的所有东西。避免这种情况发生的一种方法是调用 autoscale(((matplotlib.pyplot.autoscale()) 方法,该方法会计算坐标轴的最佳大小以适应数据的显示。
-
如果想向相同图形中添加新的坐标轴,可以调用 matplotlib.pyplot.axes() 方法。我们通常会在方法中传入一些属性,例如 rect,归一化单位 (0,1) 下的 left,bottom,width,height 四个属性,或者 axisbg,该参数指定坐标轴的背景颜色。
-
还有其他一些参数允许我们对新添加的坐标轴进行设置,如 sharex/sharey 参数,
接收其他坐标轴的值并让当前坐标轴 (x/y) 共享相同的值;或者 polar 参数,指定是否使用极坐标轴 (polar axes)。 -
添加新坐标轴是有用的,例如,如果需要几个不同的视图来表达相同的数据的不同属性值,这就需要在一张图中组合显示多个图表。
设置图表的线型、属性和格式化字符串
操作步骤
改变图表中的线条
- 最常用的方式是向方法传入关键字参数来指定线型
- **plot()**方法
- **step()**方法
plot(x, y, lineswidth=1.5)
#对 plot() 方法的调用返回一个线条的实例( matplotlib.lines.Line2D ),可以在这个实例上用一系列的 setter 方法来设置不同的属性。
line = plot(x, y)
line.set_linewidth(1.5)
step(lines, linewidth=1.5)
工作原理
用来改变线条的所有属性都包含在 matplotlib.lines.Line2D 类中,下表列举了一些属性:
属性 | 类型 | 描述 |
---|---|---|
alpha | 浮点数 | alpha值用来设置混色,并不是所有后端都支持 |
color 或 c | 任意matplotlib颜色 | 设置线条颜色 |
dashes | 以点为单位的on/off序列 | 设置破折号序列,如果seq为空或者seq=[None,None],linestyle将被设置为solid |
label | 任意字符串 | 为图例设置标签值 |
linestyle 或 ls | [ ‘-’ | ‘–’ |
linewidth 或 lw | 以点为单位的浮点值 | 设置以点为单位的线宽 |
marker | [ 7 | 4 |
markeredgecolor 或 mec | 任意matplotlib颜色 | 设置标记的边缘颜色 |
markeredgewidth 或 mew | 以点为单位的浮点值 | 设置以点为单位的标记边缘宽度 |
markerfacecolor 或 mfc | 任意matplotlib颜色 | 设置标记的颜色 |
markeregecolor 或 mew | 任意matplotlib颜色 | 设置标记的边缘颜色 |
markersize 或 ms | 浮点值 | 设置以点为单位的标记大小 |
solid_capstyle | [ ‘butt’ | ‘round’ |
solid_joinstyle | [ ‘miter’ | ‘round’ |
visible | [ True | False ] |
xdata | np.array | 设置x的np.array |
ydata | np.array | 设置y的np.array |
Zorder | 任意数字 | 为 artist 设置 z 轴顺序,低 Zorder 的 artist 会先绘制,如果在屏幕上x轴水平向右,y 轴垂直向上,那么 z 轴将指向观察者。这样,0 表示在屏幕上,1 表示上面的一层,以此类推。 |
线条风格
线条风格 | 描述 |
---|---|
’-‘ | 实线 |
’–‘ | 破折线 |
’-.‘ | 点划线 |
’:‘ | 虚线 |
’None‘,’ ‘,’‘ | 什么都不画 |
线条标记
线条风格 | 描述 | 线条风格 | 描述 |
---|---|---|---|
‘o’ | 圆圈 | ’_‘ | 水平线 |
‘.’ | 点 | ’,‘ | 像素 |
‘h’ | 六边形1 | ’H‘ | 六边形2 |
‘*’ | 星号 | ’8‘ | 八边形 |
‘d’ | 小菱形 | ’D‘ | 菱形 |
‘p’ | 五边形 | ’s‘ | 正方形 |
‘v’ | 一角朝下的三角形 | ’^‘ | 一角朝上的三角形 |
‘<’ | 一角朝左的三角形 | ’>‘ | 一角朝右的三角形 |
‘+’ | 加号 | ’x‘ | X |
‘’ | 竖线 | ’‘’, ‘None’, ’ ', None‘ | 无 |
- 颜色
可以通过调用 matplotlib.pyplot.colors() 得到 matplotlib 支持的所有颜色,如下表所示:
|别名| 颜色 |别名| 颜色 |
|–|–|–|–|
| b |蓝色 |g |绿色 |
| r |红色 |y |黄色 |
| c |青色 |k |黑色 |
| m |洋红色 |w |白色 |
如果这些基本的颜色不够用——随着进一步深入,肯定会不够用——可以用两种其他方式来定义颜色值。一种方法是使用 HTML 十六进制字符串。
color = ‘#eeefff’
还可以使用合法的 HTML 颜色名字 ( 'red ', 'chartreuse ')。也可以传入一个归一化到 [0, 1] 的 RGB 元组。
很多方法接受颜色参数,如 title()。
title(‘Title in a custom color’, color=‘#123456’)
- 背景色
通过向如 matplotlib.pyplot.axes() 或者 matplotlib.pyplot.subplot() 这样的方法提供一个 axisbg 参数,我们可以指定坐标轴的背景色。
subplot(111,axisbg = (0.1843, 0.3098, 0.3098))