返回 导航

Python / AI

hangge.com

Python - Matplotlib绘图库使用详解1(柱状图、折线图、饼图、散点图、箱型图)

作者:hangge | 2022-08-03 08:10

一、基本介绍

(1)MatplotlibPython 最著名的绘图库,它提供了一整套和 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)我们也可以自由设置每个点的大小和颜色:
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)箱型图(也称为盒须图)它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。箱型图结构如下所示:

(2)下面是一个箱形图样例,这里我们使用 numpy.random.normal() 函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量。
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)

回到顶部