Matplotlib入门

Matplotlib

(一)、基础知识

1、第一个程序

  • 在计算机中通过程序绘图有两种方式:位图和矢量图。位图:就是用一个个像素绘制的图形。矢量图:是将多个点进行连接的图形。Matplotlib所采用的矢量图的绘制方式,也就是连接相邻的两个点形成一条曲线。如果要让曲线平滑,就要取更多的点进行绘制。

  • Matplotlib有很多函数用于绘制各种图形,其中plot函数用于曲线,需要传入x坐标和y坐标,然后用show函数显示。

  • 例子:使用plot函数绘制一条一元二次方程的曲线,并使用savefig函数将这条曲线保存到./data/demo1_x.jpg

    import matplotlib.pyplot as plt
    
    # 生成200个点的x坐标
    x = range(-100, 100)
    # 生成200个点的y坐标
    y = range(-100, 100)
    y2 = [i ** 2 for i in x]
    
    # 指定窗口1
    plt.figure(1)
    # 绘制一元一次曲线
    plt.plot(x, y)
    # 保存
    plt.savefig("./data/demo1_1.jpg")
    
    # 指定窗口2
    plt.figure(2)
    # 绘制一元二次曲线
    plt.plot(x, y2)
    #保存
    plt.savefig("./data/demo1_2.jpg")
    
    # 显示
    plt.show()
    

在这里插入图片描述

在这里插入图片描述

2、绘制正弦、余弦曲线

  • 正弦
import matplotlib.pyplot as plt
import numpy as np

# 将0~2pi分成100份,以numpy数组的形式返回这100个x值
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y)
plt.show()

  • 余弦
import matplotlib.pyplot as plt
import numpy as np

# 将0~2pi分成100份,以numpy数组的形式返回这100个x值
x = np.linspace(0, 2*np.pi, 100)
y = np.cos(x)
plt.plot(x, y)
plt.show()

在这里插入图片描述

  • 叠加
import matplotlib.pyplot as plt
import numpy as np

# 将0~2pi分成100份,以numpy数组的形式返回这100个x值
x = np.linspace(0, 2*np.pi, 100)
ysin = np.sin(x)
ycos = np.cos(x)
plt.plot(x, ysin)
plt.plot(x, ycos)
plt.show()

在这里插入图片描述

3、绘制随机点

  • 使用scatter函数可以绘制随机点,需要传入x坐标和y坐标
  • 例子:使用scatter函数绘制1024个随机点
import random
import matplotlib.pyplot as plt

count = 1024
x = [random.random() * 100 for i in range(count)]
y = [random.random() * 100 for i in range(count)]
plt.scatter(x, y)
plt.show()

在这里插入图片描述

4、绘制柱状图

  • 使用bar函数可以绘制柱状图
  • 柱状图需要水平的x坐标值,以及每一个x坐标值对应的y坐标值
  • 柱状图主要是用来纵向对比和横线对比
  • 例子:使用bar函数绘制柱状图,并设置柱的宽度
import matplotlib.pyplot as plt

x = [10, 20, 30, 40]
y = [100, 200, 300, 400]
# 通过width参数控制柱的宽度
plt.bar(x, y, width = 3)
plt.show()

在这里插入图片描述

  • 例子:添加标签
import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D', 'E']
values = [10, 24, 36, 40, 15]

# 绘制柱状图
plt.bar(labels, values)

# 添加标题和轴标签
plt.title('Example Bar Chart')
plt.xlabel('Category')
plt.ylabel('Value')

# 显示图形
plt.show()

在这里插入图片描述

  • 例子:显示柱的数值
import matplotlib.pyplot as plt

x = ['A', 'B', 'C', 'D', 'E']
y = [10, 24, 36, 40, 60]

plt.bar(x, y)

