matplotlib基本图形绘制

温馨提示: 本文最后更新于2024-11-11 13:27:32,某些文章具有时效性,若有错误或已失效,请在下方 留言或联系 梦幻屋

安装matplotlib

pip install matplotlib

matplotlib基本图形绘制

import matplotlib.pyplot as plt

运行时配置参数

#让图片可以显示中文
plt.rcParams['font.sans-serif']='Heiti'
#让图片可以显示负号
plt.rcParams['axes.unicode_minus'] = False

线形图(折线图)

x = np.linspace(-5,5,50)
y = x**2

plt.plot(x,y)
  • 样式和颜色
matplotlib基本图形绘制-梦魂博客

画布的配置


#figsize :画布大小,图片宽度和高度,
#dpi:像素

plt.figure(figsize=(5,3),dpi=100)

在一个画布上绘制多个图


#figsize :画布大小,图片宽度和高度,
#dpi:像素

plt.figure(figsize=(5,3),dpi=100)
x = np.linspace(-5,5,50)


plt.plot(x,np.sin(x))
plt.plot(x,np.cos(x),'r--')
plt.plot(x,-np.cos(x))

matplotlib多图布局

  • 均匀分布
    • subplot()函数
fig = plt.figure(figsize=(5,3))

x = np.linspace(-5,5,50)


a1 = plt.subplot(2,2,1)
a1.plot(x,y)
a1.set_title ("图形1")


a2 = plt.subplot(2,2,2)
a2.plot(x,y)
a2.set_title ("图形2")

a2 = plt.subplot(2,2,3)
a2.plot(x,y)
a2.set_title ("图形3")

a2 = plt.subplot(2,2,4)
a2.plot(x,y)
a2.set_title ("图形4")

#自动调整布局
fig.tight_layout()
fig = plt.figure(figsize=(5,3))

x = np.linspace(-5,5,50)


a1 = plt.subplot(2,2,1)
a1.plot(x,y)
a1.set_title ("图形1")


a2 = plt.subplot(2,2,2)
a2.plot(x,y)
a2.set_title ("图形2")

a2 = plt.subplot(2,1,2)
a2.plot(x,y)
a2.set_title ("图形3")

#自动调整布局
fig.tight_layout()

图形嵌套

fig = plt.figure(figsize=(5,3))

x = np.linspace(-5,5,50)
y - x**2

a1 = fig.add_subplot(1,1,1)
a1.plot(x,y)


a2=fig.add_axes([0.2, 0.2, 0.75, 0.75])
a2.plot(x,y)
fig = plt.figure(figsize=(5,3))

x = np.linspace(-5,5,50)


a1 = plt.subplot(2,2,1)
a1.plot(x,y)
a1.set_title ("图形1")


a2 = plt.subplot(2,2,2)
a2.plot(x,y)
a2.set_title ("图形2")

a2 = plt.subplot(2,1,2)
a2.plot(x,y)
a2.set_title ("图形3")

#自动调整布局
fig.tight_layout()

双轴显示

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = 1000 * np.cos(x)

# 第一条线
plt.plot(x, y1, 'b', label='sin')
plt.ylabel('sin', color='b')

# 创建双轴并画第二条线
plt.twinx()
plt.plot(x, y2, 'r', label='cos')
plt.ylabel('cos', color='r')

matplotlib绘图属性设置

matplotlib基本图形绘制-梦魂博客
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 基本用法
plt.plot(x, y1, 'r', label='sin')
plt.plot(x, y2, 'b', label='cos')
plt.legend()  # 最简单的调用

# 位置设置
plt.legend(loc='upper right')  # 位置用字符串
plt.legend(loc=1)  # 位置用数字(0-10)
"""
位置对照表:
'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
"""

# 格式设置
plt.legend(
    loc='best',
    bbox_to_anchor=(1.2, 1),  # 位置微调
    ncol=2,  # 列数
    fontsize=12,  # 字体大小
    title='图例标题',  # 图例标题
    shadow=True,  # 阴影
    facecolor='white',  # 背景色
    edgecolor='black',  # 边框颜色
    framealpha=0.5  # 透明度
)

