matplotlib画图模块

matplotlib 是 Python 的绘图库,可以用来绘制各种静态,动态,交互式的图表。

官网

安装matplotlib:pip install matplotlib -i https://pypi.douban.com/simple

ModuleNotFoundError: No module named 'matplotlib.pyplot'; 'matplotlib' is not a package
👉文件命名的问题,不要写成matplotlib.py!!!

➊ matplotlib基本介绍

  • matplotlib三层结构
    • 容器层:canvas figure axis
    • 辅助显示层:添加x轴,y轴描述,标题。。。
    • 图像层:绘制什么图像的声明
import matplotlib.pyplot as plt

plt.figure(figsize=(20,8),dpi=100)  # 创建画布

x=[1,2,3]
y=[4,5,6]
plt.plot(x,y)  # 绘制图像

plt.show()  # 显示图像

➋ 基本绘图功能

——图像保存 xy轴刻度 添加网格 描述信息和标题

help(plt.figure)  # 函数使用帮助 help()
plt.savefig("test.png")  # 图像保存savefig()
# savefig在show前面
# plt.show()会释放figure资源
# 如果在显示图像之后保存图片将只能保存空图片。
plt.grid(True,linestyle="--",alpha=0.7) # 添加网格 线形linestyle 透明度alpha
plt.xlabel("time") # x轴描述信息
plt.ylabel("temp") # y轴描述信息
plt.title("title",fontsize=20) # 标题

画点/画线

import matplotlib.pyplot as plt

x = 2
y = 3
plt.plot(x, y,'o',label='(2,3)')
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc='lower right')
plt.grid(True)
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0, 5])
y = np.array([0, 5])
plt.plot(x, y,'g-.',label='y=x')
plt.plot(x, y, 'o') # 端点
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc='lower right')
plt.grid(True)
plt.show()

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 6, 8])
y = np.array([3, 8, 1, 10])
plt.plot(x, y,'g-.')
plt.plot(x, y, 'o') # 端点
plt.xlabel("x")
plt.ylabel("y")
plt.grid(True)
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,4*np.pi,0.1)   # start,stop,step
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x,y1,'b-',x,y2,'r:')
plt.xlabel("x")
plt.ylabel("y")
plt.legend(labels=['y1=sin(x)','y2=cos(x)'],loc='lower left')
plt.grid(False)
plt.show()

在这里插入图片描述

温度变化图

format()

"python38{}".format("最棒")
# 'python38最棒'
"{}python38{}".format("tbd_","最棒")
# 'tbd_python38最棒'
import matplotlib.pyplot as plt
import random

x=range(60)
y=[random.uniform(15,18) for i in x]
x_ticks_label=["11点{}分".format(i) for i in x]
y_ticks=range(30)

plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
plt.xticks(x[::5],x_ticks_label[::5],fontsize=14) 
# plt.xticks(x_ticks_label[::5]) × 必须最开始传进去的是数字
plt.yticks(y_ticks[::5],fontsize=14)
plt.grid(True,linestyle="--",alpha=0.7) # 添加网格
plt.xlabel("time",fontsize=16) 
plt.ylabel("temp",fontsize=16) 
plt.title("温度变化图",fontsize=20) 

plt.show()

在这里插入图片描述

注意:xticks/yticks第一个参数必须是数字,如果不是数字,需要进行值替换
🎏 𝒿𝓊𝓅𝓎𝓉ℯ𝓇永久解决中文不显示问题


图像保存 savefig

savfig要在show前面
plt.savefig("./test.png")

import matplotlib.pyplot as plt

x = 2
y = 3
plt.plot(x, y,'o',label='(2,3)')
plt.xlabel("x")
plt.ylabel("y")
plt.legend(loc='lower right')
plt.grid(True)
plt.savefig("./test.png") # 保存图像,在plt.show前面!!!!不然是空图
plt.show() # 会进行释放资源

xy轴刻度 xticks、yticks

第一个参数必须是数字,如果不是,要进行值替换。
整数

TypeError: slice indices must be integers or None or have an __index__ method
👉类型错误:切片索引必须是整数或无,或者有一个__index__ 的方法

