Matplotlib是一个Python的基础绘图库,它可与 NumPy 一起使用,代替Matlab使用。
由于Matplotlib是第三方库,所以我们需要安装它才可以使用。注意,Matplotlib3.0要求python3版本才可安装使用。 安装命令:pip install matplotlib 安装可参考官网:https://matplotlib.org/users/installing.html
Matplotlib所绘制的图位于图片(Figure)对象中。我们可以通过plt.figure生成一个新的图片:
from matplotlib import pyplot as plt fig = plt.figure() 注意 • 在IPython中,执行该代码一个空白的绘图窗口就会出现,但在Jupyter中则没有任何显示 但是可以通过plt.subplot创建一个或多个子图。 如:带有四个子图的Matplotlib图片 subplot(nrows, ncols, index, **kwargs)
除此之外,Matplotlib包含一个便捷方法plt.subplots创建一个新的图片,然后返回包含了已生成子图对象的Numpy数组。 • plt.subplots(nrows, ncols, sharex, sharey) • nrows子图的行数 • ncols子图的列数 • sharex 所有子图使用相同的x轴刻度 • sharey 所有子图使用相同的y轴刻度 那么实际上,当我们不需要使用子图时,可以通过plt对象直接绘制图形。 python中[-1]、[:-1]、[::-1]、[2::-1]的使用方法
https://blog.csdn.net/ITOMG/article/details/88683256 import numpy as np a=[1,2,3.4,5] print(a) [ 1 2 3 4 5 ]
print(a[-1]) ###取最后一个元素 [5]
print(a[:-1]) ### 除了最后一个取全部 [ 1 2 3 4 ]
print(a[::-1]) ### 取从后向前(相反)的元素 [ 5 4 3 2 1 ]
print(a[2::-1]) ### 取从下标为2的元素翻转读取 [ 3 2 1 ]
matplotlib能够绘制折线图,散点图,条形图,直方图,饼图等等。 具体可参考:https://matplotlib.org/gallery/index.html
折线图介绍 折线图以折线的上升或下降来表示统计数量的增减变化的统计图 特点:能够显示数据的变化趋势,反映事物的变化情况
折线图可以通过plot()函数来绘制 • plt.plot(x, y) # 使用默认的线样式及颜色绘制x,y构建的图形
数据如下,绘制折线图形 • x = [1,2,3,4] • y = [2,3,1,2]
import matplotlib.pyplot as plt x = [1,2,3,4] y = [2,3,1,2] plt.plot(x,y) plt.show()又写了一个例子
假设一天中每隔两个小时的气温分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],绘制图形
# 练习 假设一天中每隔两个小时的气温分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],绘制图形 ''' 体现变化:折现 x:时间 y:温度 ''' from matplotlib import pyplot as plt y = [15,13,14.5,17,20,25,26,26,27,22,18,15] # 每隔两个小时 0 2 4 ...24 ,其中0和24重合 x = range(2,26,2) list(x) # print(list(x)) plt.plot(x,y,color="g",linestyle="--",marker="o") plt.show()实际上,图形的组成除了x,y轴。还有很多组件。如下图
[i/2 for i in range(0,48)] 这个叫列表推导式
from matplotlib import pyplot as plt y = [15,13,14.5,17,20,25,26,26,27,22,18,15] # 每隔两个小时 0 2 4 ...24 ,其中0和24重合 x = range(0,24,2) list(x) # print(list(x)) # 设置刻度 以0,0.5,1,1.5,2.....23.5显示 x_t = [i/2 for i in range(0,48)] plt.xticks(x_t) # 绘制图形 plt.plot(x,y,color="g",linestyle="--",linewidth=2,marker="o",markersize=12) # 展示图形 plt.show()需要放大画布而且旋转45度
from matplotlib import pyplot as plt # 放大画布 plt.figure(figsize=(14,8)) y = [15,13,14.5,17,20,25,26,26,27,22,18,15] # 每隔两个小时 0 2 4 ...24 ,其中0和24重合 x = range(0,24,2) list(x) # print(list(x)) # 设置刻度 以0,0.5,1,1.5,2.....23.5显示 x_t = [i/2 for i in range(0,48)] plt.xticks(x_t,rotation=45) # 绘制图形 plt.plot(x,y,color="g",linestyle="--",linewidth=2,marker="o",markersize=12) # 展示图形 plt.show()可以这样实现 ["{}h".format(i/2) for i in range(0,48)]
from matplotlib import pyplot as plt # 放大画布 plt.figure(figsize=(14,8)) y = [15,13,14.5,17,20,25,26,26,27,22,18,15] # 每隔两个小时 0 2 4 ...24 ,其中0和24重合 x = range(0,24,2) list(x) # print(list(x)) # 设置刻度 以0,0.5,1,1.5,2.....23.5显示 # ticks:刻度 是小格格 # labels:标签 x_t = [i/2 for i in range(0,48)] # 标签 x_l = ["{}h".format(i/2) for i in range(0,48)] plt.xticks(x_t,x_l,rotation=45) # x_t刻度,x_l标签 # 绘制图形 plt.plot(x,y,color="g",linestyle="--",linewidth=2,marker="o",markersize=12) # 展示图形 plt.show()实际上,图形的组成除了x,y轴。还有很多组件。如下图
当我们需要设置轴标签,标题等,通常会使用到中文。但是,matplotlib默认不显示中文,如图:
方法一 文前面 加入
import matplotlib # 全局的设置方式 这是设置matplotlib自带的字体 只能设置.ttf字体 不支持.ttc字体 font = { 'family':'SimHei', 'weight':'bold', 'size':12 } matplotlib.rc("font", **font)方法二
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体) plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题)方法三
from matplotlib import pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14) x = [1,2,3,4] y = [3,2,1,3] plt.plot(x,y) plt.xlabel("x轴标签",fontproperties=font) plt.show()全局设置是针对的所有字体,有缺点 ,局部可以有选择的
# 练习 假设一天中每隔两个小时的气温分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],绘制图形 # 10点到12点每一分钟的气温变化 import random from matplotlib import pyplot as plt ''' 方法一中文字体 ''' # import matplotlib # 全局的设置方式 这是设置matplotlib自带的字体 只能设置.ttf字体 不支持.ttc字体 # font = { # 'family':'SimHei', # 'weight':'bold', # 'size':12 # } # matplotlib.rc("font", **font) ''' 方法二中文字体 ''' # import matplotlib.pyplot as plt # plt.rcParams['font.sans-serif'] = ['SimHei'] # 步骤一(替换sans-serif字体) # plt.rcParams['axes.unicode_minus'] = False # 步骤二(解决坐标轴负数的负号显示问题) ''' 方法三中文字体 局部的 相当于将字体注册到了matplotlib字体库中 让谁显示就给谁传参这里传给ticks ''' from matplotlib import pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"C:\Windows\Fonts\STXINGKA.TTF", size=14) x = range(0,120) # 怎么生成120个随机数 y = [random.randint(20,38) for i in range(120)] # print(y) plt.plot(x,y) # 刻度0,10,20,30,40,50,60.。。。110 x_t = range(0,120,10) # 显示x轴刻度为 十点0分 十点10分..十点50分 十一点0分...十一点50分 x_l = ["十点{}分".format(i) for i in range(0,60,10)] x_l += ["十一点{}分".format(i) for i in range(0,60,10)] # print(x_l) plt.xticks(x_t,x_l,rotation=45,fontproperties=font) # 添加x轴标签 plt.xlabel("time") # 添加y轴标签 plt.ylabel("temperature") plt.show()假设大家在30岁的时候,根据自己的实际情况,统计出来了你和同桌从11岁到30岁每年交的男女朋友的数量如列表a和b,请绘制出该数据的折线图,以便分析自己和同桌每年交男女朋友的数量走势 a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] b = [1,0,3,1,2,2,2,3,1,1,1,1,1,2,1,1,2,3,2,2] 要求: • y轴表示个数 • x轴表示岁数,比如11岁,12岁
from matplotlib import pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"C:\Windows\Fonts\STXINGKA.TTF", size=14) # 找到自带的字体格式 x = range(0,20) y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] plt.plot(x,y) # 刻度 x_t = [i for i in range(0,20)] #刻度上的数值 x_l = ["{}岁".format(i) for i in range(11,31)] plt.xticks(x_t,x_l,rotation=45,fontproperties=font) plt.yticks(fontproperties=font) # 字体设置 没用到 font1 = {'family':'Arial','weight':'normal','size':16} # 标签 # 添加x轴标签 plt.xlabel("岁数",fontproperties=font) # 添加y轴标签 plt.ylabel("交往个数",fontproperties=font) plt.title("历年交往对象情况",fontproperties=font) plt.show()plt.annotate() 基本使用 • text 是注释的文本 • xy 是需要注释的点的坐标 • xytext 是注释文本的坐标 • arrowprops 是箭头的样式属性
from matplotlib import pyplot as plt import random # li = [random.randint(10,30) for i in range(10)] # print(li) y = [26, 20, 20, 20, 14, 16, 18, 21, 22, 12] x = range(10) plt.plot(x,y) # 添加注释文本 plt.annotate("26",xy=(0,26),xytext=(-0.5,24),arrowprops={"width":0.1}) plt.show()