Matplotlib

Matplotlib 是一个 Python 的绘图库,它可以用来创建各种静态、交互式和动态的数据可视化。Matplotlib 提供了一种类似于 MATLAB 的绘图接口,使得用户可以轻松地绘制图表、图形和各种可视化。

下面是 Matplotlib 的一些主要特点:

  1. 广泛的图表类型: Matplotlib 支持多种类型的图表,包括线图、散点图、条形图、饼图、直方图、等高线图、3D 图等,能够满足各种数据可视化的需求。
  2. 高度可定制性: 用户可以通过各种参数和选项来自定义图表的外观、样式和布局,以满足个性化的需求。同时,Matplotlib 还提供了丰富的绘图元素和样式选项,使用户能够轻松地创建专业水平的图表。
  3. 支持多种输出格式: Matplotlib 支持将图表导出为多种格式,包括 PNG、PDF、SVG、EPS 等,方便用户在不同的场合和媒介中使用和分享。
  4. 强大的交互功能: Matplotlib 提供了丰富的交互式功能,包括缩放、平移、鼠标提示、图例控制等,使用户能够更加直观地探索数据并进行交互式分析。
  5. 可扩展性: Matplotlib 是一个开放的、可扩展的库,用户可以根据自己的需求自定义新的图表类型、样式和功能,并与其他 Python 库和工具集成,以实现更加复杂和高级的数据可视化。

安装Matplotlib

pip install matplotlib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib

1.title设置

标题

import matplotlib.pyplot as plt
plt.title("title")#括号当中输入标题的名称
#设置中文字体,必须
plt.rcParams['font.sans-serif']=['SimHei']
plt.show()

image-qsmc.png

2.Figure对象

绘图区域

import matplotlib.pyplot as plt
plt.figure(figsize=(6, 2))
plt.title("title")
plt.show()

image 1.png

3.坐标轴及标签

import matplotlib.pyplot as plt

plt.figure(figsize=(6, 6))
plt.title("title")
plt.xlim(0,6) #x轴坐标轴
plt.ylim((0, 3))#y轴坐标轴
plt.xlabel('X')#x轴标签
plt.ylabel('Y')#y轴标签
plt.show()

image 2.png

如果需要将数字设为负数,也可能出现乱码的情况,这时候可以加下面的代码:

plt.rcParams['axes.unicode_minus']=False

4.设置label和legend

设置 label 和 legend 的目的就是为了区分出每个数据对应的图形名称,legend的loc参数用于设置图例位置。

legend 图例

label 标签

import matplotlib.pyplot as plt

plt.figure(figsize=(6, 6))
plt.title("title")
plt.xlim(0,6) #x轴坐标轴
plt.ylim((0, 3))#y轴坐标轴
plt.xlabel('X')#x轴标签
plt.ylabel('Y')#y轴标签
plt.plot(3, 2, 'bo', label="123")#第一个label
plt.plot(3, 1, 'ro', label="456")#第二个label
plt.legend(loc='best')#图列位置,可选best,center等
plt.show()

image 3.png

曲线图练习

练习一:

画一段sin函数和cos函数图像,x取值范围为(0,10)

image 4.png

import matplotlib.pyplot as plt
import numpy as np

plt.figure(figsize=(10, 6))
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.title("sin和cos图像")

plt.xlim(0,10) #x轴坐标轴
plt.ylim(-2, 2)#y轴坐标轴
plt.xlabel('X')#x轴标签
plt.ylabel('Y')#y轴标签

x=np.arange(0,10,step=0.1)

plt.plot(x,np.sin(x), label="sin")
plt.plot(x,np.cos(x),'k', label="cos")

plt.legend(loc='best')
plt.show()

练习二:

现有某某水果店一周的苹果的销售记录数,店长想更加直观的观察比较这一周的销售情况。

每天销售重量情况:[78kg,80kg,79kg,81kg,91kg,95kg,96kg]

image 5.png

plt和ax

pltax 都是 Matplotlib 中常用的对象,用于创建和控制图形。它们之间有一些区别,下面我来简单介绍一下:

  1. plt: plt 是 Matplotlib 中的顶层接口,通常用于快速绘制简单的图形。当你使用 plt 时,Matplotlib 会自动创建一个默认的图形对象,并在该对象上进行绘图。一般来说,如果你只需要绘制简单的图形,例如一条曲线或者一张散点图,可以直接使用 plt
  2. ax: ax 是 Matplotlib 中的 Axes 对象,用于控制图形中的坐标轴、图表样式、图例、注释等各种元素。通过创建 ax 对象,你可以对图形的各个方面进行更细粒度的控制,并实现更灵活、更复杂的图形绘制。一般来说,如果你需要绘制复杂的图形,例如多个子图、带有多个坐标轴的图形、自定义图形样式等,就应该使用 ax

总的来说,plt 提供了简单快速的绘图方法,适用于简单的图形绘制;而 ax 提供了更灵活、更强大的绘图功能,适用于复杂的图形定制和绘制。在实际使用中,你可以根据需要选择合适的方法来创建和控制图形。