# 多图例
line1, = plt.plot(x, y1, 'r', label='sin')
line2, = plt.plot(x, y2, 'b', label='cos')
plt.legend(handles=[line1, line2])  # 手动指定图例项

# 自定义图例标签
plt.legend(['Sin', 'Cos'])  # 直接传入标签列表

# 分组图例
line1, = plt.plot(x, y1, 'r', label='sin')
line2, = plt.plot(x, y2, 'b', label='cos')
legend1 = plt.legend([line1], ['Sin'], loc=1)
plt.legend([line2], ['Cos'], loc=4)
plt.gca().add_artist(legend1)  # 添加多个图例

# 图例外部显示
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

# 去除某条线的图例
plt.plot(x, y1, 'r', label='sin')
plt.plot(x, y2, 'b', label='_cos')  # 标签前加下划线会在图例中隐藏

plt.show()

线条属性

matplotlib基本图形绘制-梦魂博客
matplotlib基本图形绘制-梦魂博客

坐标轴刻度

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

# 1. 基本刻度设置
plt.plot(x, y)
plt.xticks([0, 2, 4, 6, 8, 10])  # 设置x轴刻度位置
plt.yticks([-1, -0.5, 0, 0.5, 1])  # 设置y轴刻度位置

# 2. 刻度标签设置
plt.xticks([0, 2, 4, 6, 8, 10], 
          ['零', '二', '四', '六', '八', '十'])  # 自定义刻度标签

# 3. 刻度旋转
plt.xticks(rotation=45)  # 旋转刻度标签

# 4. 设置刻度格式
plt.gca().xaxis.set_major_formatter(plt.FormatStrFormatter('%.2f'))  # 保留小数点后2位

# 5. 设置刻度间隔
plt.gca().xaxis.set_major_locator(plt.MultipleLocator(2))  # 主刻度间隔为2
plt.gca().xaxis.set_minor_locator(plt.MultipleLocator(0.5))  # 次刻度间隔为0.5

# 6. 隐藏刻度
plt.xticks([])  # 隐藏x轴刻度
plt.yticks([])  # 隐藏y轴刻度

# 7. 刻度内外设置
plt.tick_params(axis='x', direction='in')  # 刻度线向内
plt.tick_params(axis='y', direction='out')  # 刻度线向外

# 8. 设置刻度样式
plt.tick_params(
    axis='both',  # 同时设置xy轴
    which='both',  # 同时设置主次刻度
    length=5,  # 刻度线长度
    width=2,  # 刻度线宽度
    colors='red',  # 刻度颜色
    labelsize=12,  # 刻度标签大小
    grid_color='gray',  # 网格线颜色
    grid_alpha=0.5  # 网格线透明度
)

# 9. 日期刻度
import matplotlib.dates as mdates
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))  # 日期格式化

# 10. 对数刻度
plt.yscale('log')  # 设置y轴为对数刻度

# 11. 科学计数法
plt.ticklabel_format(style='sci', axis='y', scilimits=(0,0))

plt.show()

坐标轴范围

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 1. 使用xlim和ylim
plt.xlim(0, 5)  # 设置x轴范围
plt.ylim(-0.5, 0.5)  # 设置y轴范围

# 2. 使用axis设置所有范围
plt.axis([0, 5, -0.5, 0.5])  # [xmin, xmax, ymin, ymax]

# 3. 自动调整
plt.axis('auto')  # 自动调整
plt.axis('equal')  # 等比例
plt.axis('square')  # 正方形
plt.axis('tight')  # 紧凑显示
plt.axis('scaled')  # 等比例缩放

# 4. 使用set_xlim和set_ylim
ax = plt.gca()
ax.set_xlim([0, 5])
ax.set_ylim([-0.5, 0.5])

# 5. 反转坐标轴
plt.xlim(5, 0)  # x轴反转
plt.ylim(0.5, -0.5)  # y轴反转

# 6. 获取当前范围
xmin, xmax = plt.xlim()
ymin, ymax = plt.ylim()

plt.show()

标题和网格线

plt.titre : 标题

plt.grind : 表格

标签

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.xlabel('caidanb',rotation=5)
plt.ylabel('yzhou',rotation=6)
plt.plot(x, y)

文本

