目录
1.matplotlib简介
Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。 Matplotlib可用于Python脚本,Python和IPython (opens new window)Shell、Jupyter (opens new window)笔记本,Web应用程序服务器和四个图形用户界面工具包。
1.1 常用快捷键
- shift + enter 执行本单元代码,并跳转到下一单元
- ctrl + enter 执行本单元代码,留在本单元
- 命令模式:按esc进入
- Y cell切换到code模式
- M cell切换到markdown模式
- A 在当前cell的上面添加cell
- B 在当前cell的下面添加cell
- 双击D 删除当前cell
- Z 回退
- L 为当前cell加上行号<!--
- ctrl + shift + p 对话框输入命令直接运行
- 快速跳转到首个cell ctrl + home
- 快速跳转到最后一个cell ctrl + end -->
- 编辑模式:按enter进入
- 多光标操作: ctrl 点击鼠标(mac:cmd+鼠标)
- 回退:ctrl + z(mac:cmd + z)
- 重做:ctrl + y(mac:cmd + y)
- 补全代码:变量,方法后跟tab键
- 为一行或多行代码添加/取消注释:ctrl + /(mac:cmd + /)
- 屏蔽自动输出信息:可在最后一条语句之后加一个分号
2.matplotlib使用
2.1 实现一个简单的matplotlib画图
import matplotlib.pyplot as plt # 导包
%matplotlib inline
plt.figure( ) #创建画布
plt.plot([1,0,9],[4,5,6])
plt.show( )
2.2 认识matplotlib三层结构
1)容器层:画板层(canvas)、画布层(figure)、绘图区/坐标系
2)辅助显示层
3)图像层
2.3 折线图(plot)基础画图
2.3.1 设置画布属性
1)figsize 画布大小
2)dpi:dot per inch 图像的清晰度
2.3.2 解决中文文字导入问题
若避开复杂的设置,则只需要写一行代码即可解决:
plt.rc('font',family = 'SimHei',size = 13)
2.3.3 多个坐标系显示
1)面向对象的画图方法:plt.subplots
2)具体代码修改:
figure,axes = plt.subplots(nrows = 1,ncols = 2,**fig_kw)
axes[0].方法名()
axes[1]
2.3.4 应用场景
某事物、某指标随时间的变化情况
画各种数学函数图像
2.3.5 代码展示
1)简单折线图
#简单折线图
plt.figure(figsize = (20,8),dpi = 80)
plt.plot([1,2,3,4,5,6,7],[17,17,18,15,11,11,13])
plt.show()
2)两个子图的折线图
#两个子图的折线图
plt.rc('font',family = 'SimHei',size = 13)
import random
#1.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18)for i in x]
y_beijing = [random.uniform(1,3) for i in x]
#2.创建画布
plt.figure(figsize = (20,8),dpi = 80)
#3.绘制图像
plt.plot(x,y_shanghai,color = 'r',linestyle = '--',label = "上海")
plt.plot(x,y_beijing,color = 'b',linestyle = '-',label = "北京")
#显示图例
plt.legend()
#添加刻度
#准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
plt.xticks(x[::5],x_label[::5])
plt.yticks(range(0,40,5))
#添加网格显示
plt.grid(True,linestyle = '--',alpha = 0.5)
#添加描述信息
plt.xlabel("时间变化")
plt.ylabel("温度变化")
plt.title("北京,上海11点到12点1小时内每分钟的温度变化")
#4.显示图像
plt.show()
3)多个坐标系显示
#多个坐标系显示
plt.rc('font',family = 'SimHei',size = 10)
import random
#1.准备数据
x = range(60)
y_shanghai = [random.uniform(15,18)for i in x]
y_beijing = [random.uniform(1,3) for i in x]
#2.创建画布
#plt.figure(figsize = (20,8),dpi = 80)
figure,axes = plt.subplots(nrows = 1,ncols = 2,figsize = (20,8),dpi = 80)
#3.绘制图像
axes[0].plot(x,y_shanghai,color = 'r',linestyle = '--',label = "上海")
axes[1].plot(x,y_beijing,color = 'b',linestyle = '-',label = "北京")
#显示图例
axes[0].legend()
axes[1].legend()
#添加刻度
#准备x的刻度说明
x_label = ["11点{}分".format(i) for i in x]
axes[0].set_xticks(x[::5],x_label[::5])
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(x[::5],x_label[::5])
axes[1].set_yticks(range(0,40,5))
#添加网格显示
axes[0].grid(True,linestyle = '--',alpha = 0.5)
axes[1].grid(True,linestyle = '--',alpha = 0.5)
#添加描述信息
axes[0].set_xlabel("时间变化")
axes[0].set_ylabel("温度变化")
axes[0].set_title("上海11点到12点1小时内每分钟的温度变化")
axes[1].set_xlabel("时间变化")
axes[1].set_ylabel("温度变化")
axes[1].set_title("北京11点到12点1小时内每分钟的温度变化")
#4.显示图像
plt.show()
4)画数学函数图像
#绘制数学函数图像
import numpy as np
#准备x,y数据
x = np.linspace(-1,1,1000)
y = 2 * x * x
#创建画布
plt.figure(figsize = (20,8),dpi = 80)
#绘制图像
plt.plot(x,y)
#添加网格
plt.grid(linestyle = "--",alpha = 0.5)
#显示图像
plt.show()
2.4 散点图(scatter)基础画图
2.4.1 作图步骤
导入数据
plt.figure(figsize = (20,8),dpi = 100)
plt.scatter(x,y)
plt.show()
散点图比较简单,在这里不做过多赘述。
2.5 柱状图(bar)基础画图
2.5.1 柱状图绘制
1)单柱代码
plt.rc('font',family = 'SimHei',size = 10)
movie_names = ['新神榜:杨戬','独行月球','小黄人大眼萌:神偷奶爸前传','明日战记','断·桥','人生大事','山海经之再见怪兽','人间世']
tickets = [3704.2,260300,2108.4,43200,19200,170100,3323.3,41.2]
plt.figure(figsize = (20,8),dpi = 80)
x_ticks = range(len(movie_names))
plt.bar(x_ticks,tickets,color = ['b','r','g','y','c','m','k','b'])
#修改刻度
plt.xticks(x_ticks,movie_names)
plt.title("电影票房收入对比")
plt.grid(linestyle = "--",alpha = 0.5)
plt.show()
2)双柱代码
movie_names = ['雷神3:诸神黄昏','正义联盟','寻梦环游记']
first_day = [10587.6,10062.5,1275.7]
first_weekend = [36224.9,34479.6,11830]
x = range(3)
plt.figure(figsize = (15,8),dpi = 80)
plt.bar(x,first_day,width = 0.2,label = "首日票房")
plt.bar([i+0.2 for i in x],first_weekend,width = 0.2,label = "首周票房")
plt.legend()
plt.xticks([i+0.1 for i in x],movie_names)
plt.grid(linestyle = "--",alpha = 0.5)
plt.show()
2.6 直方图(histogram)基础画图
2.6.1 直方图概念介绍
组数:把样本分成组的个数 = (最大值-最小值)/组距
组距:每一组两个端点的差
2.6.2 区分直方图和柱状图
1)直方图柱子宽度可不一,柱状图须一致
2)直方图展示数据分布,柱状图比较数据大小
3)直方图柱子无间隔,柱状图柱子有间隔
2.6.3 直方图绘制
#需求:电影时长分布状况
import random
a = range(250)
time = [random.randint(90,140) for i in a]
plt.figure(figsize = (20,8),dpi = 80)
#bin是组数=(max-min)//组距,normed表示频率
distance = 1
bins = int((max(time) - min(time) / distance))
plt.hist(time,bins,density = True)
plt.xticks(range(min(time),max(time),distance))
plt.grid(linestyle = "--",alpha = 0.5)
plt.show()
2.7 饼图(pie)基础画图
2.7.1 新增%1.2f%%
2.7.2 代码展示
#绘制不同电影排片
movie_names = ['雷神3:诸神黄昏','正义联盟','寻梦环游记','新神榜:杨戬','独行月球','小黄人大眼萌:神偷奶爸前传','明日战记','断·桥','人生大事','山海经之再见怪兽','人间世']
place_count = [60605,54546,45819,28243,13270,9945,7679,6799,6101,4621,20105]
plt.figure(figsize=(20,8),dpi = 80)
plt.pie(place_count,labels = movie_names,colors = ['b','r','g','y','c','m','y','k','c','g','y'],autopct = "%1.2f%%")
plt.axis('equal')
plt.legend()
plt.show()
#超过九个类别时不建议使用饼图
以上就是我本周学习matplotlib的全部知识点总结啦,欢迎读者进行指正和补充!
本文含有隐藏内容,请 开通VIP 后查看