Matplotlib之pyplot常用操作(一)

来源:互联网 发布:win10 linux安装教程 编辑:程序博客网 时间:2024/06/07 14:40

做机器学习方向首先得学会点Matplotlib库的知识吧,所以我就在这做一下学习笔记,记录一下我在机器学习方向上所用到的Matplotlib上的知识。

官方文档:网址http://matplotlib.org/api/pyplot_api.html#matplotlib后面加.函数()便可查询。

一、折线图的绘制

先上一个样例代码:

import matplotlib.pyplot as pltplt.plot()plt.show()

输出结果:
0
这样我们就画了一个空白的图像。

然后我们再尝试着加入数据,画二维坐标图首先需要一组二维数对(x, y),这里我随便找了一组数据作为折线图的x轴和y轴:

x_axis = [794.28818799999999,         808.50958700000001,         826.25461900000005,         833.53230499999995,         841.97451199999989,         846.94015999999999,         851.69061199999987,         861.97213299999999,         874.92434100000003,         888.51824600000009]y_axis = [79.877565000000004,         99.524317000000011,         62.525946999999995,         57.281737,         52.371316,         70.615566000000001,         47.351207000000002,         43.719923000000001,         40.642712000000003,         38.535789000000001]

然后使用plt.plot()绘制折线图:

plt.plot(x_axis, y_axis)plt.show()

输出结果如下:
1

接下来我们进一步对图像进行细节处理:

plt.plot(x_axis, y_axis)plt.xticks(rotation = 45)   #加入这条代码plt.show()

输出结果(注意x轴坐标的变化,数字倾斜了45°):
2
这样一来,如果遇到x轴位数过长以至于重叠的时候,斜着画x轴的方法就派上用场了。当然了,同理把xticks 换成yticks 就是改变y轴坐标的倾斜度了。

接下来我们再给这个图像加上“轴的说明”和一个“标题”。
代码如下:

plt.plot(x_axis, y_axis)plt.xticks(rotation = 45)#新加入的代码如下:plt.xlabel("this is x_axis")plt.ylabel("this is y_axis")plt.title("this is title")plt.show()

输出结果:
3
这样,我们就添加了x坐标轴和y坐标轴的含义以及这个图像的意义。

那么如果我想在同一个图中同时画两条折线呢?那就写plt.plot()两次呗。
既然是两条线,那就肯定再需要一组数据,这里我们就在前面的数据上每个y坐标轴值+1获得一组新数据,代码如下:

#再构造一组数据x1_axis = x_axis.copy()y1_axis = []for i in y_axis:    y1_axis.append(i+10)

有了数据就可以画图了,代码如下:

plt.plot(x_axis, y_axis, c = "r", label = "red")plt.plot(x1_axis, y1_axis, c = "b", label = "red")plt.legend(loc = "best")plt.show()

输出结果:
7
下面我们来解释以下,新增的代码含义。

  1. 首先是plt.plot()中的参数c,这个是用来选择曲线颜色的,比如”r”表示”red”, “b”表示”blue”等等;
  2. 其次是参数label,表示的是这条曲线的含义,就是上图中右上角那个小框框里面的解释;
  3. 最后是函数plt.legend(loc = "best")就是用来表示这个小框框应该放在哪里,里面的参数loc的值可以是'best', 'upper right', 'upper left', 'lower left', 'lower right', 'right','center left', 'center right', 'lower center', 'upper center', 'center',分别表示“最好位置”,“右上角”,“左上角”等等。

总结,以上全部的常用操作代码列举如下:

import matplotlib.pyplot as plt#构造数据x_axis = [794.28818799999999,         808.50958700000001,         826.25461900000005,         833.53230499999995,         841.97451199999989,         846.94015999999999,         851.69061199999987,         861.97213299999999,         874.92434100000003,         888.51824600000009]y_axis = [79.877565000000004,         99.524317000000011,         62.525946999999995,         57.281737,         52.371316,         70.615566000000001,         47.351207000000002,         43.719923000000001,         40.642712000000003,         38.535789000000001]#再构造一组数据x1_axis = x_axis.copy()y1_axis = []for i in y_axis:    y1_axis.append(i+10)#绘图plt.plot(x_axis, y_axis, c = "r", label = "red")plt.plot(x1_axis, y1_axis, c = "b", label = "red")plt.xticks(rotation = 45)plt.xlabel("this is x_axis")plt.ylabel("this is y_axis")plt.title("this is title")plt.legend(loc = "best")plt.show()

输出结果:
11

二、子图操作

有时候我们会在一个区域中画很多个子图,这就需要我们用到子图操作了。
废话不多说,先上代码:

import matplotlib.pyplot as pltfig = plt.figure()ax1 = fig.add_subplot(2,2,1)ax2 = fig.add_subplot(2,2,2)ax4 = fig.add_subplot(2,2,4)plt.show()

