通过python从excel获取横纵坐标制作散点图

23.08.04 简单概述通过python从excel获取横纵坐标制作散点图

注:excel中已具有根据两组数据进行散点图绘制功能,若单一需求可以直接框选所需数据并点击插入后点击图表进行选择所绘制图表类型

本文适用于具有批量需求或懒得点excel的人群

获取数据

通过导入xlrd对excle中数据进行获取,通过输入行数索引列表、列数索引列表与文件名称,对行列内容形成数组并输出。

适用于excel内数据为矩阵的情况,零散数据需要细化操作,自行修改代码。

实例代码如下:

# 输入excel,行数索引列表,列数索引列表,返回对应array数组
def code_03(l_list, h_list, excel_name):
    return_array = np.zeros((len(l_list), len(h_list)))
    data = xlrd.open_workbook(f"./EXCEL/{excel_name}.xls")
    table = data.sheet_by_name("Sheet1")
    l_num = 0
    h_num = 0
    for i in l_list:
        for j in h_list:
            print(l_num, h_num)
            return_array[l_num, h_num] = table.cell_value(i, j)
            h_num = h_num + 1
        h_num = 0
        l_num = l_num + 1
    return return_array

        通过对EXCEL文件夹内.xls后缀表格进行获取数据并返回

绘制散点图

导入 matplotlib.pyplot ,通过以下代码进行字体与正负号配置:

    plt.rcParams['font.sans-serif'] = ['Simhei']    # 设置黑体
    plt.rcParams['axes.unicode_minus'] = False      # 正常显示正负号

通过.scatter进行散点图绘制,其中,s代表散点像素,c为颜色,这里选择绿色,label为点名称,代码如下:

    plt.scatter(x_list, y_list, s=0.5, c="g", alpha=1, label="PSNR = f(ERROR)")

通过对输入行列列表进行横纵坐标系最大值最小值确定,这里选用通俗易懂的代码,也可以选择直接使用函数直接得出最大值与最小值,代码如下:

    # 获取xy两端极值
    x_min = 0
    x_max = 0
    y_min = 0
    y_max = 0
    for i in x_list:
        if i < x_min:
            x_min = i
        if i >x_max:
            x_max = i
    for i in y_list:
        if i < y_min:
            y_min = i
        if i >y_max:
            y_max = i

确定X轴Y轴范围:

    plt.xlim([x_min-10, x_max+10])
    plt.ylim([y_min-10, y_max+10])

设置标题并保存,保存再文件夹image_SDT下,代码如下:

    plt.title(image_name)
    plt.savefig(f'./image_SDT/{image_name}.png')

代码示例

import matplotlib.pyplot as plt
import xlrd
import numpy as np


# 输入x轴列表,y轴列表,散点图名称,输出存储图像
def code_02(x_list, y_list, image_name):
    plt.rcParams['font.sans-serif'] = ['Simhei']    # 设置黑体
    plt.rcParams['axes.unicode_minus'] = False      # 正常显示正负号
    # 散点图,颜色为绿色,透明度100%
    plt.scatter(x_list, y_list, s=0.5, c="g", alpha=1, label="ERROR = f(PSNR)")
    # 获取xy两端极值
    x_min = 0
    x_max = 0
    y_min = 0
    y_max = 0
    for i in x_list:
        if i < x_min:
            x_min = i
        if i >x_max:
            x_max = i
    for i in y_list:
        if i < y_min:
            y_min = i
        if i >y_max:
            y_max = i
    # 更改X轴和Y轴的范围
    plt.xlim([x_min-10, x_max+10])
    plt.ylim([y_min-10, y_max+10])
    # 显示图例
    plt.legend(loc="best")
    # 标题
    plt.title(image_name)
    plt.savefig(f'./image_SDT/{image_name}.png')
​
# 输入excel,行数索引列表,列数索引列表,返回对应array数组
def code_03(l_list, h_list, excel_name):
    return_array = np.zeros((len(l_list), len(h_list)))
    data = xlrd.open_workbook(f"./EXCEL/{excel_name}.xls")
    table = data.sheet_by_name("Sheet1")
    l_num = 0
    h_num = 0
    for i in l_list:
        for j in h_list:
            print(l_num, h_num)
            return_array[l_num, h_num] = table.cell_value(i, j)
            h_num = h_num + 1
        h_num = 0
        l_num = l_num + 1
    return return_array
​
def main():
    # code_01()
    L_LIST = list(range(1, 3363))
    H_LIST = list(range(1, 3))
    EXCLE_NAME = '3362 拼贴误差与psnr对应关系'
    SDT_NAME = 'psnr_PT_sdt'
    array = code_03(L_LIST, H_LIST, EXCLE_NAME)
    code_02(array[:, 0], array[:, 1, ],SDT_NAME)
    
​
if __name__ == '__main__':
    main()

        通过代码对'3362 拼贴误差与psnr对应关系.xls'内数据进行获取并绘制散点图保存。其中,对于excel表格内容行列都是从0开始索引。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值