Python - Matplotlib绘图库使用详解1(柱状图、折线图、饼图、散点图、箱型图)
作者:hangge | 2022-08-03 08:10
一、基本介绍
(1)Matplotlib 是 Python 最著名的绘图库,它提供了一整套和 matlab 相似的命令 API,适合交互式地进行制图。我们也可以将它作为绘图控件,嵌入 GUI 应用程序中。
(2)Matplotlib 的文档相当完备,并且 Gallery 页面中有上百幅缩略图,打开之后都有源程序。如果我们需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。
二、基本用法
1,柱状图
(1)下面是一个最简单的柱状图样例:
import matplotlib.pyplot as plt #准备数据 langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] #绘制柱状图 plt.bar(langs,students) plt.show()
(2)通过调整柱状图的宽度,可以实现在同一 x 轴位置绘制多个柱状图。我们还可以将它们设置成不同的颜色,并且设置图例,从而使它们更容易区分。
import matplotlib.pyplot as plt import numpy as np #准备数据 men = (20, 35, 30, 35, 27) women = (25, 32, 34, 20, 25) left = np.arange(5) # 柱条的水平开始位置 width = 0.35 #绘制柱状图 p1 = plt.bar(left, men, width, color='b') p2 = plt.bar(left+ width, women, width, color='r') #设置坐标轴 countries = ['USA', 'India', 'China', 'Russia', 'Germany'] plt.xticks(left, countries) #绘制图例 plt.legend((p1[0], p2[0]), ('Men', 'Women')) #图例 plt.show()
(3)bar() 函数提供了一个可选参数 bottom,该参数可以指定柱状图开始堆叠的起始值,一般从底部柱状图的最大值开始,依次类推。我们可以利用该特性来绘制一个堆叠柱状图:
import matplotlib.pyplot as plt import numpy as np #准备数据 bronzes = np.array([33, 17, 28, 19, 15]) silvers = np.array([37, 23, 20, 18, 10]) golds = np.array([46, 27, 29, 19, 17]) left = np.arange(5) # 柱条的水平开始位置 #绘制堆叠图 p1 = plt.bar(left, golds, width=0.5, label='golds', color='gold', bottom=silvers+bronzes) p2 = plt.bar(left, silvers, width=0.5, label='silvers', color='silver', bottom=bronzes) p3 = plt.bar(left, bronzes, width=0.5, label='bronzes', color='#CD853F') #设置坐标轴 countries = ['USA', 'India', 'China', 'Russia', 'Germany'] plt.xticks(left, countries) #绘制图例 plt.legend(loc="upper right") plt.show()
2,折线图
(1)下面是绘制单条折线的样例:
import matplotlib.pyplot as plt #准备数据 x = ["Mon", "Tues", "Wed", "Thur", "Fri","Sat","Sun"] y = [25, 40, 35, 30, 42, 66, 20] #绘制折线("y"表示黄色,marksize用来设置'D'菱形的大小) plt.plot(x, y, "y", marker='D', markersize=5, label="周活") plt.show()
(2)如果要绘制多条折线图,只要准备好绘制多条折线图的数据即可。如果不设置线条颜色,matplotlib 也会自动为线条添加不同的颜色
import matplotlib.pyplot as plt #准备数据 x = ["Mon", "Tues", "Wed", "Thur", "Fri","Sat","Sun"] y1 = [25, 40, 35, 30, 42, 66, 20] y2 = [15, 18, 24, 30, 31, 25, 24] #绘制折线("y"表示黄色,marksize用来设置'*'五角星的大小) plt.plot(x, y1, 'r',marker='*', markersize=10) plt.plot(x, y2, 'b', marker='*',markersize=10) #绘制图例 plt.legend(['This Week', 'Last Week']) plt.show()
3,饼图
下面是一个饼图样例,其中 autopct 参数设置为 %1.2f%,从而将各项所占总和的百分比显示在相对应的扇形区内。
import matplotlib.pyplot as plt #准备数据 langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [23,17,35,29,12] #使得X/Y轴的间距相等 plt.axis('equal') #绘制饼状图 plt.pie(students, labels = langs,autopct='%1.2f%%') plt.show()
4,散点图
(1)散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势。通俗地讲,它反映的是一个变量受另一个变量的影响程度。
import matplotlib.pyplot as plt #准备数据 girls = [89, 90, 70, 89, 100, 80, 90, 100, 80, 34] boys = [30, 29, 49, 48, 100, 48, 38, 45, 20, 30] x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #绘制散点 plt.scatter(x, girls, color='r',label="girls") plt.scatter(x, boys, color='b',label="boys") #添加图例 plt.legend() plt.show()
(2)我们也可以自由设置每个点的大小和颜色:
(2)下面是一个箱形图样例,这里我们使用 numpy.random.normal() 函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量。
import matplotlib.pyplot as plt import numpy as np #准备数据 girls = [89, 90, 70, 89, 100, 80, 90, 100, 80, 34] boys = [30, 29, 49, 48, 100, 48, 38, 45, 20, 30] girls_area = np.pi * (15 * np.random.rand(50))**2 # 半径0 to 15 boys_area = np.pi * (15 * np.random.rand(50))**2 # 半径0 to 15 x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] #绘制散点 plt.scatter(x, girls, s=girls_area, color='r',label="girls") plt.scatter(x, boys, s=boys_area, color='b',label="boys") #添加图例 plt.legend() plt.show()
5,箱型图
(1)箱型图(也称为盒须图)它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。箱型图结构如下所示:
import matplotlib.pyplot as plt #准备数据 collectn_1 = np.random.normal(100, 10, 200) collectn_2 = np.random.normal(80, 30, 200) collectn_3 = np.random.normal(90, 20, 200) collectn_4 = np.random.normal(70, 25, 200) data_to_plot=[collectn_1,collectn_2,collectn_3,collectn_4] #创建箱型图 plt.boxplot(data_to_plot) plt.show()
全部评论(0)