目录
六,使用plt.xtick()和plt.ytick()设置坐标值及图例显示
七,使用subplot()和subplots()进行画布分区
Matplotlib是一个 Python 的 2D绘图库。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。常用做数据可视化。
以面向对象的方法看待matplotlib画图会更加容易学会。如下图,比如boxplot作为的是图的标题,可看成是标题对象,具有字体大小、颜色、字体类型、位置等属性,他与他底层的画布通过一种方法进行定位。
plt指的是from matplotlib import pyplot as plt,他是绘图模块,即.py文件。
plt.plot()的原型如下:plot([x], y, [fmt], data=None, **kwargs),第一个和第二个参数是位置参数,必须是长度相同的数值容器类型,如:列表、ndarray、元组、Series()等。[x]表示该参数可以不传,默认为0,1,2,3……。y也就是纵坐标必须传(没有数据画不了图)。如[0,2],[1,4]就是对应的一组,作为二维画图,相当于x坐标的取值,y坐标的取值
[fmt]为格式化参数,对线条对象的属性进行修改。例如:plot(x, y, 'bo-') # 蓝色圆点实线;可见bo-就是各种线条属性取值的第一个字母。假如不熟悉的话,可以使用关键字参数进行传值被kwargs捕获,如:plot(x,y3,color='#900302',marker='+',linestyle='-')。
也可以传递很多组数据,plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)。这样会在同一个画布上进行绘制,如:plt.plot([0,2],[1,4],[0,0],[1,5])。
- import matplotlib.pyplot as plt
- #将(0,1)点和(2,4)连起来
- plt.plot([0,2],[1,4])
- plt.show()
plt.plot()的作用就是在(x,y)出进行画点成线,所以他的返回值是一个点聚成的线条对象。如果一个画布有多条线,返回值就有多个对象(line2d对象)。
- import matplotlib.pyplot as plt
- import numpy as np
- x=np.arange(-5*np.pi,5*np.pi,0.01)
- y=np.sin(x)/x
- a,= plt.plot(x,y) # a接收了线条对象,使用set方法进行属性设置
- a.set(color='r', linewidth=2.0)
- plt.show()
效果图如下:这条红线就是线条对象,他位于底层画布之上,画布由plt.figure()生成。
matplotlib并不直接支持中文,而是需要进行初始设置。
- plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
- plt.title('Numbers',fontsize=24) #设置标题
plt.title()返回的是matplotlib.text对象,可以使用set方法对其属性进行设置。
- import matplotlib.pyplot as plt
- plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
- x=[i for i in range(1,6)]
- squares=[i*i for i in x]
- plt.plot(x,squares,linewidth=3)
- ti=plt.title(label='折线图')#'折线图',fontsize=24
- ti.set(fontsize=24,color='r')
- plt.xlabel('datas',fontsize=24)
- plt.ylabel('squares',fontsize=24)
- plt.show()
效果图如下:
设置代码如下:
- import matplotlib.pyplot as plt
- import numpy as np
- #风格的设置
- #查看有哪些风格
- print(plt.style.available)
- #设置风格
- plt.style.use('ggplot')
- x=np.linspace(-10,10)
- plt.plot(x,np.sin(x))
- import matplotlib.pyplot as plt
- datas=[1,2,3,4,5]
- squares=[1,4,9,16,25]
- plt.plot(datas,squares,linewidth=5) #设置线条宽度
- #设置中文乱码问题
- plt.rcParams['font.sans-serif'] = ['SimHei']
- #设置图标标题,并在坐标轴上添加标签
- plt.title('标题设置',fontsize=24)
- plt.xlabel('x轴',fontsize=14)
- plt.ylabel('y轴',fontsize=14)
- plt.show()
同样的,可以对返回的对象使用set方法进行属性设置。
- import matplotlib.pyplot as plt
- import numpy as np
- plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
- plt.style.use('classic')
- max_temperature = [26, 30, 31, 32, 33]
- min_temperature = [12, 16, 16, 17, 18]
- x = range(5)
- plt.rcParams['font.family'] = ['SimHei']
- x_ticks = ['星期{}'.format(i) for i in
- range(1, 6)]
- plt.title('某年某周第N周的温度')
- plt.xlabel('周')
- plt.ylabel('温度:单位(℃)')
- # 设置x轴标签
- plt.xticks(x, x_ticks)
- # 填充数据
- plt.plot(x, max_temperature, label='最高温')
- plt.plot(x, min_temperature, label='最低温')
- # 显示图例
- plt.legend(loc=2)
- plt.show()
效果如图:
画布分区指的是在一张画布上按照行和列分成各个分区每个分区可绘制不同的图。
plt.subplot(221) #设置2行2列的分区,在从左往右数的第一个分区进行绘制
- fig,ax=plt.subplots(nrows=2,ncols=2)
- # subplotsO()函数返回一个画布fig,以及装有各个分区的容器ax,
- # ax[0,0]表示第一个分区,ax[2,2]表示第二行第二列的分区
实例代码:
- import matplotlib.pyplot as plt
- import numpy as np
- x=np.linspace(0,10,100)
- sin_y=np.sin(x)
- fig,ax=plt.subplots(ncols=2,nrows=2)
- ax[0,1].plot(x,sin_y,'3r')
- plt.show()
效果图如下: