python --Matplotlib详解
- 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文件中
-