# 在每个柱形上方显示数值
# for i in range(len(y)):
#     plt.text(i, y[i] + 1, str(y[i]), ha='center')
# 用枚举法实现
for i, v in enumerate(y):
    print(i, v+1, str(v))
    #(x轴,y轴,数值,居中显示)
    plt.text(i, v + 1, str(v), ha='center')

plt.show()

在这里插入图片描述

  • 例子:显示多组数据,并标注值,显示图例
import numpy as np
import matplotlib.pyplot as plt

# 数据
data1 = [20, 35, 30, 35, 27]
data2 = [25, 32, 34, 20, 25]
x = np.arange(len(data1))

# 绘制柱状图
plt.bar(x, data1, width=0.4, label='Data 1')
plt.bar(x + 0.4, data2, width=0.4, label='Data 2')

# 添加 x 轴标签和刻度(因为原来的刻度在第一个柱的中间,柱宽位0.4,所以要+0.2)
plt.xticks(x + 0.2, ['a', 'b', 'c', 'd', 'e'])

for i, v in enumerate(data1):
    plt.text(i, v + 0.5, str(v), ha='center')
for i, v in enumerate(data2):
    plt.text(i + 0.4, v + 0.5, str(v), ha='center')

# 显示图例
plt.legend()

# 显示图形
plt.show()

在这里插入图片描述

涉及其他语法

  • 在使用enumerate()遍历可迭代对象时,会返回一个迭代器,迭代器的每个元素是一个元组,其中第一个元素是索引,第二个元素是对应的值。
my_list = ['apple', 'banana', 'orange']
for index, value in enumerate(my_list):
    print(index, value)
0 apple
1 banana
2 orange

5、绘制直方图、盒状图

  • 直方图与柱状图的风格类似,都是由若干个柱组成的,但直方图和柱状图的含义却有很大差异
  • 直方图是用来观察分布状态的,而柱状图是用来看每一个x坐标对应y值
  • 也就是说,直方图关注得是发布,并不关心某个值,而柱状图关注得是具体某个值
  • 盒状图与直方图都是表示发布状态得,不过盒状图还有一个功能,就是能体现数据得平均值(盒状图中间的红线)
  • 使用hist函数可以绘制直方图,需要传入两个参数值,第一个参数值用于指定数据序列,第二个参数值表示x轴得发布区域,一般这个参数值与数据序列得个数相同
  • boxplot函数用于绘制盒状图,该函数只需要传入数据序列即可
  • 例子:使用hist函数盒boxplot函数绘制100个随机数得发布状态
import matplotlib.pyplot as plt
import numpy as np

# 标准正态分布中(均值为0,方差为1)
data = np.random.randn(100)
# 这个函数返回两个对象,一个是图形对象(fig),另一个是包含两个子图对象的元组。在这里,子图对象被命名为 a 和 b,它们可以用来分别绘制两个子图。
fig, (a, b) = plt.subplots(1, 2)
a.hist(data, 100)
b.boxplot(data)
plt.show()

在这里插入图片描述

盒状图中间的红线表示平均值,盒状图的纵坐标表示100个随机数的取值范围,可以看出,随机数大多早-2~2之间。

不管盒状图,还是直方图,都可以了解这100个随机数的分布

6、绘制饼图

  • 使用pie函数可以绘制饼图
  • pie函数只要传入数据即可
import matplotlib.pyplot as plt

data = [5, 23, 32, 11, 2]
plt.pie(data)
plt.show()

在这里插入图片描述

  • 其中,x 是饼图中每个类别所占的比例,是一个一维数组。labels 是每个类别的标签,也是一个一维数组,可以为 Noneexplode 是一个一维数组,用于控制每个类别之间的距离,默认为 Noneautopct 参数可以指定每个扇形显示的比例值,例如 ‘%1.1f%%’ 表示保留一位小数的百分数,可以为 Noneshadow 参数用于显示阴影,可以为 TrueFalse
import matplotlib.pyplot as plt