画文字

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 10)
y = np.sin(x)
plt.xlabel('caidanb',rotation=5)
plt.ylabel('yzhou',rotation=6)
plt.plot(x, y)
for a,b in zip(x,y):
    plt.text(x=a,y=b,s=b)
matplotlib基本图形绘制-梦魂博客

注释标注

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)

# 1. 简单文本注释
plt.text(5, 0.5, '这是一个文本注释',
         fontsize=12,
         color='red',
         alpha=0.7)

# 2. 带箭头的注释
plt.annotate('最大值', 
            xy=(1.5, 1),        # 箭头指向的点
            xytext=(2, 1.5),    # 文本位置
            arrowprops=dict(
                facecolor='black',
                shrink=0.05,
                width=2
            ))

# 3. 不同样式的箭头
plt.annotate('样式1', 
            xy=(3, 0.5), 
            xytext=(4, 1),
            arrowprops=dict(
                arrowstyle='->',
            ))

plt.annotate('样式2',
            xy=(5, 0.5),
            xytext=(6, 1),
            arrowprops=dict(
                arrowstyle='fancy',
                fc='red',
                ec='none'
            ))

# 4. 添加数学公式
plt.text(7, 0.5, r'$\sigma=1, \mu=0$')

# 5. 添加带框的文本
plt.text(4, -0.5, '带框文本',
         bbox=dict(
             facecolor='white',
             edgecolor='red',
             alpha=0.7
         ))

# 6. 设置文本对齐方式
plt.text(2, 0, 'center',
         horizontalalignment='center',
         verticalalignment='center')

# 7. 添加带连接线的注释
plt.annotate('连接线示例',
            xy=(6, -0.5),
            xytext=(7, -1),
            arrowprops=dict(
                arrowstyle='-',
                connectionstyle='arc3,rad=0.3'
            ))

# 8. 设置注释的坐标系
plt.annotate('相对坐标',
            xy=(8, 0),
            xycoords='data',        # 数据坐标系
            xytext=(0.8, 0.8),
            textcoords='axes fraction'  # 轴的相对坐标
            )

# 9. 批量添加注释
points = [(1, np.sin(1)), (2, np.sin(2)), (3, np.sin(3))]
for x, y in points:
    plt.annotate(f'({x:.1f}, {y:.1f})',
                (x, y),
                xytext=(5, 5),
                textcoords='offset points')

plt.show()
matplotlib基本图形绘制-梦魂博客

保存图片

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.plot(x, y)
plt.plot(x, y**2)
plt.savefig('data.png')

mmatplotlib常用视图

折线图

import matplotlib.pyplot as plt
import numpy as np

# 固定随机种子,保证每次生成相同的随机数
np.random.seed(42)

# 方法1:简单折线图
x = np.arange(10)
y1 = np.random.randint(1, 10, 10)  # 随机整数
y2 = [2, 4, 6, 8, 10, 8, 6, 4, 2, 4]  # 固定值

plt.figure(figsize=(10, 6))
plt.plot(x, y1, 'ro-', label='随机数据')  # r红色,o圆点,-线
plt.plot(x, y2, 'bs-', label='固定数据')  # b蓝色,s方点,-线

plt.grid(True)  # 添加网格
plt.legend()  # 显示图例
plt.title('简单折线图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 方法2:更复杂的随机数据
x = np.linspace(0, 10, 50)
y1 = np.sin(x) + np.random.normal(0, 0.1, 50)  # 带噪声的正弦
y2 = np.cos(x)  # 固定的余弦

plt.figure(figsize=(10, 6))
plt.plot(x, y1, 'g-', label='带噪声的正弦', alpha=0.7)
plt.plot(x, y2, 'b-', label='标准余弦', alpha=0.7)

plt.grid(True, linestyle='--', alpha=0.5)
plt.legend()
plt.title('带噪声的正弦和标准余弦对比')

# 方法3:多组随机数据对比
categories = ['A', 'B', 'C', 'D', 'E']
values1 = np.random.randint(60, 100, 5)  # 第一组随机数
values2 = np.random.randint(70, 90, 5)   # 第二组随机数
values3 = [80, 85, 82, 87, 85]           # 固定值

plt.figure(figsize=(10, 6))
plt.plot(categories, values1, 'ro-', label='随机组1')
plt.plot(categories, values2, 'bo-', label='随机组2')
plt.plot(categories, values3, 'go-', label='固定组')

plt.grid(True)
plt.legend()
plt.title('多组数据对比')
plt.ylim(50, 100)  # 设置y轴范围




plt.show()
matplotlib基本图形绘制-梦魂博客

matplotlib基本图形绘制-梦魂博客

matplotlib基本图形绘制-梦魂博客

柱状图和条形图

柱形图

import matplotlib.pyplot as plt

# 定义类别和数值
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]

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

