1.matplotlib的基本认识
导入方式:
import matplotlib.pyplot as plt
plt.savefig()将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量。
plt.plot(x,y)只有一个输出列表或数组是,参数被当作Y轴,X轴以索引自动生成。当有两个以上参数时,按照X轴和Y轴顺序绘制数据点。plt.axis()指定X轴和Y轴的起始位置。
plt.subplot(nrows,ncols,plot_number)在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域。
2.pyplot的plot()函数
plt.plot(x, y, format_string, **kwargs)
- x:X轴数据,列表或数组,可选(绘制多条曲线时,各条曲线的x不能省略)
- y:Y轴数据,列表或数组
- format_string:控制曲线的格式字符串(由颜色字符、风格字符和标记字符组成),可选
颜色字符 颜色字符 说明 颜色字符 说明 'b' 蓝色 'm' 洋红色 magenta 'g' 绿色 'y' 黄色 'r' 红色 'k' 黑色 'c' 青绿色 cyan 'w' 白色 '#008000' RGB某颜色(十六进制色彩) '0.8' 灰度值字符串 风格字符 风格字符 说明 风格字符 说明 '-' 实线 ':' 虚线 '--' 破折线 '' ' ' 无线条 '-.' 点划线 标记字符 标记字符 说明 标记字符 说明 '.' 点标记 's' 实心方形标记 ',' 像素标记(极小点) 'p' 实心五角标记 'o' 实心圈标记 '*' 星形标记 'v' 倒三角标记 'h' 竖六边形标记 '^' 上三角标记 'H' 横六边形标记 '>' 右三角标记 '+' 十字标记 '<' 左三角标记 'x' x标记 '1' 下花三角标记 'D' 菱形标记 '2' 上花三角标记 'd' 瘦菱形标记 '3' 左花三角标记 '|' 垂直线标记 '4' 右花三角标记 - **kwargs:第二组或更多(x, y, format_string)
- color:控制颜色,color='green'
- linestyle:线条风格,linestyle='dashed'
- marker:标记风格,marker='o'
- markerfacecolor:标记颜色,markerfacecolor='blue'
- marksize,标记尺寸,markerfacecolor=20
案例:基本的画图使用
单条曲线
多条曲线
*****
开始值,停止值,产生个数
3.pyplot的中文显示
rcParams的属性
属性 | 说明 |
---|---|
'font.family' | 用于显示字体的名字 |
'font.style' | 字体风格,正常'normal'或斜体'italic' |
'font.size' | 字体大小,整数字号或者'large'、'x-small' |
在有中文输出的地方,增加一个属性:fontproperties
pyplot的文本显示函数
函数 | 说明 |
---|---|
plt.xlabel() | 对X轴增加文本标签 |
plt.ylabel() | 对Y轴增加文本标签 |
plt.title() | 对图形整体增加文本标签 |
plt.text() | 在任意位置增加文本 |
plt.annotate() | 在图形中增加带箭头的注解 |
案例:
pyplot的子绘图区域:plt.subplot2grid()
Matplotlib figure图形对象 :
from matplotlib import pyplot as plt
#创建图形对象
fig = plt.figure()
该函数的参数值,如下所示:
add_axes() 的参数值是一个序列,序列中的 4 个数字分别对应图形的左侧,底部,宽度,和高度,且每个数字必须介于 0 到 1 之间。
说明 | |
---|---|
figsize | 指定画布的大小,(宽度,高度),单位为英寸。 |
dpi | 指定绘图对象的分辨率,即每英寸多少个像素,默认值为80。 |
facecolor | 背景颜色。 |
dgecolor | 边框颜色。 |
frameon | 是否显示边框。 |
Matplotlib subplots()函数详解:
matplotlib.pyplot
模块提供了一个 subplots() 函数,它的使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象,而 subplot() 只是创建一个包含子图区域的画布。
subplots 的函数格式如下:
fig , ax = plt.subplots(nrows, ncols)
nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列数。
函数的返回值是一个元组,包括一个图形对象和所有的 axes 对象。其中 axes 对象的数量等于 nrows * ncols,且每个 axes 对象均可通过索引值访问(从1开始)。
下面我们创建了一个 2 行 2 列的子图,并在每个子图中显示 4 个不同的图像。
import matplotlib.pyplot as plt
fig,a = plt.subplots(2,2)
import numpy as np
x = np.arange(1,5)
#绘制平方函数
a[0][0].plot(x,x*x)
a[0][0].set_title('square')
#绘制平方根图像
a[0][1].plot(x,np.sqrt(x))
a[0][1].set_title('square root')
#绘制指数函数
a[1][0].plot(x,np.exp(x))
a[1][0].set_title('exp')
#绘制对数函数
a[1][1].plot(x,np.log10(x))
a[1][1].set_title('log')
plt.show()
上述代码的输出结果如下:
Matplotlib subplot2grid()函数详解:
matplotlib.pyplot
模块提供了 subplot2grid() ,该函数能够在画布的特定位置创建 axes 对象(即绘图区域)。不仅如此,它还可以使用不同数量的行、列来创建跨度不同的绘图区域。与 subplot() 和 subplots() 函数不同,subplot2gird() 函数以非等分的形式对画布进行切分,并按照绘图区域的大小来展示最终绘图结果。
函数语法格式如下:
plt.subplot2grid(shape, location, rowspan, colspan)
参数含义如下:
- shape:把该参数值规定的网格区域作为绘图区域;
- location:在给定的位置绘制图形,初始位置 (0,0) 表示第1行第1列;
- rowsapan/colspan:这两个参数用来设置让子区跨越几行几列。
下面,在画布(figure)中添加了行、列跨度均不相同的绘图子区域,然后在每个绘图区上,绘制不同的图形。示例代码如下:
import matplotlib.pyplot as plt
#使用 colspan指定列,使用rowspan指定行
a1 = plt.subplot2grid((3,3),(0,0),colspan = 2)
a2 = plt.subplot2grid((3,3),(0,2), rowspan = 3)
a3 = plt.subplot2grid((3,3),(1,0),rowspan = 2, colspan = 2)
import numpy as np
x = np.arange(1,10)
a2.plot(x, x*x)
a2.set_title('square')
a1.plot(x, np.exp(x))
a1.set_title('exp')
a3.plot(x, np.log(x))
a3.set_title('log')
plt.tight_layout()
plt.show()
Matplotlib grid()设置网格格式:
grid() 的函数使用格式如下:
grid(color='b', ls = '-.', lw = 0.25)
参数含义如下:
- color:表示网格线的颜色;
- ls:表示网格线的样式;
- lw:表示网格线的宽度;
Matplotlib坐标轴范围:
set_xlim() 和 set_ylim() 对 x、y 轴的数值范围进行设置。
import matplotlib.pyplot as plt
fig = plt.figure()
a1 = fig.add_axes([0,0,1,1])
import numpy as np
x = np.arange(1,10)
a1.plot(x, np.exp(x),'r')
a1.set_title('exp')
#设置y轴
a1.set_ylim(0,10000)
#设置x轴
a1.set_xlim(0,10)
plt.show()
Matplotlib中文乱码解决方案:
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题
Matplotlib柱状图:
x | 一个标量序列,代表柱状图的x坐标,默认x取值是每个柱状图所在的中点位置,或者也可以是柱状图左侧边缘位置。 |
height | 一个标量或者是标量序列,代表柱状图的高度。 |
width | 可选参数,标量或类数组,柱状图的默认宽度值为 0.8。 |
bottom | 可选参数,标量或类数组,柱状图的y坐标默认为None。 |
algin | 有两个可选项 {"center","edge"},默认为 'center',该参数决定 x 值位于柱状图的位置。 |
案例说明
import matplotlib.pyplot as plt
#创建图形对象
fig = plt.figure()
#添加子图区域,参数值表示[left, bottom, width, height ]
ax = fig.add_axes([0,0,1,1])
#准备数据
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
#绘制柱状图
ax.bar(langs,students)
plt.show()
Matplotlib直方图:
matplotlib.pyplot.hist()
该函数的参数说明如下:
x | 必填参数,数组或者数组序列。 |
bins | 可选参数,整数或者序列,bins 表示每一个间隔的边缘(起点和终点)默认会生成10个间隔。 |
range | 指定全局间隔的下限与上限值 (min,max),元组类型,默认值为 None。 |
density | 如果为 True,返回概率密度直方图;默认为 False,返回相应区间元素的个数的直方图。 |
histtype | 要绘制的直方图类型,默认值为“bar”,可选值有 barstacked(堆叠条形图)、step(未填充的阶梯图)、stepfilled(已填充的阶梯图)。 |
from matplotlib import pyplot as plt
import numpy as np
#创建图形对象和轴域对象
fig,ax = plt.subplots(1,1)
a = np.array([22,87,5,43,56,73,55,54,11,20,51,5,79,31,27])
#绘制直方图
ax.hist(a, bins = [0,25,50,75,100])
#设置坐标轴
ax.set_title("histogram of result")
ax.set_xticks([0,25,50,75,100])
ax.set_xlabel('marks')
ax.set_ylabel('no.of students')
plt.show()
Matplotlib饼状图:
pie() 函数的参数说明如下:
X | 数组序列,数组元素对应扇形区域的数量大小。 |
labels | 列表字符串序列,为每个扇形区域备注一个标签名字。 |
color | 为每个扇形区域设置颜色,默认按照颜色周期自动设置。 |
autopct | 格式化字符串"fmt%pct",使用百分比的格式设置每个扇形 区的标签,并将其放置在扇形区内。 |
案例说明
Matplotlib散点图:
案例说明
Matplotlib极坐标图:
案例说明
Matplotlib综合案例: