绘图及文本设置

项目难点在于边界的逻辑关系。本文介绍了如何绘制图形并设置文本,包括选择数据、确定坐标值、设置区间数值、添加百分比符号、提供底图和添加文本等六个步骤,详细阐述了每个步骤的操作细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目的难点在于边界的逻辑关系,
.在这里插入图片描述
如上图所示,数据分为两列,将数据作于图中,放于不同的方块之中。作图效果如下图所示:

在这里插入图片描述

第一步:选择数据。因为不确定图的坐标范围,因此确定x/y轴的最大最小值,并通过行列数确认间距。

	filename = input('请输入文件名字:')   # 输入相关参数
    # row = int(input('请输入图的行数:'))
    # column = int(input('请输入图的行数:'))

    row = 6
    column = 6

    filename = filename + '.csv'

    data = pd.read_csv(filename, header=None)   #  引入数据
    data = data.iloc[:, [3, 6]]   # 选择数据列
    ydata = data.iloc[:, 0]   # 选择x y 数据及其最值
    xdata = data.iloc[:, 1]
    ymin = ydata.min()
    ymax = ydata.max()
    xmin = xdata.min()
    xmax = xdata.max()

    yjian = (ymax-ymin)/row  # 确定间距,根据自己情况调整
    xjian = (xmax-xmin)/column

第二步:确定坐标数值。因为间距不确定,因此每个坐标值也不确定,需要人为确定数值。

	ylist = []  #  确定坐标数据
    for i in np.arange(ymin, ymax, yjian):
        ylist.append(round(i, 2))  # 因为坐标不一定是整数,注意保留数值
    ylist.append(ymax)
    xlist = []
    for i in np.arange(xmin, xmax, xjian):
        xlist.append(round(i, 2))
    xlist.append(xmax)

第三步:确定每个空格里面的具体数值,分为两部分。因为一个区间的两个边界值不可同时取到,因此分为左边界值和区间值+右边界值两部分。注意xlist/ylist/m n 顺序。

 	list1 = []    #  确定每个区间和左边界的数值
    for b, s in zip(xlist[:-1], xlist[1:]):
        for k, a in zip(ylist[:-1], ylist[1:]):
            p = 0
            for m, n in zip(data.iloc[:, 0], data.iloc[:, 1]):
                if (((m >= k) & (m < a)) & ((n >= b) & (n < s))):
                    p += 1
            list1.append(p)
    list2 = []  # 确定右边界的值
    for b, s in zip(xlist[:-1], xlist[1:]):
        for k, a in zip(ylist[:-1], ylist[1:]):
            p = 0
            for m, n in zip(data.iloc[:, 0], data.iloc[:, 1]):
                if ((((m == ymax) & (m < k+ yjian + 0.01)) & ((n >= b) & (n <s ))) | (((m >= k) & (m < a)) & ((n == xmax) & (n < b + xjian + 0.01 ))) | (m == ymax & n == xmax)) :  #需要考虑到各种情况,因为前边四舍五入到第二位,故加0.01,当然0.02也可以。
                    p += 1
            list2.append(p)

    list3 = []  # 两种情况的数据相加合并
    for i, j in zip(list1, list2):
        sum = i + j
        list3.append(sum)

第四步:添加百分比号,使用数字计算出小数后当做字符添加%号

	list4 = []    # 添加百分比符号
    for i in list3:
        i = round(i/data.shape[0]*100, 2)      # 10个数据,所以是“区间的数据数量/10*100=区间的数据数量*10”,根据自己情况调整
        i = str(i) + str('%')
        list4.append(i)

第五步:提供底图,为后期数据提供位置。

	plt.figure(figsize=(8, 6))   #  绘图
    plt.xlim(xmin, xmax)
    plt.ylim(ymin, ymax)
    plt.xticks(xlist)
    plt.yticks(ylist)
    plt.tick_params(labelsize=15)

第六步:添加空格里的数据,主要是通过plt.text格式设置文本位置。

	array1 = np.array(list4).reshape(column, row).T   #reshape 里面的顺序是yjian和xjian后面的数字
    for i in xlist[:-1]:
        for j in ylist[:-1]:
            plt.text(i+0.5, j+0.07, array1[ylist.index(j), xlist.index(i)], fontsize=18)
    plt.grid()
    plt.savefig('data.jpg', dpi=150)
    plt.show()

完整代码:


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

while True:
    filename = input('请输入文件名字:')   # 输入相关参数

    row = 6
    column = 6

    filename = filename + '.csv'

    data = pd.read_csv(filename, header=None)   #  引入数据
    data = data.iloc[:, [3, 6]]   # 选择数据列
    ydata = data.iloc[:, 0]   # 选择x y 数据及其最值
    xdata = data.iloc[:, 1]
    ymin = ydata.min()
    ymax = ydata.max()
    xmin = xdata.min()
    xmax = xdata.max()

    yjian = (ymax-ymin)/row  # 确定间距,根据自己情况调整
    xjian = (xmax-xmin)/column

    ylist = []  #  确定坐标数据
    for i in np.arange(ymin, ymax, yjian):
        ylist.append(round(i, 2))
    ylist.append(ymax)
    xlist = []
    for i in np.arange(xmin, xmax, xjian):
        xlist.append(round(i, 2))
    xlist.append(xmax)

    list1 = []    #  确定每个区间的数值
    for b, s in zip(xlist[:-1], xlist[1:]):
        for k, a in zip(ylist[:-1], ylist[1:]):
            p = 0
            for m, n in zip(data.iloc[:, 0], data.iloc[:, 1]):
                if (((m >= k) & (m < a)) & ((n >= b) & (n < s))):
                    p += 1
            list1.append(p)
    list2 = []
    for b, s in zip(xlist[:-1], xlist[1:]):
        for k, a in zip(ylist[:-1], ylist[1:]):
            p = 0
            for m, n in zip(data.iloc[:, 0], data.iloc[:, 1]):
                if ((((m == ymax) & (m < k+ yjian + 0.01)) & ((n >= b) & (n <s ))) | (((m >= k) & (m < a)) & ((n == xmax) & (n < b + xjian + 0.01 ))) | (m == ymax & n == xmax)) :
                    p += 1
            list2.append(p)

    list3 = []
    for i, j in zip(list1, list2):
        sum = i + j
        list3.append(sum)

    list4 = []    # 添加百分比符号
    for i in list3:
        i = round(i/data.shape[0]*100, 2)      # 10个数据,所以是“区间的数据数量/10*100=区间的数据数量*10”,根据自己情况调整
        i = str(i) + str('%')
        list4.append(i)

    array1 = np.array(list4).reshape(column, row).T   #reshape 里面的顺序是yjian和xjian后面的数字

    plt.figure(figsize=(8, 6))   #  绘图
    plt.xlim(xmin, xmax)
    plt.ylim(ymin, ymax)
    plt.xticks(xlist)
    plt.yticks(ylist)
    plt.tick_params(labelsize=15)

    for i in xlist[:-1]:
        for j in ylist[:-1]:
            plt.text(i+0.5, j+0.07, array1[ylist.index(j), xlist.index(i)], fontsize=18)
    plt.grid()
    plt.savefig('data.jpg', dpi=150)
    plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值