Matplotlib 是一个 Python 的 2D绘图库,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
https://matplotlib.org/
1.matplotlib.rcParams
rcParams是matplotlib存放配置的字典,设置绘图相关的配置,可能会遇到中文不能显示的问题,在这里处理
定制Matplotlib使用样式表和rcParams
https://matplotlib.org/tutorials/introductory/customizing.html?highlight=rcparams
文档有很多设置相关的说明,我们这里设置
plt.rcParams['font.sans-serif']=['SimHei'] 中文支持
plt.rcParams['axes.unicode_minus']=False 正常显示负号
plt.rcParams['lines.linewidth']=5 设置线条宽度
plt.rcParams['lines.color']='red' 设置线条颜色
plt.rcParams['lines.linestyle']='-' 设置线条样式
2.plt.hist(data) 绘制直方图
#
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline # 设置Jupiter notebook输出图像
height = [168,155,182,170,173,161,155,173,176,181,166,172,170] # 数据
bins = range(150, 191, 5) # 横坐标的区间,纵坐标自动统计区间内的数据
plt.hist(height, bins=bins)
plt.show()
image.png
3.plt.bar(x,y) 绘制条形图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
x = [1, 2, 3] # 横坐标
name = ['一班', '二班', ' 三班']
y = [70, 80, 90] # 纵坐标
plt.bar(x, y)
plt.title('三班成绩柱状图') # 标题
plt.xlabel('班级') # 横坐标标题
plt.ylabel('成绩') # 纵坐标标题
plt.xticks(x, name) # 将横坐标与文字相关联
plt.text(1, 70, '70') # 在指定位置添加文字,参数(横坐标,纵坐标,文本)
for i in range(1, 4):
plt.text(i, y[i - 1], y[i - 1])
plt.show()
image.png
4.plt.plot(x,y) 绘制折线图
import matplotlib.pyplot as plt
year = range(2005, 2020)
height = [157, 160, 162, 163, 167, 170, 173, 175, 174, 179, 182, 182, 182, 182, 183]
plt.plot(year, height)
plt.show()
image.png
5.plt.pie(data) 绘制饼图
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
flowers = ['菊花', '玫瑰花', '栀子花', '牡丹', '月季花', '昙花'] # 标签
data = [300, 345, 980, 102, 684, 234]
plt.pie(data, labels=flowers, autopct='%1.1f%%') # 第二个%表示转译,第三个%表示输出%
plt.show()
image.png
6.plt.scatter(x,y)绘制散点图,是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随变量而变化的大致趋势
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.title('超市商品价位与销售散点图') # 标题
plt.xlabel('价格(元)') # 横坐标备注
plt.ylabel('销量(件)') # 纵坐标备注
data = [[18.9, 10.4], [21.3, 8.7], [19.5, 11.6], [20.5, 9.7], [19.9, 9.4], [22.3, 11], [21.4, 10.6], [9, 9.4],
[10.4, 9], [9.3, 11.3], [11.6, 8.5], [11.8, 10.4], [10.3, 10],
[8.7, 9.5], [14.3, 17.2], [14.1, 15.5], [14, 16.5], [16.5, 17.7], [15.1, 17.3], [16.4, 15], [15.7, 18]]
X = [item[0] for item in data]
Y = [item[1] for item in data]
print('x:{0},y:{1}'.format(X, Y))
# 在固定位置插入文字
plt.text(16, 16, '牙膏')
plt.text(10, 12, '洗衣液')
plt.text(20, 10, '牙刷')
plt.scatter(X, Y)
plt.show()
image.png
7.plt.boxplot(data)箱线图
import matplotlib.pyplot as plt
data = [77, 70, 72, 89, 89, 70, 90, 87, 94, 63, 81, 99, 94, 80, 95, 67, 65, 88, 60, 67, 85, 88, 87, 75, 62, 65, 95, 62,
61, 93, 30]
plt.boxplot(data)
plt.show()
image.png
8.projection='polar' 绘制极线图
import matplotlib.pyplot as plt
r = [1,2,3,4,5] # 极径
theta = [0.0,1.573453543,3.1445345343,4.713424224,6.283423424] # 角度
ax = plt.subplot(111, projection='polar')
ax.plot(theta,r)
plt.show()
image.png
9.plt.step(x,y) 绘制阶梯图,既能反映数据发展趋势,还能反映数据的持续时间
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.xlabel('年份')
plt.ylabel('数量')
year = range(2005, 2020) # 时间
height = [157, 160, 162, 163, 167, 170, 173, 175, 174, 179, 182, 182, 182, 182, 183] # 数据
plt.step(year, height)
plt.show()
image.png
10.绘制柱状堆积图,常用于综合展示不同分类的指标趋势以及它们总和的趋势
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
n = 5
number = ['1', '2', '3', '4', '5']
ch = [72, 80, 66, 77, 92]
math = [62, 92, 72, 75, 88]
eng = [76, 81, 73, 75, 80]
plt.bar(range(1,6), ch,color='r',label='chinese')
plt.bar(range(1,6),math,bottom=ch,color='g',label='math')
chmath = [ch[i] + math[i] for i in range(5)]
plt.bar(range(1,6),eng,bottom=chmath,color='b',label='eng')
plt.show()
image.png
11.绘制分块图,分块图将不同数据集进行并列显示,通常可用于对同一方面的不同主体进行比较
plt.bar(x,y,width=0.4,fc='r') x:横坐标。y:纵坐标 width:宽度 fc:颜色
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
name_list = ['语文', '数学', '英语']
c1 = [81.4, 83, 87.1] # 一班的三科成绩
c2 = [85.6, 87.4, 90]
c3 = [78, 81.2, 86.1]
width = 0.4
x = [1, 3, 5]
plt.bar(x, c1, label='一班', fc='r', width=width)
x = [1.4, 3.4, 5.4]
plt.bar(x, c2, label='二班', fc='g', width=width)
x = [1.8, 3.8, 5.8]
plt.bar(x, c3, label='三班', fc='b', width=width)
# 语文等标签在y轴显示,并剧中
x = [1.4, 3.4, 5.4]
plt.xticks(x, name_list)
plt.title('三班成绩图')
plt.ylabel('成绩')
plt.xlabel('科目')
plt.legend()
plt.show()
image.png
11.绘制气泡图 plt.scatter(x,y,s=z) x:横坐标,y:纵坐标, s:气泡大小
import matplotlib.pyplot as plt
import random
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 用来正常显示中文标签,mac系统和window系统支持的字体不同
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
x = [] # x坐标
y = [] # y坐标
z = [] # 气泡大小
for i in range(50):
x.append(random.randint(20, 60))
y.append(random.randint(160, 200))
z.append(random.randint(70, 500))
plt.scatter(x, y, s=z) # s来控制气泡大小
plt.title('20~60岁之间身高和体重的关系')
plt.xlabel('年龄')
plt.ylabel('身高')
plt.show()
image.png
网友评论