# 添加标题和标签
plt.title('Bar Chart Example')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

条形图

import matplotlib.pyplot as plt

# 定义类别和数值
categories = ['A', 'B', 'C', 'D']
values = [10, 20, 15, 30]

# 绘制条形图
plt.barh(categories, values)

# 添加标题和标签
plt.title('Horizontal Bar Chart Example')
plt.xlabel('Values')
plt.ylabel('Categories')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

直方图

import matplotlib.pyplot as plt

# 定义类别和数值


# 绘制条形图
plt.hist(range(10))

# 添加标题和标签
plt.title('Horizontal Bar Chart Example')
plt.xlabel('Values')
plt.ylabel('Categories')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

箱型图

import matplotlib.pyplot as plt

# 数据
scores = [85, 78, 92, 88, 75, 83, 90, 77, 82, 86]

# 绘制箱型图
plt.boxplot(scores)
plt.title('学生考试成绩的箱型图')
plt.ylabel('成绩')
plt.show()
matplotlib基本图形绘制-梦魂博客

散点图

import matplotlib.pyplot as plt

# 数据
x = [1, 2, 3, 4, 5]  # 第一个变量的值
y = [2, 3, 5, 7, 11]  # 第二个变量的值

# 绘制散点图
plt.scatter(x, y)

# 添加标题和标签
plt.title('散点图示例')
plt.xlabel('变量X')
plt.ylabel('变量Y')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

饼图

import matplotlib.pyplot as plt

# 数据
labels = 'A', 'B', 'C', 'D'
sizes = [15, 30, 45, 10]
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']
explode = (0.1, 0, 0, 0)  # 只有A部分突出显示

# 绘制饼图
plt.pie(sizes, explode=explode, labels=labels, colors=colors,
        autopct='%1.1f%%', shadow=True, startangle=140)

# 添加标题
plt.title('饼图示例')

# 确保饼图是圆形的
plt.axis('equal')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

面积图

import matplotlib.pyplot as plt

# 数据
x = [0, 1, 2, 3, 4, 5]
y1 = [0, 1, 4, 9, 16, 25]
y2 = [0, 1, 3, 6, 10, 15]

# 绘制面积图
plt.fill_between(x, y1, color="skyblue", alpha=0.4, label='y = x^2')
plt.fill_between(x, y2, color="lightgreen", alpha=0.4, label='y = x * (x + 1) / 2')

# 添加图例
plt.legend()

# 添加标题和标签
plt.title('面积图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

热力图

import numpy as np
import matplotlib.pyplot as plt

# 创建示例数据
data = np.random.rand(10, 10)  # 生成一个10x10的随机数据矩阵

# 绘制热力图
plt.imshow(data, cmap='viridis')  # 使用viridis颜色映射
plt.colorbar()  # 显示颜色条
plt.title('基础热力图')
plt.show()
matplotlib基本图形绘制-梦魂博客

等高线图

import matplotlib.pyplot as plt
import numpy as np

# 创建网格数据
x = np.linspace(-3, 3, 100)
y = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(x, y)

# 创建函数值数据,例如:Z = (X^2 + Y^2)
Z = np.sqrt(X**2 + Y**2)

# 创建等高线图
plt.figure(figsize=(8, 6))
cp = plt.contourf(X, Y, Z, 6, cmap='viridis')  # 6表示等高线的数量
plt.colorbar(cp)  # 显示颜色条

# 添加标题和标签
plt.title('等高线图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 显示图表
plt.show()
matplotlib基本图形绘制-梦魂博客

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容