x_ticks_label=["11:{}".format(i) for i in x]
y_ticks=range(51) # 0-50
plt.xticks(x[::10],x_ticks_label[::10]) # 间隔10
plt.yticks(y_ticks[::5])                # 间隔5
plt.xticks(np.linspace(0,15,11)) # (0,15)
plt.yticks(np.arange(-1, 2, 1)) # (-1,2) ,间隔为1
import matplotlib.pyplot as plt
import random

x = range(61)
y = [random.uniform(35,37) for i in x] # 35-37之间的随机数
x_ticks_label=["11:{}".format(i) for i in x]
y_ticks=range(51) # 0-50
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.xticks(x[::10],x_ticks_label[::10]) # 间隔10
plt.yticks(y_ticks[::5])                # 间隔5
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,4*np.pi,0.1)
y0 = np.sin(x)
y1 = np.cos(x)
plt.plot(x, y0)
plt.plot(x, y1)
plt.xlabel("x")
plt.ylabel("y")
plt.xticks(np.linspace(0,15,11)) # (0,15)
plt.yticks(np.arange(-1, 2, 1)) # (-1,2) ,间隔为1
plt.grid(True,linestyle='-.',alpha=0.4)
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,4*np.pi,0.1)
y0 = np.sin(x)
y1 = np.cos(x)
plt.plot(x, y0)
plt.plot(x, y1)
plt.xlabel("x")
plt.ylabel("y")
plt.xticks(np.arange(0, 14, 2))
plt.yticks(np.arange(-1, 2, 1)) # (-1,2) ,间隔为1
plt.grid(True,linestyle='-.',alpha=0.4)
plt.show()

在这里插入图片描述

添加网格 grid

plt.grid(True,linestyle='--',alpha=0.3)

linestyle 线型;alpha 透明度(value=0~1)

import matplotlib.pyplot as plt
import random

x = range(61)
y = [random.uniform(35,37) for i in x] # 35-37之间的随机数
x_ticks_label=["11:{}".format(i) for i in x]
y_ticks=range(51) # 0-50
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.xticks(x[::10],x_ticks_label[::10]) # 间隔10
plt.yticks(y_ticks[::5])                # 间隔5
plt.grid(True,linestyle='-.',alpha=0.4)
plt.show()

在这里插入图片描述

颜色和线形

颜色字符风格字符
r 红色 #FF0000- 实线(默认) solid
g 绿色 #00FF00– 虚线 dashed
b 蓝色 #00FF00-. 点划线 dashdot
w 白色 #FFFFFF: 点虚线 dotted
c 青色 #00FFFF’ ’ 留空、空格 None
m 洋红 #FF00FF
y 黄色 #FFFF00
k 黑色 #000000

添加描述信息

plt.xlabel("x") # x轴
# plt.xlabel('x', fontdict={'family': 'Times New Roman', 'size': 16})
plt.ylabel("y") # y轴
plt.title("figure",fontsize=20) # 标题

添加图例 legend

plt.legend(loc="best") # 添加图例

要在plot添加label

plt.plot(x, y0,label="sin(x)")
plt.legend(loc="best")
location stringlocation code
“best”0
“upper right”1
“upper left”2
“lower left”3
“lower right”4
“right”5
“center left”6
“center right”7
“lower center”8
“upper center”9
“center”10
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0,4*np.pi,0.1)
y0 = np.sin(x)
y1 = np.cos(x)
plt.plot(x, y0,label="sin(x)")
plt.plot(x, y1,label="cos(x)")
plt.xlabel("x")
plt.ylabel("y")
plt.xticks(np.arange(0, 14, 2))
plt.yticks(np.arange(-1, 2, 1)) # (-1,2) ,间隔为1
plt.legend(loc="best")
# plt.legend(loc=0)
plt.grid(True,linestyle='-.',alpha=0.4)
plt.show()

在这里插入图片描述

➌ 多次plot

多次plot就行

plt.plot(x,y1)
plt.plot(x,y1)
...
import matplotlib.pyplot as plt
import random