后续练习通过ax方式实现

image 6.png

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.family"]="SimHei"
plt.rcParams['axes.unicode_minus']=False
apple=[78,80,79,81,91,95,96]
x=np.arange(1,8)

fig=plt.figure(figsize=(6,4))
ax=fig.add_subplot()
ax.set_xlim(1,7.1)
ax.set_ylim(70,100)
ax.set_xlabel("星期")
ax.set_ylabel("销售量",fontsize=10)
ax.set_title("某某水果店一周水果销售量统计图")


ax.set_xticklabels(["星期一","星期二","星期三","星期四","星期五","星期六","星期日"],fontsize=10)

ax.set_yticks(np.arange(70,105,step=5))
ax.set_yticklabels([" ","75kg","80kg","85kg","90kg","95kg","100kg"],fontsize=12)

ax.plot(x,apple)
ax.legend(loc='best')
plt.show()

image 7.png

5. ax.plot(x,y,format_string) 坐标图

  • x: x轴数据,列表或数组,可选参数
  • y: y轴数据,必须有。
  • format_string:主要来控制我们画的曲线的格式:颜色,风格,标记,可取三者的组合如:“g-o”,"r-.D",如果不用组合,则用color,marker,linestyle,三个参数分别指定。
  • label: 添加图例的类标。

image 8.pngimage 9.pngimage 10.png

ax.plot(x,apple,'b-.*')

image 11.png

练习三

尝试在图上添加一条香蕉销售曲线

banana=[70,80,81,82,75,90,89]

要求黑实线实心圆标记

image 12.png

6.ax.text()

标签,参数讲解

  • x,y: 放置text的位置,横纵坐标。
  • s: str,text内容。
  • fontsize: 设置字体大小,默认12,
  • **fontweight:**设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
  • alpha: 透明度,参数值0至1之间。
  • rotation: (旋转角度)可选参数为:vertical,horizontal 也可以为数字。
  • **backgroundcolor:**背景颜色。
  • color: 字体颜色。
ax.text(7,97,"max:96",fontsize=14,color="g",alpha=1)
ax.text(6,86,"max:90",fontsize=12,alpha=1)

image 13.png

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["font.family"]="SimHei"

apple=[78,80,79,81,91,95,96]
banana=[70,80,81,82,75,90,89]
x=np.arange(1,8)

fig=plt.figure(figsize=(6,4))
ax=fig.add_subplot()
ax.set_xlim(1,7.1)
ax.set_ylim(70,100)
ax.set_xlabel("星期")#添加x轴坐标标签,后面看来没必要会删除它,这里只是为了演示一下。
ax.set_ylabel("销售量",fontsize=10)#添加y轴标签,设置字体大小为16,这里也可以设字体样式与颜色
ax.set_title("某某水果店一周水果销售量统计图")

ax.set_xticks(np.arange(1,8,step=1))
ax.set_xticklabels(["星期一","星期二","星期三","星期四","星期五","星期六","星期日"],fontsize=10)

ax.set_yticks(np.arange(70,105,step=5))
ax.set_yticklabels([" ","75kg","80kg","85kg","90kg","95kg","100kg"],fontsize=12)

ax.plot(x,apple,'b-.*',label="苹果")


ax.plot(x,banana,"k-o",label="香蕉")
ax.text(6.2,97,"max:96",fontsize=14,color="g",alpha=1)
ax.text(6,86,"max:90",fontsize=12,alpha=1)
ax.legend(loc='best')
plt.show()

7.ax.grid(True)

就是添加网格

ax.grid(True)

8.axhline

辅助线

# 添加水平辅助线
ax.axhline(y=80, color='r', linestyle='--', linewidth=1)
# 添加垂直辅助线
ax.axvline(x=4, color='g', linestyle='--', linewidth=1)

9.annotate

注释

for i in range(7):
    ax.annotate(str(apple[i]), (x[i], apple[i]), xytext=(0, -10), textcoords="offset points", ha="center", va="bottom", fontsize=10)
    ax.annotate(str(banana[i]), (x[i], banana[i]), xytext=(0, -10), textcoords="offset points", ha="center", va="bottom", fontsize=10)

具体解释如下:

  • ax.annotate(str(apple[i]), (x[i], apple[i])): 这部分代码创建了一个注释文本,其中 str(apple[i]) 将苹果销量的数值转换为字符串,(x[i], apple[i]) 指定了注释文本的位置,也就是对应数据点本身的位置。
  • xytext=(0, -10): 这部分代码设置了注释文本相对于数据点的位置偏移。(0, -10) 表示向下的偏移量为 10 个单位 (points)。
  • textcoords="offset points": 这部分代码指定了偏移量的单位是点 (points)。
  • ha="center": 这部分代码设置了注释文本的水平对齐方式为居中。
  • va="bottom": 这部分代码设置了注释文本的垂直对齐方式为底部。
  • fontsize=10: 这部分代码设置了注释文本的字体大小为 10。

作业:

回答:折线,柱状,饼图,直方图 之间的区别,以及适用