初学matplotlib绘图

发布于:2022-10-30 ⋅ 阅读:(474) ⋅ 点赞:(0)

目录

1.matplotlib简介

1.1 常用快捷键

2.matplotlib使用

2.1 实现一个简单的matplotlib画图

2.2 认识matplotlib三层结构

2.3 折线图(plot)基础画图

2.3.1 设置画布属性

2.3.2 解决中文文字导入问题

2.3.3 多个坐标系显示

2.3.4 应用场景

2.3.5 代码展示

2.4 散点图(scatter)基础画图

2.4.1 作图步骤

2.5 柱状图(bar)基础画图

2.5.1 柱状图绘制

2.6 直方图(histogram)基础画图

2.6.1 直方图概念介绍

2.6.2 区分直方图和柱状图

2.6.3 直方图绘制

2.7 饼图(pie)基础画图

2.7.1 新增%1.2f%%

2.7.2 代码展示


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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到