python 绘制箱型图一些技巧

news2024/11/26 23:30:01

引言

本篇是之前有一个需求,需要用python来画箱型图,但要求很多,所以我也不断再版,今天突然想起来这个东西可以总结一下,正好马上得思考下一步做啥了,有足够的空闲时间,所以准备把一些基础概念再好好复习一遍。

箱型图原理

关于原理,这里推荐两篇本站写得比较好的:

Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解

Python 箱型图的绘制并提取特征值

我这里也是根据这两篇作为参考,箱型图的介绍如第二篇中画的那张原理图一样:

在这里插入图片描述

而如果用python来绘制箱型图,具体的源码字段为:

# Autogenerated by boilerplate.py.  Do not edit as changes will be lost.
@_copy_docstring_and_deprecators(Axes.boxplot)
def boxplot(
        x, notch=None, sym=None, vert=None, whis=None,
        positions=None, widths=None, patch_artist=None,
        bootstrap=None, usermedians=None, conf_intervals=None,
        meanline=None, showmeans=None, showcaps=None, showbox=None,
        showfliers=None, boxprops=None, labels=None, flierprops=None,
        medianprops=None, meanprops=None, capprops=None,
        whiskerprops=None, manage_ticks=True, autorange=False,
        zorder=None, capwidths=None, *, data=None):
    return gca().boxplot(
        x, notch=notch, sym=sym, vert=vert, whis=whis,
        positions=positions, widths=widths, patch_artist=patch_artist,
        bootstrap=bootstrap, usermedians=usermedians,
        conf_intervals=conf_intervals, meanline=meanline,
        showmeans=showmeans, showcaps=showcaps, showbox=showbox,
        showfliers=showfliers, boxprops=boxprops, labels=labels,
        flierprops=flierprops, medianprops=medianprops,
        meanprops=meanprops, capprops=capprops,
        whiskerprops=whiskerprops, manage_ticks=manage_ticks,
        autorange=autorange, zorder=zorder, capwidths=capwidths,
        **({"data": data} if data is not None else {}))