plt.pie(x, labels=None, explode=None, autopct=None, shadow=False)
plt.show()
  • 这个例子中,我们首先定义了每个类别的标签 labels、占比比例 sizes 和颜色 colors,然后定义了每个扇形之间的距离 explode。最后,我们使用 pie 函数绘制了饼图,并使用 axis 函数设置了 x 轴和 y 轴的比例相等,使饼图成为一个圆形。
import matplotlib.pyplot as plt

labels = ['A', 'B', 'C', 'D', 'E']
sizes = [15, 30, 20, 10, 25]
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'red']
explode = (0.1, 0, 0, 0, 0)

'''
第一个%:表示开始字符串格式化
%1.1f:表示一个浮点数,其中1.1是格式化选项,.1表示小数点后保留1位,1表示输出宽度为1,不足补空格
第二个%:表示字符串中要输出一个百分号字符
第三个%:表示结束字符串格式化
shadow=True是指在饼图下方增加一个阴影,以突出显示饼图的浮出效果
'''
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True)
plt.legend()
plt.axis('equal')
plt.show()

在这里插入图片描述

(二)、定制颜色盒样式

1、定制曲线颜色

  1. plot函数可以通过color关键字参数指定曲线的颜色,matplotlib支持多种颜色类型,如预定颜色、html颜色、灰度等。

预定颜色如:

  • blue - 蓝色
  • green - 绿色
  • red - 红色
  • cyan - 青色
  • magenta - 品红色
  • yellow - 黄色
  • black - 黑色
  • white - 白色
  1. html颜色就以井号(#)开头的颜色值;灰度是介于0到1的浮点数,0表示黑色,1表示白色

  2. 例子:

import numpy as np
import matplotlib.pyplot as plt

# 将-6到6分成1024份,形成1024个值
x = np.linspace(-6, 6, 1024)
# 也可以使用以上的几个颜色的首字母作为颜色的表达
colors = ['red', 'yellow', 'b', 'c', '#FF00FF', '0.75']
for i in range(10):
    plt.plot(x, -x**2 + (i+1)*2, color = colors[i % len(colors)])
plt.show()

在这里插入图片描述

2、定制离散点的样式

  1. 离散点的样式主要包括颜色、边缘颜色、边缘宽度、尺寸等。可以定制离散点的颜色、边缘颜色、边缘宽度和尺寸等。
  2. 通过scatter函数的color关键字参数设置离散点的颜色,通过edgecolor关键字参数设置边缘颜色,通过s关键字参数设置尺寸,通过linewidth关键字参数设置边缘宽度
  3. 例子:
import numpy as np
import matplotlib.pyplot as plt

# 产生1组标准正态发布的随机数,100是numpy数组元素个数,2是数组的维度
data1 = np.random.standard_normal((100, 2))
# 将data1中的数据都加-1
data1 += np.array((-1, -1))

data2 = np.random.standard_normal((100, 2))
data2 += np.array((-1, -1))

colors = ['red', 'yellow', 'b', 'c', '#FF00FF', '0,75']
# 将data1的所有数据中的字列表的第一个数据作为x轴的值,同理第二个数据作为y轴的值
plt.scatter(data1[:, 0], data1[:, 1], color = colors[0])
plt.scatter(data2[:, 0], data2[:, 1], color = colors[2])
# 修改点的样式
plt.scatter(data1[:, 0], data1[:, 1], color = colors[4], edgecolors = colors[1], s = 100, linewidths = 3)
plt.show()

在这里插入图片描述

  1. 语法解释:
import numpy as np

# 产生1组标准正态发布的随机数,100是numpy数组元素个数,2是数组的维度
data1 = np.random.standard_normal((2, 2))
print(data1)
# 将data1中的数据都加-1
data1 += np.array((-1, -1))
print(data1)
[[ 0.36356241  1.09262989]
 [-2.08869307 -0.37254382]]
[[-0.63643759  0.09262989]
 [-3.08869307 -1.37254382]]

3、定制柱状图颜色

  1. 通过bar函数的color关键字参数可以设置柱状图的颜色,color参数可以是一个颜色值,也可以是颜色值的序列。
  2. 例子:
import random
import matplotlib.pyplot as plt

# 产生50个0~99的随机数,作为x轴的坐标值
values = [random.randint(0, 99) for i in range(50)]
colors = ['#FF00FF', '#FFFF00', 'r', 'b']
colors_set = [colors[i%len(colors)] for i in range(50)]

plt.bar(range(1, len(values)+1), values, color=colors_set)
plt.show()

在这里插入图片描述

4、定制饼图颜色

  1. colors参数的颜色值序列应该有足够多的颜色值供pie函数选择,否则有肯能相邻部分的颜色值相同或者类似
  2. 例子:
import random
import matplotlib.pyplot as plt

values = [random.random() for i in range(5)]
colors = ['b', 'r', 'g', 'c', 'm']
# 注意这里是colors参数
plt.pie(values, colors=colors, labels = colors, autopct = '%.1f%%')
plt.legend()
plt.show()

在这里插入图片描述

5、定制曲线类型

  1. 设置plot函数的linestyle关键字参数可以改变曲线的类型,该参数值是字符串类型。默认是实线(solid)、虚线(dashed)、点画线(dashdot)、虚线(dotted)
  2. 例子:
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-6, 6, 1024)
plt.plot(x, -x ** 2, color = 'r', linestyle = 'solid')
plt.plot(x, -x ** 2 + 3, color = 'b', linestyle = 'dashed')
plt.plot(x, -x ** 2 + 6, color = 'c', linestyle = 'dashdot')
plt.plot(x, -x ** 2 + 9, color = 'g', linestyle = 'dotted')
plt.show()

