Python实现生成两个散点图的图表并保存为图片

Python实现生成两个散点图的图表并保存为图片。

  1. 导入所需的库:
    import pandas as pd
    import matplotlib
    matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    

首先导入pandasmatplotlib库,并设置matplotlib使用Agg后端,以便在无图形界面的环境中生成图表。

  1. 定义chart()函数:
def chart(): ...

创建名为chart的函数。

  1. 设置字体和绘图参数:
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] 
plt.rcParams['axes.unicode_minus'] = False

设置matplotlib的字体为"Microsoft YaHei",以显示中文,并禁用Unicode减号。

  1. 读取Excel数据:
data = pd.read_excel(filename, sheet_name=sheetname)

使用pandasread_excel函数读取指定文件名filename和工作表名sheetname的Excel数据,并将结果存储在data变量中。

  1. 初始化画布1:
# 初始化画布1
        plt.subplot(1, 2, 1)
        x = data['运行时间ms']
        y = data['与上一包的间隔ms']
        plt.scatter(x, y, s=10, marker='o', color='r', edgecolor='k')
        plt.title(label='广播间隔图表', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 18}, loc='center')
        plt.xlabel('run_time(ms)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=1)
        plt.ylabel('adv_interval(ms)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=1)
        plt.grid(visible=True, axis='y', color='b', linestyle='dotted', linewidth=1)
        # plt.ylim(0,5000)  # y坐标刻度

        # 初始化画布2
        plt.subplot(1, 2, 2)
        x = data['运行时间ms']
        y = data['rssi值']
        plt.scatter(x, y, s=10, marker='o', color='r', edgecolor='k')
        plt.title(label='RSSI图表', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 18}, loc='center')
        plt.xlabel('run_time(ms)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=1)
        # plt.ylabel('RSSI值', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=2)
        plt.grid(visible=True, axis='y', color='b', linestyle='dotted', linewidth=1)

使用plt.subplot()函数初始化第一个子图,设置数据和绘图参数,包括散点图的大小、标记样式、颜色、边缘颜色等。设置标题、x轴和y轴的标签,并添加网格线。

使用plt.subplot()函数初始化第二个子图,设置数据和绘图参数,与第一个子图类似。

  1. 保存图表为图片:
plt.savefig('doc/Adv+RSSI图表.png', dpi=300)

使用plt.savefig()函数将图表保存为名为"Adv+RSSI图表.png"的图片文件,设置dpi为300,即每英寸像素数。

  1. 关闭绘图窗口:
plt.close()

关闭当前的绘图窗口,释放资源。

  1. 返回信息并结束函数:
    self.thread.update_signal.emit("图表生成完成-存放路径:doc/Adv+RSSI图表.png")

这里是本人做了qt上位机,发送信号告知图表生成完成,并提供图表保存路径。

  1. 设置文件名和工作表名,并调用chart()函数:
filename = 'doc/gw_data.xlsx' sheetname = 'gw_data' chart()

设置Excel文件名为"doc/gw_data.xlsx",工作表名为"gw_data",然后调用chart()函数开始生成图表。

原始代码如下:

        plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
        plt.rcParams['axes.unicode_minus'] = False
        data = pd.read_excel(filename, sheet_name=sheetname)

        # 初始化画布1
        plt.subplot(1, 2, 1)
        x = data['运行时间ms']
        y = data['与上一包的间隔ms']
        plt.scatter(x, y, s=10, marker='o', color='r', edgecolor='k')
        plt.title(label='广播间隔图表', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 18}, loc='center')
        plt.xlabel('run_time(ms)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=1)
        plt.ylabel('adv_interval(ms)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=1)
        plt.grid(visible=True, axis='y', color='b', linestyle='dotted', linewidth=1)
        # plt.ylim(0,5000)  # y坐标刻度

        # 初始化画布2
        plt.subplot(1, 2, 2)
        x = data['运行时间ms']
        y = data['rssi值']
        plt.scatter(x, y, s=10, marker='o', color='r', edgecolor='k')
        plt.title(label='RSSI图表', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 18}, loc='center')
        plt.xlabel('run_time(ms)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=1)
        # plt.ylabel('RSSI值', fontdict={'family': 'SimSun', 'color': 'k', 'size': 12}, labelpad=2)
        plt.grid(visible=True, axis='y', color='b', linestyle='dotted', linewidth=1)
        plt.savefig('doc/Adv+RSSI图表.png', dpi=300)
        plt.close()
        self.thread.update_signal.emit("图表生成完成-存放路径:doc/Adv+RSSI图表.png")
        # plt.show()

        filename = 'doc/gw_data.xlsx'
        sheetname = 'gw_data'
        chart()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值