(引用自:https://github.com/matplotlib/matplotlib/blob/v3.7.1/lib/matplotlib/pyplot.py#L2473-L2494)

而根据上述两篇中的解释,更改了一些介绍为:

参数说明参数说明
x指定要绘制箱线图的数据,可以是一组数据也可以是多组数据;showcaps是否显示箱线图顶端和末端的两条线,默认显示;
notch是否以凹口的形式展现箱线图,默认非凹口,即矩形showbox是否显示箱线图的箱体,默认显示;
sym指定异常点的形状,默认为蓝色的+号显示;showfliers是否显示异常值,默认显示;
vert是否需要将箱线图垂直摆放,默认垂直摆放,False为水平;boxprops设置箱体的属性,如边框色,填充色等;
whis指定上下须与上下四分位的距离,默认为1.5倍的四分位差;labels为箱线图添加标签,图例
positions指定箱线图的位置,默认为range(1, N+1),N为箱线图的数量;filerprops设置异常值的属性,如异常点的形状、大小、填充色等;
widths指定箱线图的宽度,默认为0.5;medianprops设置中位数的属性,如线的类型、粗细等;
patch_artist是否填充箱体的颜色,默认为False;meanprops设置均值的属性,如点的大小、颜色等;
meanline是否用线的形式表示均值,默认用点来表示;capprops设置箱线图顶端和末端线条的属性,如颜色、粗细等;
showmeans是否显示均值,默认不显示;whiskerprops设置须的属性,如颜色、粗细、线的类型等;
manage_ticks是否自适应标签位置,默认为True;autorange是否自动调整范围,默认为False;

那下面直接进入实战阶段。

箱型图的绘制

这里直接给出一个简版,因为我的点是从无人机视频流中的人提取出来的,所以就省略前面的细节,直接给出一个简版,首先是提取行人平均行动轨迹:

def throw_time(array,start_x,end_x,y):
    indexs = []
    index = 1
    person_throw_time = []
    for i in range(max(array[:,1])):
        if i == 0:
            continue
        each_person_data = array[array[:,1] == i]

        each_person_data = each_person_data[each_person_data[:,2]>start_x]
        each_person_data = each_person_data[each_person_data[:,2]<end_x]
        each_person_data = each_person_data[each_person_data[:,3]>y]
        if each_person_data.shape[0] < 4:
            continue
        each_person_data[:,2] = each_person_data[:,2] + (each_person_data[:,4] / 2)
        each_person_data[:,3] = each_person_data[:,3] + (each_person_data[:,5] / 2)
        person_time = (each_person_data[-1,0] - each_person_data[0,0])*0.04
        print("person time = ",person_time)
        if person_time < 5:
            continue
        person_throw_time.append(person_time)
        indexs.append(index)
        index = index + 1
    return indexs,person_throw_time

indexs1,person_throw_time1 = throw_time(array1,500,1400,400)      
# print(person_throw_time1)
# [10.36, 9.76, 9.48, 9.56, 6.16, 8.36, 8.6, 8.76, 5.6000000000000005, 9.84, 8.0, 9.88, 8.36, 9.16, 8.0, 8.92, 8.32, 9.68, 7.6000000000000005, 8.24, 7.08, 8.8, 8.6, 9.88, 9.64, 9.36, 10.16, 9.56, 7.4, 9.32, 8.48, 9.88, 9.16, 9.48, 9.64, 8.76]
indexs2,person_throw_time2 = throw_time(array2,500,1400,400)
indexs3,person_throw_time3 = throw_time(array3,450,1300,400)
indexs4,person_throw_time4 = throw_time(array4,600,1400,400)

然后就会得到一系列的散点以及它们的索引坐标,这时候再根据这个去画图:

    matplotlib.rc("font", family='Times New Roman')
    plt.ylabel('time(s)', fontsize=18)        
    
    # # 绘图
    ax = plt.subplot()
    ax.boxplot([person_throw_time1, person_throw_time2, person_throw_time3, person_throw_time4], widths=0.4, patch_artist=True,showfliers=False,boxprops={'facecolor': 'skyblue', 'linewidth': 0.8,'edgecolor': 'black'},meanline=True,meanprops={'color': 'red', 'linewidth': 3})
    # 设置轴坐标值刻度的标签
    ax.set_xticklabels(['List 1', 'List 2', 'List 3', 'List 4'], fontsize=14)
    plt.show()

在这里插入图片描述

这里我选用的代码创建了一个包含四个框的箱线图,每个框包含来自 [person_throw_time1、person_throw_time2、person_throw_time3、person_throw_time4] 列表之一的数据。方框填充了天蓝色,并在它们周围绘制了黑色边缘,在每个框的平均值处绘制一条红线,以及不显示离群值。

或许大部分人都是做到这就满足需求了,我开始也以为是的,因为上述是基于第一版的一些偏差颜色以及图例错误后的第二版改进,但最终我做到了第6版,并且又重新更改了画图逻辑。

根据原理绘制箱型图

有没有一种情况,需求给出了另一组不知道从哪里得来的数据,希望我产生一个对比图,而它的数据是直接给出了箱型图的5个点,没有做过多的掩饰,我也没有一丝丝防备,就这样出现,直接丢给了我一张Excel表,我。。。然后就整理好了数据,将上述我的[person_throw_time1、person_throw_time2、person_throw_time3、person_throw_time4]转化成dataframe并使用describe找到其对应的5等分点,这里因为真实数据涉及一些安全问题,以简单的数字代替,即:

import pandas as pd

# 假设这是您的四个列表
person_throw_time1 = [1, 2, 3, 4, 5]
person_throw_time2 = [6, 7, 8, 9, 10]
person_throw_time3 = [11, 12, 13, 14, 15]
person_throw_time4 = [16, 17, 18, 19, 20]

# 将四个列表合并成一个dataframe
data = pd.DataFrame({'data1': data1, 'data2': data2, 'data3': data3, 'data4': data4})

# 使用describe方法计算统计信息
statistics = data.describe()

print(statistics)

那么可以得到相对应的数据:

           data1      data2      data3      data4
count   5.000000   5.000000   5.000000   5.000000
mean    3.000000   8.000000  13.000000  18.000000
std     1.581139   1.581139   1.581139   1.581139
min     1.000000   6.000000  11.000000  16.000000
25%     2.000000   7.000000  12.000000  17.000000
50%     3.000000   8.000000  13.000000  18.000000
75%     4.000000   9.000000  14.000000  19.000000
max     5.000000  10.000000  15.000000  20.000000

我这里重新整理了一下,三组实验结果放到一起为(PS:做了一些修改,所以非标准的五分位):

[
    ["List 1", 6.1, 9.15, 9.84, 10.44, 11.16],
    ["2epochs List 1", 7.0, 9.47, 10.05, 10.81, 12.02],
    ["3epochs List 1", 14.16, 18.41, 20.19, 21.08, 25.42],
    ["List 2", 6.54, 8.65, 9.1, 9.39, 10.08],
    ["2epochs List 2", 7.31, 9.1, 9.5, 10.31, 10.86],
    ["3epochs List 2", 10.32, 14.18, 15.42, 18.08, 20.72],
    ["List 3", 6.14, 8.1, 8.44, 9.1, 9.82],
    ["2epochs List 3", 6.22, 8.3, 8.7, 9.2, 10.12],
    ["3epochs List 3", 8.72, 10.61, 12.71, 16.11, 17.91],
    ["List 4", 7.1, 8.75, 8.84, 9.1, 10.96],
    ["2epochs List 4", 7.3, 8.85, 9.04, 9.1, 11.19],
    ["3epochs List 4", 7.6, 8.3, 8.4, 9.0, 12.55]
]

但影响不大,这里针对上面数据重新画图为:

import matplotlib.pyplot as plt
import matplotlib

data = [
    ["List 1", 6.1, 9.15, 9.84, 10.44, 11.16],
    ["2epochs List 1", 7.0, 9.47, 10.05, 10.81, 12.02],
    ["3epochs List 1", 14.16, 18.41, 20.19, 21.08, 25.42],
    ["List 2", 6.54, 8.65, 9.1, 9.39, 10.08],
    ["2epochs List 2", 7.31, 9.1, 9.5, 10.31, 10.86],
    ["3epochs List 2", 10.32, 14.18, 15.42, 18.08, 20.72],
    ["List 3", 6.14, 8.1, 8.44, 9.1, 9.82],
    ["2epochs List 3", 6.22, 8.3, 8.7, 9.2, 10.12],
    ["3epochs List 3", 8.72, 10.61, 12.71, 16.11, 17.91],
    ["List 4", 7.1, 8.75, 8.84, 9.1, 10.96],
    ["2epochs List 4", 7.3, 8.85, 9.04, 9.1, 11.19],
    ["3epochs List 4", 7.6, 8.3, 8.4, 9.0, 12.55]
]

# 提取数据和标签
labels = [row[0] for row in data]
box_data = [row[1:] for row in data]

# 设置字体
matplotlib.rc("font", family='Times New Roman')

# 绘制箱型图
fig, ax = plt.subplots()
ax.boxplot(box_data, widths=0.4, patch_artist=True, showfliers=False,
           boxprops={'facecolor': 'skyblue', 'linewidth': 0.8, 'edgecolor': 'black'},
           meanline=True, meanprops={'color': 'red', 'linewidth': 3})

# 设置轴标签
ax.set_ylabel('time(s)', fontsize=18)
ax.set_xticklabels(labels, rotation=45, fontsize=12)

plt.show()

在这里插入图片描述

但画完之后还有个问题,就是有些箱型图的上下界限没有了,不知道是什么原因,所以这里还需要把这个重新调试出来,这里就需要用python画箱型图的另一种格式,即将上面的data转化成字典的格式:

data = [
    ["List 1", 6.1, 9.15, 9.84, 10.44, 11.16],
    ["2epochs List 1", 7.0, 9.47, 10.05, 10.81, 12.02],
    ["3epochs List 1", 14.16, 18.41, 20.19, 21.08, 25.42],
    ["List 2", 6.54, 8.65, 9.1, 9.39, 10.08],
    ["2epochs List 2", 7.31, 9.1, 9.5, 10.31, 10.86],
    ["3epochs List 2", 10.32, 14.18, 15.42, 18.08, 20.72],
    ["List 3", 6.14, 8.1, 8.44, 9.1, 9.82],
    ["2epochs List 3", 6.22, 8.3, 8.7, 9.2, 10.12],
    ["3epochs List 3", 8.72, 10.61, 12.71, 16.11, 17.91],
    ["List 4", 7.1, 8.75, 8.84, 9.1, 10.96],
    ["2epochs List 4", 7.3, 8.85, 9.04, 9.1, 11.19],
    ["3epochs List 4", 7.6, 8.3, 8.4, 9.0, 12.55]
]


def convert_to_dict(data):
    draw_data = []
    for row in data:
        draw_data.append({
            "whislo": row[1],
            "q1": row[2],
            "med": row[3],
            "q3": row[4],
            "whishi": row[5]
        })
    return draw_data

draw_data = convert_to_dict(data)
print(draw_data)
# [{'whislo': 6.1, 'q1': 9.15, 'med': 9.84, 'q3': 10.44, 'whishi': 11.16}, {'whislo': 7.0, 'q1': 9.47, 'med': 10.05, 'q3': 10.81, 'whishi': 12.02}, {'whislo': 14.16, 'q1': 18.41, 'med': 20.19, 'q3': 21.08, 'whishi': 25.42}, {'whislo': 6.54, 'q1': 8.65, 'med': 9.1, 'q3': 9.39, 'whishi': 10.08}, {'whislo': 7.31, 'q1': 9.1, 'med': 9.5, 'q3': 10.31, 'whishi': 10.86}, {'whislo': 10.32, 'q1': 14.18, 'med': 15.42, 'q3': 18.08, 'whishi': 20.72}, {'whislo': 6.14, 'q1': 8.1, 'med': 8.44, 'q3': 9.1, 'whishi': 9.82}, {'whislo': 6.22, 'q1': 8.3, 'med': 8.7, 'q3': 9.2, 'whishi': 10.12}, {'whislo': 8.72, 'q1': 10.61, 'med': 12.71, 'q3': 16.11, 'whishi': 17.91}, {'whislo': 7.1, 'q1': 8.75, 'med': 8.84, 'q3': 9.1, 'whishi': 10.96}, {'whislo': 7.3, 'q1': 8.85, 'med': 9.04, 'q3': 9.1, 'whishi': 11.19}, {'whislo': 7.6, 'q1': 8.3, 'med': 8.4, 'q3': 9.0, 'whishi': 12.55}]

这里拿到列表转化成的字典后,同时对 ax.boxplot() 变成 ax.bxp(),因为boxplot用于绘制单个箱线图,而bxp是多个,每个箱线图都可以由五个统计值(最小值、下四分位数、中位数、上四分位数和最大值)来描述。所以代码为:


import matplotlib.pyplot as plt
import matplotlib




data = [
    ["List 1", 6.1, 9.15, 9.84, 10.44, 11.16],
    ["2epochs List 1", 7.0, 9.47, 10.05, 10.81, 12.02],
    ["3epochs List 1", 14.16, 18.41, 20.19, 21.08, 25.42],
    ["List 2", 6.54, 8.65, 9.1, 9.39, 10.08],
    ["2epochs List 2", 7.31, 9.1, 9.5, 10.31, 10.86],
    ["3epochs List 2", 10.32, 14.18, 15.42, 18.08, 20.72],
    ["List 3", 6.14, 8.1, 8.44, 9.1, 9.82],
    ["2epochs List 3", 6.22, 8.3, 8.7, 9.2, 10.12],
    ["3epochs List 3", 8.72, 10.61, 12.71, 16.11, 17.91],
    ["List 4", 7.1, 8.75, 8.84, 9.1, 10.96],
    ["2epochs List 4", 7.3, 8.85, 9.04, 9.1, 11.19],
    ["3epochs List 4", 7.6, 8.3, 8.4, 9.0, 12.55]
]


def convert_to_dict(data):
    draw_data = []
    for row in data:
        draw_data.append({
            "whislo": row[1],
            "q1": row[2],
            "med": row[3],
            "q3": row[4],
            "whishi": row[5]
        })
    return draw_data

draw_data = convert_to_dict(data)

matplotlib.rc("font", family='Times New Roman')
plt.ylabel('time(s)', fontsize=18)

ax = plt.subplot()
# ax.boxplot([row1_data, row2_data, row3_data, row4_data, row5_data, row6_data, row7_data, row8_data], widths=0.4, patch_artist=True,showfliers=False,boxprops={'facecolor': 'skyblue', 'linewidth': 0.8,'edgecolor': 'black'},meanline=True,meanprops={'color': 'red', 'linewidth': 3})


ax.bxp(draw_data, widths=0.4, patch_artist=True,showfliers=False,boxprops={'facecolor': 'skyblue', 'linewidth': 0.8,'edgecolor': 'black'},meanline=True,meanprops={'color': 'red', 'linewidth': 3})
# boxplot
# ax.bxp(draw_data, showfliers=False)

ax.set_xticklabels(['List 1', '2epochs List 1', '3epochs List 1', 'List 2', '2epochs List 2', '3epochs List 2', 'List 3', '2epochs List 3', '3epochs List 3', 'List 4', '2epochs List 4', '3epochs List 4'], fontsize=14)
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/551511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔试强训day48】顺时针打印矩阵、左右最值最大差

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: 笔试强训专栏 笔试强训 目录 文章目录 一、选择题 1.1 10.1.0.1/17的广播地址是&#xff08; &#xff09; 1.2 网络地址172.16.22.38/28 请写出此地址的子网ID以及广播地址&#xff0c;此地址所处子网…

[2019“好贷杯“风控能力挑战赛一等奖] 基于神经网络算法的A股市场多因子选股的研究

本论文为 “2019年中国高校风险管理与控制能力挑战赛” 实际参赛作品&#xff0c;获得一等奖。 本论文体现了较好的数学建模思想和写作&#xff0c;所以将论文和完整代码进行了开源&#xff0c;方便与大家交流。

NetSuite SuiteTax之中国影响

这篇是还账。3个月前林师傅给的一个题目&#xff0c;陆陆续续的学习&#xff0c;一直没有弄完&#xff0c;直到今朝。 SuiteTax是2018年GA的一个重大功能&#xff0c;是NetSuite面向国际市场的一个标志动作。它将过去以美国为中心的税务功能&#xff0c;转向为国际市场服务。只…

xhs-xs webmsxyw分析

近期又更新了&#xff0c;先是改了x-s生成&#xff0c;然后又加上了a1校验。 后面可能会全参校验&#xff0c;比如再加上gid、deviceId、profileData、x-s-common、smidV2之类。 估计以后不能写xhs了&#xff0c;大家且看且珍惜吧。之前相关的文章都被下架了 危&#xff01;…

C语言扫雷小游戏

扫雷小游戏 一&#xff0c;扫雷游戏的理解和整体思路1. 扫雷游戏的玩法2.写扫雷小游戏的整体思路 二&#xff0c;函数功能的实现模块1.宏定义2.打印菜单3.初始化雷盘4.打印雷盘5.布置雷6.玩家排雷6.1 显示该坐标有几个雷的函数6.2雷盘展开函数的实现 三.最终扫雷游戏的的实现1.…

AI绘画Stable Diffusion安装、使用教程 整合包下载

安装Stable Diffusion webui 效果图&#xff1a; 1.准备工作 在下载 AI 绘画工具前&#xff0c;电脑上需要提前下载一些运行的环境 1.下载python、git 首先本地机器最好是英伟达的 N 卡&#xff0c;并且至少需要 4GB 显存才能在本地运行&#xff0c;当然&#xff0c;A 卡也是…

微服务开发系列——第一篇:项目搭建(保姆级教程)

总概 A、技术栈 开发语言&#xff1a;Java 1.8数据库&#xff1a;MySQL、Redis、MongoDB、Elasticsearch微服务框架&#xff1a;Spring Cloud Alibaba微服务网关&#xff1a;Spring Cloud Gateway服务注册和配置中心&#xff1a;Nacos分布式事务&#xff1a;Seata链路追踪框架…

【CH32】| 00——开发环境搭建 | 软件安装 | 资料及工具下载

系列文章目录 TODO 文章目录 1. 简介2. 下载软件3. 安装4. 资料及工具下载4.1 芯片数据手册/参考手册4.2 评估(开发)板原理图/demo4.3 烧录软件4.3.1 isp串口一键下载4.3.2 WCH-LINK Utility烧录 4.4 WCH LINK相关资料/驱动安装4.4.1 WCH LINK相关资料4.4.2 WCH LINK驱动安装 5…

摆摊卖网红气球怎么样?

本章主要介绍一下最近网红气球&#xff1a; 最近看到很多摆摊的抖音视频&#xff0c;都在说卖气球很好&#xff0c;成本低&#xff0c;收益高&#xff0c;所以调研了一下&#xff0c;网红气球分好几种&#xff1a; a,飘空气球&#xff1b; b.手持网红气球 c.青蛙 首先介绍飘空…

初始python

初始python 缘由 ​ 对于python&#xff0c;相比大家并不陌生&#xff0c;Python是一种高级的、解释性编程语言&#xff0c;它具有简洁的语法和强大的内置函数&#xff0c;适用于广泛的应用领域&#xff0c;例如运维,Web开发&#xff0c;数据科学&#xff0c;人工智能等。Pyt…

JVM基础学习---1、JVM总体机制、类加载机制

1、JVM总体机制 1.1 JVM概念 JVM&#xff1a;Java Virtual Machine&#xff0c;翻译过来是Java虚拟机。 JRE&#xff1a;Java Runtime Environment&#xff0c;翻译过来是Java运行时环境。 JDK&#xff1a;Java Development Ki JDK&#xff1a;Java Development Kits&#…

Mysql字符集

1、修改MySQL5.7字符集 我们在新建数据库时&#xff08;Navicat&#xff09;界面时会遇到这两个选项&#xff0c;字符集和排序规则 在MySQL 8.0版本之前&#xff0c;MySQL 5.7 默认的客户端和服务器都用了 latin1 &#xff0c;而latin1是不包含中文的&#xff0c;所以保存中文…

MetersPhere 试用

1. 功能测试 1.1 用例管理 脑图管理 样式&#xff1a; 脑图用例导入 1.2 用例评审 1.2.1 发起用例评审 1.2.2 关联用例&#xff1a; 1.2.3 用例评审 2. 接口测试 2.1 接口定义 类似postman、foxapi等主流接口管理页面 2.2 用例配置&#xff1a; 需要在meterphere安装节点…

路径规划算法:基于人工蜂群算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于人工蜂群的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于人工蜂群的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法人工…

C++ [STL之vector的使用]

本文已收录至《C语言和高级数据结构》专栏&#xff01; 作者&#xff1a;ARMCSKGT STL之vector的使用 前言正文默认成员函数普通构造拷贝构造析构函数赋值重载 迭代器正向迭代器反向迭代器const迭代器 容量类空间容量查询空间容量操作扩容操作元素数量操作缩容操作 数据访问下标…

numpy log随机产生非常奇怪的数字(np.log的大坑)

背景 有一批信号数据要送到网络里训练&#xff0c;训练之前为了统一量纲&#xff0c;首先根据方差和均值做了一次标准化&#xff0c;然后求了一次能量&#xff08;20*log10(x)&#xff09;&#xff0c;也就是说送进网络里的其实是一个能量谱&#xff0c;但是训练过程中经常蹦出…

Python的用途与学习计划

python的用途&#xff1a; 1、web开发&#xff1b; 2、网络爬虫&#xff1b; 3、数据科学&#xff1b; 4、自动化运维&#xff1b; 5、数据库编程&#xff1b; 6、网络编程&#xff1b; 7、图形处理、数学处理、文本处理&#xff1b; 8、多媒体应用。 其中&#xff0c…

组合问题-回溯算法

1题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&#xff1a;n …

美国国际留学生超136万,本科、硕士和博士各占多少?

国际教育市场研究机构ICEF Monitor近日公布&#xff0c;2022年美国持有F-1和M-1有效学习签证的国际学生数量共计136.2万人&#xff0c;与2021年相比增长了10.1%。 其中&#xff0c;国际学生来美国读本科学士学位的占37%&#xff0c;读硕士学位的占41%&#xff0c;读博士学位的…

为什么WordPress这么难用?(以及如何让它变得简单点)

WordPress 是世界上最受欢迎的网站构建器&#xff0c;为互联网上超过 43% 的网站提供支持。然而&#xff0c;有些人抱怨说 WordPress 比 Squarespace 和 Wix 等解决方案更难使用。 在本文中&#xff0c;我们将解决为何WordPress这么难用的神话&#xff0c;并分享您可以用来毫无…