在这里插入图片描述

  1. 简便写法:
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-6, 6, 1024)
plt.plot(x, -x ** 2, color = 'r', linestyle = '-')
plt.plot(x, -x ** 2 + 3, color = 'b', linestyle = '--')
plt.plot(x, -x ** 2 + 6, color = 'c', linestyle = '-.')
plt.plot(x, -x ** 2 + 9, color = 'g', linestyle = ':')
plt.show()

6、定制柱状图的填充模式

  1. 通过bar函数的hatch关键字参数可以设置柱状图的填充模式,默认填充模式的实心。hatch参数值是一个字符,不过字符并不能随便设置,有一些固定的字符,如:**“x”,“*”,“-”,“+”,“/”**等。
  2. 例子:
import numpy as np
import matplotlib.pyplot as plt

n = 8
# 产生8个0~1的随机数
a = np.random.random(n)
b = np.random.random(n)

# 设置柱状图下半部分的填充模式为"x"
plt.bar(range(1, n+1), a, color='b', hatch="+")
# 设置柱状图上半部分的填充模式为"*",同时将a放在下方(这个柱距离下方有a的距离)
plt.bar(range(1, n+1), a+b, bottom = a, color='r', hatch="*")
plt.show()

在这里插入图片描述

  1. 例子:显示3个柱
import numpy as np
import matplotlib.pyplot as plt

n = 8
a = np.array([1, 1, 1, 1, 1, 1, 1, 1])
b = np.array([1, 1, 1, 1, 1, 1, 1, 1])

# 设置柱状图下半部分的填充模式为"x"
plt.bar(range(1, n + 1), a, color = 'b', hatch = "+")
# 设置柱状图上半部分的填充模式为"*"
plt.bar(range(1, n + 1), a + b, bottom = a, color = 'r', hatch = "*")
plt.bar(range(1, n + 1), a + b + b, bottom = a + a + b, color = 'c', hatch = "-")
plt.show()

在这里插入图片描述

(三)、注释