x = range(61)
y0 = [random.uniform(35,37) for i in x] # 35-37之间的随机数
y1 = [random.uniform(20,30) for i in x] # 20-30之间的随机数
x_ticks_label=["11:{}".format(i) for i in x]
y_ticks=range(51) # 0-50
plt.plot(x, y0)
plt.plot(x, y1)
plt.xlabel("x")
plt.ylabel("y")
plt.xticks(x[::10],x_ticks_label[::10]) # 间隔10
plt.yticks(y_ticks[::5])                # 间隔5
plt.grid(True,linestyle='-.',alpha=0.4)
plt.show()

在这里插入图片描述


➍ 多个坐标系显示图像

注意:有些方法需要添加set_*

import matplotlib.pyplot as plt
import random

x=range(60)
y=[random.uniform(15,18) for i in x]
y1=[random.uniform(1,8) for i in x]
x_ticks_label=["11:{} ".format(i) for i in x]
y_ticks=range(30)
y1_ticks=range(30)

# plt.figure(figsize=(20,8),dpi=80)
fig,axis=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)
axis[0].plot(x,y,color="g",linestyle="-.")
axis[1].plot(x,y1)
axis[0].set_xticks(x[::5],x_ticks_label[::5]) 
axis[0].set_yticks(y_ticks[::5])
axis[0].set_xticklabels(x_ticks_label[::5],fontsize=14)
axis[1].set_xticks(x[::5],x_ticks_label[::5],fontsize=14) 
axis[1].set_yticks(y1_ticks[::5],fontsize=14)
axis[1].set_xticklabels(x_ticks_label[::5],fontsize=14)
axis[0].grid(True,linestyle="--",alpha=0.7) # 添加网格
axis[1].grid(True,linestyle="--",alpha=0.7) # 添加网格
# plt.legend(loc="best") # 添加图例
axis[0].set_xlabel("time",fontsize=16) 
axis[0].set_ylabel("temp",fontsize=16) 
axis[0].set_title("温度变化图1",fontsize=20) 
axis[1].set_xlabel("time",fontsize=16) 
axis[1].set_ylabel("temp",fontsize=16) 
axis[1].set_title("温度变化图2",fontsize=20) 

plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

# 散点图
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20,50,10,20,50,10,60,30]) # 设置点的大小
# 设置点的颜色
# colors = np.array(["red","green","black","orange",
#                    "purple","beige","cyan","magenta"])
colors=np.array([0,10,20,40,60,80,90,100])
plt.subplot(2,2,1)
#plt.scatter(x,y,s=sizes,c=colors)
plt.scatter(x,y,s=sizes,c=colors,cmap='viridis') # 颜色条colormap
plt.title("scatter plot")

# 柱状图
x = np.array(["rose", "violet", "lily", "tulips"])
y = np.array([12, 22, 6, 18])
plt.subplot(2, 2, 2)
plt.bar(x,y,color=["purple","red","hotpink","yellow"])
plt.title("histogram")

# 饼图
y = np.array([35, 25, 25, 15]) # 比例
plt.subplot(2, 2, 3)
# explode 值越大,距离中心越远,默认是0
plt.pie(y,labels=['A','B','C','D'],
        colors=["#d0695d", "#5d9ca8", "#65a479", "#a564c9"],
        autopct='%.1f%%',explode=(0.1, 0, 0, 0))
plt.title("pie")

x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
# projection为画图样式,除'polar'外还有'aitoff', 'hammer', 'lambert'等
ax=plt.subplot(2,2,4, projection='polar')
ax.plot(x,y)
plt.title("polar graph")

plt.suptitle("multigraph")
plt.show()

在这里插入图片描述


➎ 画动态图

  • https://www.jb51.net/article/246076.htm
  • https://mp.weixin.qq.com/s/1AltSzjZRfGIZFRm4hdJnQ
  • https://mp.weixin.qq.com/s/gXUpc8dNVXWBW8KTQPCn7Q
  • https://mp.weixin.qq.com/s/KsSCFcxFq_g2azBKxZgrHQ
  • https://mp.weixin.qq.com/s/s_Rhu2mCJIlJ-z5OY_6VLg
  • https://www.cnblogs.com/Renyi-Fan/p/13407594.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值