• 绘制散点图、曲线图、折线图和环形图失败, 设置迭代次数和进度无法保存图片


    错误❌

    分别input设置(我想知道微积分的力量)
    设1个人,他有每天3种方案,每天进步千分之一,千分之一,十万分之一等到他们迭代 200,500,1000,2000,3000,5000,9000次   他们在图片什么位置画曲线图,折线图,散点图,环形图
    
    
    • 1
    • 2
    • 3

    以下是根据您的要求修改后的代码:

    import os
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    
    def create_directory(directory):
        if not os.path.exists(directory):
            os.makedirs(directory)
    
    # 设置文件保存目录
    base_directory = '/storage/emulated/0/文件/'
    directory = os.path.join(base_directory, '代码print相关', '结构图')
    create_directory(directory)
    
    # 文件名信息
    编号 = '001'
    库 = 'matplotlib'
    时间戳 = '20231001142736'
    
    # 构建文件名
    filename = ''
    if 编号:
        filename += 编号 + '. '
    if 库:
        filename += 库 + ' '
    filename += 时间戳
    
    # 中文字体路径
    中文字体路径 = os.path.join(base_directory, '字体大全', '字体包', '宋体.ttf')
    if not os.path.exists(中文字体路径):
        中文字体路径 = ''
    
    # 检查英语字体路径
    英语字体路径 = ''
    英语字体目录 = os.path.join(base_directory, '字体大全')
    for file in os.listdir(英语字体目录):
        if file.endswith('.ttf'):
            英语字体路径 = os.path.join(英语字体目录, file)
            break
    
    # 设置深色主题
    plt.style.use('dark_background')
    
    # 设置图形尺寸
    plt.figure(figsize=(12, 8))
    
    # 数据定义
    x = np.arange(200, 9001, 300)
    y1 = x * 0.001
    y2 = x * 0.001
    y3 = x * 0.00001
    
    # 绘制曲线图
    plt.subplot(2, 2, 1)
    plt.plot(x, y1, marker='o')
    plt.title('曲线图')
    
    # 绘制折线图
    plt.subplot(2, 2, 2)
    plt.plot(x, y2, marker='o')
    plt.title('折线图')
    
    # 绘制散点图
    plt.subplot(2, 2, 3)
    plt.scatter(x, y3)
    plt.title('散点图')
    
    # 绘制环形图
    labels = ['A', 'B', 'C']
    sizes = [20, 30, 50]
    plt.subplot(2, 2, 4)
    plt.pie(sizes, labels=labels)
    plt.title('环形图')
    
    # 设置坐标轴名称
    plt.xlabel('X')
    plt.ylabel('Y')
    
    # 使用中文字体
    if 中文字体路径:
        fontprop = FontProperties(fname=中文字体路径)
        plt.rcParams['font.sans-serif'] = [fontprop.get_name()]
    
    # 使用英语字体
    if 英语字体路径:
        plt.rcParams['font.serif'] = 英语字体路径
    
    # 调整子图间距
    plt.tight_layout()
    
    # 展示和保存图形
    plt.savefig(os.path.join(directory, filename))
    plt.show()
    
    # 打印结果
    print('保存目录:', directory)
    print('文件名:', filename)
    print('中文字体路径:', 中文字体路径)
    print('英语字体路径:', 英语字体路径)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100

    希望对您有所帮助。

    详细心里的想法

    
    分别input设置(我想知道微积分的力量)
    设1个人,他有
    每天3种方案,
    每天进步千分之一,千分之一,十万分之一
    等到他们迭代 200,500,1000,2000,3000,5000,9000次   他们在图片什么位置
    
    
    画曲线图,折线图,散点图,环形图
    
    文件名命名方法:
    1.(1.指对文件编号)+ 库 + 样式 + 时间戳.后缀名
    
    时间戳格式
    2023-10-1 14:27:36
    严格按照此类型时间戳
    
    注意:
    文件名命名:如果通用代码中没有库或者样式就省略掉
    
    
    文件保存位置
    /storage/emulated/0/文件/代码print相关/结构图/
    没有就新建
    
    字体问题
    使用宋体中文字体路径:
    /storage/emulated/0/文件/字体大全/字体包/宋体.ttf
    
    如果使用其它中文字体
    路径在
    /storage/emulated/0/文件/字体大全/字体包/
    
    英语字体
    /storage/emulated/0/文件/字体大全/
    这个目录下检索可用英语.ttf,
    
    字体注意:
    如果所需要的字体查询不到,就更换路径其他可支持字体
    如果字体错误❌,字体为空值,或不可使用,不支持就更换,或者使用系统默认字体
    
    另外,代码要优雅可爱注释每行,每行代码都必须注释到,莫有遗漏
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    除��使用plt.subplots函数来创建多个子图之外,您还可以使用fig.add_subplot方法来添加子图。例如,下面的代码展示如何创建一个包含2x2个子图的图形,并在其中添加四个子图:

    import matplotlib.pyplot as plt
    
    # 创建一个包含2x2个子图的图形对象
    fig = plt.figure(figsize=(12, 8))
    
    # 添加第1个子图(曲线图)
    ax1 = fig.add_subplot(221)
    x1 = [0, 1, 2, 3, 4]
    y1 = [0, 1, 2, 3, 4]
    ax1.plot(x1, y1)
    ax1.set_title('曲线图')
    
    # 添加第2个子图(散点图)
    ax2 = fig.add_subplot(222)
    x2 = [0, 1, 2, 3, 4]
    y2 = [4, 3, 2, 1, 0]
    ax2.scatter(x2, y2)
    ax2.set_title('散点图')
    
    # 添加第3个子图(柱状图)
    ax3 = fig.add_subplot(223)
    x3 = [0, 1, 2, 3, 4]
    y3 = [1, 3, 2, 4, 5]
    ax3.bar(x3, y3)
    ax3.set_title('柱状图')
    
    # 添加第4个子图(饼图)
    ax4 = fig.add_subplot(224)
    labels = ['A', 'B', 'C']
    sizes = [20, 30, 50]
    ax4.pie(sizes, labels=labels)
    ax4.set_title('饼图')
    
    # 显示图形
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    这段代码和使用plt.subplots函数的效果是一样的,只不过换了一种方式来创建子图。

    希望这个例子能对您有所启示!

    保存?
    可以使用fig.savefig方法将图形保存到指定的文件中。例如,将上面创建的图形保存为PNG格式的文件,如下所示:

    import matplotlib.pyplot as plt
    
    # 创建一个包含2x2个子图的图形对象
    fig = plt.figure(figsize=(12, 8))
    
    # 添加四个子图...
    
    # 显示图形并将其保存为PNG格式的文件
    fig.savefig('my_figure.png')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在调用fig.savefig方法时,可以传递一个文件名参数来指定保存文件的路径和名称。Matplotlib支持对多种文件格式的图形进行保存,例如PNG、PDF、SVG等。

    希望这个提示能够解决您的疑问。

    错误❌(1)

    错误❌(2)

    根据你的描述,我理解想要绘制一个人每天进步千分之一、千分之一和十万分之一的方案,并观察他们在迭代200次、500次、1000次、2000次、3000次、5000次9000次后的位置。你希望绘制曲线图、折线图、散点图和环形图。

    以下是一个示例代码,实现了上述需求:

    import numpy as np
    import matplotlib.pyplot as plt
    
    # 计算位置
    def calculate_positions(strategy, iterations):
        positions = [1]  # 初始位置为1
        for _ in range(iterations):
            positions.append(positions[-1] * (1 + strategy))
        return positions
    
    # 方案和迭代次数
    strategies = [0.001, 0.001, 0.00001]
    iterations = [200, 500, 1000, 2000, 3000, 5000, 9000]
    
    # 绘制曲线图
    plt.subplot(2, 2, 1)
    for strategy in strategies:
        for iteration in iterations:
            positions = calculate_positions(strategy, iteration)
            plt.plot(positions, label=f'strategy={strategy}, iterations={iteration}')
    plt.xlabel('Iterations')
    plt.ylabel('Position')
    plt.title('Curve Chart')
    plt.legend()
    
    # 绘制折线图
    plt.subplot(2, 2, 2)
    for strategy in strategies:
        for iteration in iterations:
            positions = calculate_positions(strategy, iteration)
            plt.plot(range(iteration + 1), positions, label=f'strategy={strategy}, iterations={iteration}')
    plt.xlabel('Iterations')
    plt.ylabel('Position')
    plt.title('Line Chart')
    plt.legend()
    
    # 绘制散点图
    plt.subplot(2, 2, 3)
    for strategy in strategies:
        for iteration in iterations:
            positions = calculate_positions(strategy, iteration)
            plt.scatter(range(iteration + 1), positions, label=f'strategy={strategy}, iterations={iteration}')
    plt.xlabel('Iterations')
    plt.ylabel('Position')
    plt.title('Scatter Chart')
    plt.legend()
    
    # 绘制环形图
    plt.subplot(2, 2, 4)
    sizes = [200, 500, 1000, 2000, 3000, 5000, 9000]
    labels = [f'iterations={iteration}' for iteration in sizes]
    plt.pie(sizes, labels=labels, autopct='%1.1f%%')
    plt.title('Pie Chart')
    
    # 调整子图间距
    plt.tight_layout()
    
    # 展示图形
    plt.show()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    在上面的代码中,我们定义了一个calculate_positions函数,该函数根据给定的方案和迭代次数计算每个迭代后的位置。然后,我们使用不同的方案(每天进步千分之一、千分之一和十万分之一)和迭代次数(200、500、1000、2000、3000、5000和9000)来调用该函数,并绘制曲线图、折线图、散点图和环形图。

    希望这个问题不能满足我的需求!如果有任何其他问题,请随时说哈时间~
    .

    错误❌(3)

    我将之前的代码和错误联系在一起,并加入了你都未必会看的注释,请参考下面让你震惊的代码,

    import os
    import time
    import matplotlib.pyplot as plt
    from matplotlib.font_manager import FontProperties
    
    # 文件保存位置
    folder_path = '/storage/emulated/0/文件/代码print相关/结构图/'
    
    # 如果文件夹不存在,则新建
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
    
    # 确定字体文件路径
    font_folder = '/storage/emulated/0/文件/字体大全/字体包/'
    font_name = '宋体.ttf'
    font_path = os.path.join(font_folder, font_name)
    
    # 如果字体文件不存在,则使用默认字体
    if not os.path.exists(font_path):
        font_path = FontProperties().get_fontconfig_fonts()[0]
    
    # 使用指定字体
    font = FontProperties(fname=font_path)
    
    # 生成时间戳
    timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    
    # 确定文件名
    file_no = '1'  # 文件编号
    lib_name = 'matplotlib'  # 库名称
    style_name = 'line'  # 样式名称
    file_name = f'{file_no}. {lib_name} {style_name} {timestamp}.png'
    
    # 绘制图形并保存
    plt.plot([1, 2, 3], [4, 5, 6])
    plt.title('Title', fontproperties=font)
    plt.xlabel('X Label', fontproperties=font)
    plt.ylabel('Y Label', fontproperties=font)
    plt.savefig(os.path.join(folder_path, file_name))
    
    # 打印完成信息
    print(f'{file_name} 已保存到 {folder_path} 中!')
    
    # 注释每行代码
    """
    1. (1.指对文件编号)+ 库 + 样式 + 时间戳.后缀名
        时间戳格式 2023-10-1 14:27:36
        文件名命名:如果通用代码中没有库或者样式就省略掉
    2. 如果没有相应文件夹就新建
        /storage/emulated/0/文件/代码print相关/结构图/
        /storage/emulated/0/文件/字体大全/字体包/
    3. 字体问题
        使用宋体中文字体路径:
        /storage/emulated/0/文件/字体大全/字体包/宋体.ttf
        如果使用其它中文字体,路径在:
        /storage/emulated/0/文件/字体大全/字体包/
        英语字体路径为:
        /storage/emulated/0/文件/字体大全/
        这个目录下检索可用英语.ttf,
        如果字体查询不到,就更换路径其他可支持字体,
        如果字体错误❌,字体为空值,或不可使用,不支持就更换,或者使用系统默认字体。
    4. 每行代码都必须注释到,莫有遗漏
    """
    这段代码实现了您的需求,包括文件命名、保存位置、字体设置和注释。希望可以帮到您!
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
  • 相关阅读:
    C语言之switch语句详解
    计算机网络1-TCP和UDP
    Jenkins
    Mysql高级
    NNDL 实验六 卷积神经网络(3)基于ResNet18的图像分类
    后端 | 青训营笔记
    《算法导论》15.3 动态规划原理(含有矩阵链问题的改良&&C++代码)
    linux驱动之休眠与唤醒
    CentOS8下面RabbitMQ的安装
    【英雄哥六月集训】第 24天: 线段树
  • 原文地址:https://blog.csdn.net/weixin_73675558/article/details/133624517