安装

pip install matplotlib

导包

import matplotlib.pyplot as plt

绘制散点图

如果输入的是两个列表,一个表示 x 轴的值,一个表示 y 轴的值,那么就可以在直角坐标系中划出很多个点,然后将这些点用指定的线段连接起来就得到了散点图。

可以使用 plt.plot(x, y, 风格) 来达到目的,其中的风格有很多种,如点状、小叉、圆圈、不同颜色等。

import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [2, 4, 2, 6]
y1 = [e+1 for e in y]
y2 = [e+2 for e in y]
plt.plot(x, y, "b.")                  # b:蓝色,.:点
plt.plot(x, y1, "ro")                  # r:红色,o:圆圈
plt.plot(x, y2, "kx")                 # k:黑色,x:x字符(小叉)
plt.show()                            # 在窗口显示该图片


我们可以看到不同颜色、不同线型、不同的点的形状。

上述代码的第 9 行用来显示图片,但这并不是最好的使用方式。本章后面的部分会将产生的图片保存到 png 文件中。可以使用下面的代码来替换第 9 行的代码:

plt.savefig("demo1.png")

绘制折线图

折线图和点状图类似,只是在风格上有所不同。我们需要指定线型,如“-”表示实线、“–”表示虚线、“-.”表示带点的虚线、“:”表示完全用点来组成的虚线。

import matplotlib.pyplot as plt
x  = [1, 2, 3, 4]
y  = [1, 2, 3, 4]
y1 = [e+1 for e in y]                # 计算y的值
y2 = [e+2 for e in y]
y3 = [e+3 for e in y]
plt.plot(x, y,  "b.-")               # b:蓝色,.:点,-:线
plt.plot(x, y1, "ro--")              # r:红色,o:圆圈,--:短线连接起来
plt.plot(x, y2, "kx-.")              # k:黑色,x:x字符,-.:点和线
plt.plot(x, y3, "c*:")               # c:蓝绿色,*:*字符,::点组成的线
plt.savefig("demo1.png")            # 将图片保存到文件中


其实参数 x 是可选的,如果不填写,那么 x=[1,2,3,…]。例如上面的代码可以写成下面的样子,而含义没有任何差别;

import matplotlib.pyplot as plt
y  = [1, 2, 3, 4]            # 4组数据
y1 = [e+1 for e in y]
y2 = [e+2 for e in y]
y3 = [e+3 for e in y]
plt.plot(y,  "b.-")           # 没有x参数
plt.plot(y1, "ro--")          # r:红色,o:圆圈,--:短线连接起来
plt.plot(y2, "kx-.")          # k:黑色,x:x字符,-.:点和线
plt.plot(y3, "c*:")           # c:蓝绿色,*:*字符,::点组成的线
plt.savefig("demo3.png")

颜色的表示法对应关系

表示法 颜色
‘b’ 蓝色
‘g’ 绿色
‘r’ 红色
‘c’ 蓝绿色
‘m’ 品红
‘y’ 黄色
‘k’ 黑色

点的样式对应关系

表示法 颜色
‘o’ 小圆圈
‘v’ 朝下的三角形
‘^’ 朝上的三角形
‘>’ 朝右的三角形
‘<’ 朝左的三角形
‘x’
‘+’ 加号
‘s’ 方框

线型的样式对应关系

表示法 颜色
‘-’ 实线
‘–’ 虚线
‘-.’ 带有点的虚线
‘:’ 点组成的虚线

绘制柱状图

柱状图和散点图类似,也是需要两个参数 x 和 y,但画出来的效果差别很大,而且需要使用 bar() 函数而不是 plot() 函数

import matplotlib.pyplot as plt
x  = [1, 2, 3, 4]
y  = [1, 2, 3, 4]
y1 = [e+1 for e in y]
y2 = [e+2 for e in y]
y3 = [e+3 for e in y]
plt.bar(x, y)
plt.savefig("bardemo1.png")

可以修改柱体的颜色,通过参数 color 来完成。例如将以上代码的第 7 行进行如下修改:

plt.bar(x, y, color="red")

也可以设定柱体边框的颜色,通过参数 edgecolor 来完成。例如将以上代码的第 7 行修改为:

plt.bar(x, y, color="red", edgecolor="black")


x 轴除了可以是数字信息外,也可以是其他信息。例如可以用柱状图来表示几种编程语言的受欢迎程度,代码如下:

import matplotlib.pyplot as plt
language = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp')
x_pos = range(len(language))  # [0, 1, 2, 3, 4, 5, 6]
pop = [10, 8, 6, 4, 2, 1]
plt.bar(x_pos, pop, align='center', alpha=0.5)
plt.xticks(x_pos, language)
plt.ylabel('Popularity')
plt.title('Programming Language Popularity)
plt.savefig("demo4.png")


绘制水平柱状图

将柱状图中的 bar 改成 barh 即可,barh 表示 horizon bar,就是水平的柱状图。其用法和垂直的柱状图类似,下面是一个使用的例子:

import matplotlib.pyplot as plt
language = ('Python', 'C++', 'Java', 'Perl', 'Scala', 'Lisp')
x_pos = range(len(language))  # [0, 1, 2, 3, 4, 56]
pop = [10, 8, 6, 4, 2, 1]
plt.barh(x_pos, pop, align='center', alpha=0.5)
plt.yticks(x_pos, language)
plt.xlabel('Popularity')
plt.title('Programming Language Popularity')
plt.savefig("demo5.png")

绘制饼图

可以使用 pie() 函数来画饼图。下面是最简单的饼图,表示 4 个城市的高技术产值。

import matplotlib.pyplot as plt
lbs = ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]        # 标签
vals = [50, 20, 10, 20]
plt.pie(vals, labels=lbs)
plt.savefig("piedemo1.png")


也可以使用 explode 参数表示某个单元是否被切出来,以及切出来的长度。例如希望上海和广州被切出来,那么可以使用下面的代码:

import matplotlib.pyplot as plt
lbs = ["Beijing", "Shanghai", "Guangzhou", "shenzhen"]        # 标签
vals = [50, 20, 10, 20]
    # 0表示不切出来,否则表示切出来,值越大切出的距离越大
explode = (0, 0.1, 0.2, 0)
plt.pie(vals, explode=explode, labels=lbs)
plt.savefig("piedemo2.png")

也可以用 colors 参数来表示各个块的颜色,这也是一个字符串的列表,如下面的代码所示:

import matplotlib.pyplot as plt
lbs = ["Beijing", "Shanghai", "Guangzhou", "shenzhen"]
vals = [50, 20, 10, 20]                                # 值的列表
explode = (0, 0.1, 0.2, 0)                            # 切出的长度
color_list =['red', 'blue', 'yellow', 'gray']        # 颜色列表
plt.pie(vals, explode=explode, colors=color_list, labels=lbs)    # 饼图
plt.savefig("piedemo3.png")                            # 保存到png文件中

物联沃分享整理
物联沃-IOTWORD物联网 » python –Matplotlib详解

发表评论