1、在坐标上显示标题

  1. 使用title函数直接在坐标系上显示标题
  2. 例子:
import numpy as np
import matplotlib.pyplot as plt

# 如果标题包含中文字符,要加上以下代码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 启用unicode编码支持特殊字符
plt.rcParams['axes.unicode_minus'] = False

x = np.linspace(-4, 4, 1024)
y = 0.25 * (x + 4) * (x + 1) * (x - 2)

plt.plot(x, y, color="r")
# 添加标题
plt.title("标题Text")
plt.show()

在这里插入图片描述

  1. plt.title() 函数还可以设置标题的字体大小、颜色、字体样式等属性。例如,设置字体大小和颜色:

    pythonCopy code
    plt.title('图表标题', fontsize=16, color='blue')
    

2、使用LaTex格式的标题

  1. 如果标题是普通文本,直接使用title函数设置即可。
  2. 如果标题要显示如数学公式,就需要使用LaTex格式的文本来设置标题
  3. LaTex是著名的排版系统,可以用一些特殊的表示法通过文本来描述数学公式
  4. 例子:
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-4, 4, 1024)
y = 0.25 * (x + 4) * (x + 1) * (x - 2)
plt.plot(x, y, color='b')
# 以$开始,$结束,\frac{a}{b}是分数的形式
plt.title(r'$f(x)=\frac{1}{4}(x+4)(x+1)(x-2)$')
plt.show()

在这里插入图片描述

3、为x、y轴添加注释

  1. 使用xlabel函数和ylabel函数可以将注释添加到x坐标轴和y坐标轴上
  2. 例子:
import numpy as np
import matplotlib.pyplot as plt

# 如果标题包含中文字符,要加上以下代码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 启用unicode编码支持特殊字符
plt.rcParams['axes.unicode_minus'] = False

x = np.linspace(-4, 4, 1024)
y = 0.25 * (x + 4) * (x + 1) * (x - 2)

plt.plot(x, y, color="r")
# 添加标题
plt.title("标题Text")
plt.xlabel("x轴Text")
plt.ylabel("y轴Text")
plt.show()

在这里插入图片描述

4、坐标系内添加文本注释

  1. 使用text函数,需要传入x轴值,y轴值,文本值
  2. 例子:
import numpy as np
import matplotlib.pyplot as plt

# 如果标题包含中文字符,要加上以下代码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 启用unicode编码支持特殊字符
plt.rcParams['axes.unicode_minus'] = False

x = np.linspace(-4, 4, 1024)
y = 0.25 * (x + 4) * (x + 1) * (x - 2)

plt.plot(x, y, color="r")
# 添加标题
plt.title("标题Text")
plt.xlabel("x轴Text")
plt.ylabel("y轴Text")
# 指定x,y轴的值设置文本
plt.text(0, -2, '坐标系内备注')
plt.show()

在这里插入图片描述

5、为文本注释添加Box

  1. text函数还能为注释设置边框,背景色、文本颜色等样式,这些样式要依赖text函数的bbox关键字参数。该参数是字典类型,字典的每一个key就是一个样式,如facecolor表示背景颜色
  2. 例子:
import numpy as np
import matplotlib.pyplot as plt

# 如果标题包含中文字符,要加上以下代码
plt.rcParams['font.sans-serif'] = ['SimHei']
# 启用unicode编码支持特殊字符
plt.rcParams['axes.unicode_minus'] = False

x = np.linspace(-4, 4, 1024)
y = 0.25 * (x + 4) * (x + 1) * (x - 2)

plt.plot(x, y, color="r")
# 添加标题
plt.title("标题Text")
plt.xlabel("x轴Text")
plt.ylabel("y轴Text")

# 设置bbox
box = {
        'facecolor': 'r',
        'edgecolor': 'b',
        'boxstyle': 'round'
}
# 指定x,y轴的值设置文本
plt.text(0, -1, '坐标系内备注', bbox=box)
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值