输出结果:
5
解释一下上面的代码,首先我们用函数plt.figure()创建了一个区域的对象;然后我们又用函数fig.add_subplot()在这个区域里建了三个子图,至于函数fig.add_subplot() 中的三个参数是什么意思,我这里用一张图来说明就够了:
4

下面我们再进一步对上面的图像做一下进阶处理:
代码如下:

fig = plt.figure(figsize=(16,8))ax1 = fig.add_subplot(2,2,1)ax2 = fig.add_subplot(2,2,2)ax3 = fig.add_subplot(2,2,4)#下面对子图1和子图2填充了数据ax1.plot(x_axis, y_axis)ax2.plot(x_axis, y_axis)plt.show()

输出结果:
6
明显可以看到,这张图像比上面那张宽了很多,高了也很多。plt.figure(figsize=(16,8)) 函数中的figsize参数就表示了这个区域的长和宽。

三、条形图

条形图也就是柱状图、bar形图。

plt.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)

常用参数:

left:每个柱x轴左边界;
bottom:每个柱y轴下边界;
height:柱高度(Y轴方向);
width:柱宽度(X轴方向) ;
注意:以上参数可以设置为数值或者list,但要保证如果为list, len(list)要一致

具体的操作可以看一下这篇博客,写得不错:http://blog.sina.com.cn/s/blog_b09d4602010194wy.html

如图,我们最终要画一个这样的条形图:
12

首先,画条形图主要需要两组数据:

  1. bar的高度值;
  2. bar的位置。

所谓的高度值就是指每个bar的y坐标轴对应的值,bar的位置就是指x坐标轴对应的值了。
我们先构造出这两组数据:

from numpy import arangebar_heights = [2,3,6,1,7,8]bar_positions = arange(6)+1 #等价于array([1, 2, 3, 4, 5, 6])

然后绘制bar形图:

import matplotlib.pyplot as pltplt.bar(bar_positions, bar_heights, 0.3) #这里的第三个参数0.3的意思是bar的粗细plt.show()

输出结果:
14
由上面可知,条形图的画法和折线图是相似的,只须把plot换成bar就行。

下面我们用画子图的方法改进一下代码,代码如下:

fig, ax = plt.subplots()ax.bar(bar_positions, bar_heights, 0.5)plt.show()

输出结果:
13

接下来我们继续进行图像的进阶操作,代码如下:

num_cols = ["first_bar", "second_bar", "third_bar", "forth_bar", "fifth_bar", "sixth_bar"]fig, ax = plt.subplots()ax.bar(bar_positions, bar_heights, 0.5)#为每条bar写明含义ax.set_xticks(range(1,7))ax.set_xticklabels(num_cols, rotation = 45)ax.set_xlabel("this is x_axis")ax.set_ylabel("this is y_axis")ax.set_title("this is title")plt.show()

输出结果:
12

还有一种条形图,是横着画的,如下图:
112
代码部分呢,其实跟上面的代码类似,只是把函数ax.bar()换成了ax.bar()和把每个bar的含义从x坐标轴转到了y坐标轴。
代码如下:

#直观起见,这里把“高”换成“宽”bar_widths = bar_heights.copy()fig, ax = plt.subplots()ax.barh(bar_positions, bar_widths, 0.5)#这里把函数ax.bar()换成了ax.bar()#下面在y坐标轴上说明每条bar的含义ax.set_yticks(range(1,7))ax.set_yticklabels(num_cols, rotation = 45)ax.set_xlabel("this is x_axis")ax.set_ylabel("this is y_axis")ax.set_title("this is title")plt.show()

四、散点图

画散点图和折线图差不多,只是把函数plot换成函数scatter(),当然了,散点图也能进行子图操作等等。

首先我们先画一个简单的散点图,继续使用上面的数据x_axis和y_axis:

#构造数据x_axis = [794.28818799999999,         808.50958700000001,         826.25461900000005,         833.53230499999995,         841.97451199999989,         846.94015999999999,         851.69061199999987,         861.97213299999999,         874.92434100000003,         888.51824600000009]y_axis = [79.877565000000004,         99.524317000000011,         62.525946999999995,         57.281737,         52.371316,         70.615566000000001,         47.351207000000002,         43.719923000000001,         40.642712000000003,         38.535789000000001]

然后开始绘制图像:

import matplotlib.pyplot as pltplt.scatter(x_axis, y_axis)plt.show()

输出结果:
11
进阶操作:

import matplotlib.pyplot as pltplt.scatter(x_axis, y_axis, marker='x', c='r', label = "red")plt.xlabel("this is x_axis")plt.ylabel("this is y_axis")plt.title("this is title")plt.xticks(rotation = 45)plt.legend(loc = "upper right")plt.show()

输出结果:
222

原创粉丝点击