比较(一)利用python绘制条形图

比较(一)利用python绘制条形图

条形图(Barplot)简介

1

条形图主要用来比较不同类别间的数据差异,一条轴表示类别,另一条则表示对应的数值度量。

快速绘制

  1. 基于seaborn

    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # 导入数据
    tips = sns.load_dataset("tips")
    
    # 利用barplot函数快速绘制
    sns.barplot(
        x="total_bill", 
        y="day", 
        data=tips, 
        estimator=sum, 
        errorbar=None, 
        color='#69b3a2')
    
    plt.show()
    

    2

  2. 基于matplotlib

    import matplotlib.pyplot as plt
    
    # 导入数据
    tips = sns.load_dataset("tips")
    grouped_tips = tips.groupby('day')['total_bill'].sum().reset_index()
    
    # 利用bar函数快速绘制
    plt.bar(grouped_tips.day, grouped_tips.total_bill)
    
    plt.show()
    

    3

  3. 基于pandas

    import matplotlib.pyplot as plt
    import pandas as pd
    
    # 导入数据
    tips = sns.load_dataset("tips")
    grouped_tips = tips.groupby('day')['total_bill'].sum().reset_index()
    
    # 利用plot.bar函数快速绘制
    grouped_tips.plot.bar(x='day', y='total_bill', rot=0)
    
    plt.show()
    

    4

定制多样化的条形图

自定义条形图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

通过seaborn绘制多样化的条形图

seaborn主要利用barplot绘制条形图,可以通过seaborn.barplot了解更多用法

  1. 修改参数

    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    
    sns.set(font='SimHei', font_scale=0.8, style="darkgrid") # 解决Seaborn中文显示问题
    
    # 导入数据
    tips = sns.load_dataset("tips")
    
    # 构造子图
    fig, ax = plt.subplots(2,2,constrained_layout=True, figsize=(8, 8))
    
    # 修改方向-垂直
    ax_sub = sns.barplot(
        y="total_bill", 
        x="day", 
        data=tips, 
        estimator=sum, 
        errorbar=None, 
        color='#69b3a2',
        ax=ax[0][0]
        )
    ax_sub.set_title('垂直条形图')
    
    # 自定义排序
    ax_sub = sns.barplot(
        y="total_bill", 
        x="day", 
        data=tips, 
        estimator=sum, 
        errorbar=None, 
        color='#69b3a2',
        order=["Fri","Thur","Sat","Sun"],
        ax=ax[0][1]
        )
    ax_sub.set_title('自定义排序')
    
    # 数值排序
    df = tips.groupby('day')['total_bill'].sum().sort_values(ascending=False).reset_index()
    ax_sub = sns.barplot(
        y="day", 
        x="total_bill", 
        data=df, 
        errorbar=None, 
        color='#69b3a2',
        order=df['day'],
        ax=ax[1][0]
        )
    ax_sub.set_title('数值排序')
    
    # 添加误差线
    ax_sub = sns.barplot(
        x="day", 
        y="total_bill", 
        data=tips, 
        estimator=np.mean, 
        errorbar=('ci', 85), 
        capsize=.2, 
        color='lightblue',
        ax=ax[1][1]
        )
    ax_sub.set_title('添加误差线')
    
    plt.show()
    

    5

  2. 分组条形图

    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    
    sns.set(style="darkgrid")
    
    # 导入数据
    tips = sns.load_dataset("tips")
    
    fig, ax = plt.subplots(figsize=(4, 4))
    
    # 分组条形图
    colors = ["#69b3a2", "#4374B3"]
    sns.barplot(x="day", y="total_bill", hue="smoker", data=tips, errorbar=None, palette=colors)
    
    plt.show()
    
    
    # 分组/子分组条形图
    sns.catplot(x="sex", y="total_bill", hue="smoker", col="day", data=tips, kind="bar", height=4, aspect=.7)
    
    plt.show()
    

    6

  3. 引申-数量堆积条形图

    import seaborn as sns
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.patches as mpatches
    
    sns.set(style="darkgrid")
    
    # 导入数据
    tips = sns.load_dataset("tips")
    df = tips.groupby(['day', 'smoker'])['total_bill'].sum().reset_index()
    smoker_df = df[df['smoker']=='Yes']
    non_smoker_df = df[df['smoker']=='No']
    
    # 布局
    plt.figure(figsize=(6, 4))
    
    # 非吸烟者的条形图
    bar1 = sns.barplot(x='day', y='total_bill', data=non_smoker_df, color='lightblue')
    # 吸烟者的条形图,底部开始位置设置为非吸烟者的total_bill值(即吸烟者条形图在上面)
    bar2 = sns.barplot(x='day', y='total_bill', bottom=non_smoker_df['total_bill'], data=smoker_df, color='darkblue')
    
    # 图例
    top_bar = mpatches.Patch(color='darkblue', label='smoker = Yes')
    bottom_bar = mpatches.Patch(color='lightblue', label='smoker = No')
    plt.legend(handles=[top_bar, bottom_bar])
    
    plt.show()
    

    7

  4. 引申-百分比堆积条形图

    import seaborn as sns
    import matplotlib.pyplot as plt
    import pandas as pd
    
    # 导入数据
    tips = sns.load_dataset("tips")
    
    # 计算百分比
    day_total_bill = tips.groupby('day')['total_bill'].sum() # 每日数据
    group_total_bill = tips.groupby(['day', 'smoker'])['total_bill'].sum().reset_index() # 每日每组数据
    group_total_bill['percent'] = group_total_bill.apply(lambda row: row['total_bill'] / day_total_bill[row['day']] * 100, axis=1)
    
    # 将数据分成smoker和non-smoker两份,方便我们绘制两个条形图
    smoker_df = group_total_bill[group_total_bill['smoker'] == 'Yes']
    non_smoker_df = group_total_bill[group_total_bill['smoker'] == 'No']
    
    # 布局
    plt.figure(figsize=(6, 4))
    
    # 非吸烟者的条形图
    bar1 = sns.barplot(x='day', y='percent', data=non_smoker_df, color='lightblue')
    # 吸烟者的条形图,底部开始位置设置为非吸烟者的total_bill值(即吸烟者条形图在上面)
    bar2 = sns.barplot(x='day', y='percent', bottom=non_smoker_df['percent'], data=smoker_df, color='darkblue')
    
    # 图例
    top_bar = mpatches.Patch(color='darkblue', label='smoker = Yes')
    bottom_bar = mpatches.Patch(color='lightblue', label='smoker = No')
    plt.legend(handles=[top_bar, bottom_bar])
    
    plt.show()
    

    8

通过seaborn绘制多样化的条形图

seaborn主要利用barh绘制条形图,可以通过matplotlib.pyplot.barh了解更多用法

  1. 修改参数

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np 
    import pandas as pd
    
    mpl.rcParams.update(mpl.rcParamsDefault) # 恢复默认的matplotlib样式
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    
    # 自定义数据
    height = [3, 12, 5, 18, 45]
    bars = ('A', 'B', 'C', 'D', 'E')
    y_pos = np.arange(len(bars))
    x_pos = np.arange(len(bars))
    
    # 初始化布局
    fig = plt.figure(figsize=(8,8))
    
    # 水平方向-水平条形图
    plt.subplot(3, 3, 1) 
    plt.barh(y_pos, height)
    plt.yticks(y_pos, bars)
    plt.title('水平条形图')
    
    # 指定顺序
    height_order, bars_order = zip(*sorted(zip(height, bars), reverse=False)) # 自定义顺序
    
    plt.subplot(3, 3, 2) 
    plt.barh(y_pos, height_order)
    plt.yticks(y_pos, bars_order)
    plt.title('指定顺序')
    
    # 自定义颜色
    plt.subplot(3, 3, 3) 
    plt.bar(x_pos, height, color=['black', 'red', 'green', 'blue', 'cyan'])
    plt.xticks(x_pos, bars)
    plt.title('自定义颜色')
    
    # 自定义颜色-边框颜色
    plt.subplot(3, 3, 4) 
    plt.bar(x_pos, height, color=(0.1, 0.1, 0.1, 0.1),  edgecolor='blue')
    plt.xticks(x_pos, bars)
    plt.title('自定义边框颜色')
    
    # 控制距离
    width = [0.1,0.2,3,1.5,0.3]
    x_pos_width = [0,0.3,2,4.5,5.5]
    
    plt.subplot(3, 3, 5) 
    plt.bar(x_pos_width, height, width=width)
    plt.xticks(x_pos_width, bars)
    plt.title('控制距离')
    
    # 控制宽度
    x_pos_space = [0,1,5,8,9]
    
    plt.subplot(3, 3, 6) 
    plt.bar(x_pos_space, height)
    plt.xticks(x_pos_space, bars)
    plt.title('控制宽度')
    
    # 自定义布局
    plt.subplot(3, 3, 7) 
    plt.bar(x_pos, height)
    plt.xticks(x_pos, bars, color='orange', rotation=90) # 自定义x刻度名称颜色,自定义旋转
    plt.xlabel('category', fontweight='bold', color = 'orange', fontsize='18') # 自定义x标签
    plt.yticks(color='orange') # 自定义y刻度名称颜色
    
    plt.title('自定义布局')
    
    # 添加误差线
    err = [val * 0.1 for val in height] # 计算误差(这里假设误差为height的10%)
    
    plt.subplot(3, 3, 8) 
    plt.bar(x_pos, height, yerr=err, alpha=0.5, ecolor='black', capsize=10)
    plt.xticks(x_pos, bars)
    plt.title('添加误差线')
    
    # 增加数值文本信息
    plt.subplot(3, 3, 9) 
    ax = plt.bar(x_pos, height)
    for bar in ax:
        yval = bar.get_height()
        plt.text(bar.get_x() + bar.get_width()/2.0, yval, int(yval), va='bottom') # va参数代表垂直对齐方式
    plt.xticks(x_pos, bars)
    plt.title('增加数值文本信息')
    
    fig.tight_layout() # 自动调整间距
    plt.show()
    

    9

  2. 分组条形图

    import numpy as np
    import matplotlib.pyplot as plt
     
    # 宽度设置
    barWidth = 0.25
     
    # 自定义数据
    bars1 = [12, 30, 1, 8, 22]
    bars2 = [28, 6, 16, 5, 10]
    bars3 = [29, 3, 24, 25, 17]
     
    # x位置
    r1 = np.arange(len(bars1))
    r2 = [x + barWidth for x in r1]
    r3 = [x + barWidth for x in r2]
     
    # 绘制分组条形图
    plt.bar(r1, bars1, color='#7f6d5f', width=barWidth, edgecolor='white', label='g1')
    plt.bar(r2, bars2, color='#557f2d', width=barWidth, edgecolor='white', label='g2')
    plt.bar(r3, bars3, color='#2d7f5e', width=barWidth, edgecolor='white', label='g3')
     
    # 轴标签、图例
    plt.xlabel('group', fontweight='bold')
    plt.xticks([r + barWidth for r in range(len(bars1))], ['A', 'B', 'C', 'D', 'E'])
    plt.legend()
    
    plt.show()
    

    10

  3. 数量堆积条形图

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    
     
    # 自定义数据
    bars1 = [12, 28, 1, 8, 22]
    bars2 = [28, 7, 16, 4, 10]
    bars3 = [25, 3, 23, 25, 17]
     
    # bars1 + bars2的高度
    bars = np.add(bars1, bars2).tolist()
     
    # x位置
    r = [0,1,2,3,4]
     
    # bar名称、宽度
    names = ['A','B','C','D','E']
    barWidth = 1
     
    # 底部bar
    plt.bar(r, bars1, color='#7f6d5f', edgecolor='white', width=barWidth, label="g1")
    # 中间bar
    plt.bar(r, bars2, bottom=bars1, color='#557f2d', edgecolor='white', width=barWidth, label="g2")
    # 顶部bar
    plt.bar(r, bars3, bottom=bars, color='#2d7f5e', edgecolor='white', width=barWidth, label="g3")
     
    # x轴设置、图例
    plt.xticks(r, names, fontweight='bold')
    plt.xlabel("group")
    plt.legend()
        
    plt.show()
    

    11

  4. 百分比堆积条形图

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
     
    # 自定义数据
    r = [0,1,2,3,4] # x位置
    raw_data = {'greenBars': [20, 1.5, 7, 10, 5], 'orangeBars': [5, 15, 5, 10, 15],'blueBars': [2, 15, 18, 5, 10]}
    df = pd.DataFrame(raw_data)
     
    # 转为百分比
    totals = [i+j+k for i,j,k in zip(df['greenBars'], df['orangeBars'], df['blueBars'])]
    greenBars = [i / j * 100 for i,j in zip(df['greenBars'], totals)]
    orangeBars = [i / j * 100 for i,j in zip(df['orangeBars'], totals)]
    blueBars = [i / j * 100 for i,j in zip(df['blueBars'], totals)]
     
    # bar名称、宽度
    barWidth = 0.85
    names = ('A','B','C','D','E')
    
    # 底部bar
    plt.bar(r, greenBars, color='#b5ffb9', edgecolor='white', width=barWidth, label="g1")
    # 中间bar
    plt.bar(r, orangeBars, bottom=greenBars, color='#f9bc86', edgecolor='white', width=barWidth, label="g2")
    # 顶部bar
    plt.bar(r, blueBars, bottom=[i+j for i,j in zip(greenBars, orangeBars)], color='#a3acff', edgecolor='white', width=barWidth, label="g3")
     
    # x轴、图例
    plt.xticks(r, names)
    plt.xlabel("group")
    plt.legend()
    
    plt.show()
    

    12

通过pandas绘制多样化的条形图

pandas主要利用barh绘制条形图,可以通过pandas.DataFrame.plot.barh了解更多用法

  1. 修改参数

    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import numpy as np 
    import pandas as pd
    
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    
    # 自定义数据
    category = ['Group1']*30 + ['Group2']*50 + ['Group3']*20
    df = pd.DataFrame({'category': category})
    values = df['category'].value_counts()
    
    # 初始化布局
    fig = plt.figure(figsize=(8,4))
    
    # 水平方向-水平条形图
    plt.subplot(1, 2, 1) 
    values.plot.barh(grid=True)
    plt.title('水平条形图')
    
    # 自定义顺序、颜色
    # 指定顺序
    desired_order = ['Group1', 'Group2', 'Group3']
    values_order = values.reindex(desired_order)
    # 指定颜色
    colors = ['#69b3a2', '#cb1dd1', 'palegreen']
    
    plt.subplot(1, 2, 2) 
    values.plot.bar(color=colors,grid=True, )  
    plt.title('自定义顺序、颜色')
    
    
    
    fig.tight_layout() # 自动调整间距
    plt.show()
    

    13

  2. 分组条形图

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 自定义数据
    data = {
        "Product": ["Product A", "Product A", "Product A", "Product B", "Product B", "Product B"],
        "Segment": ["Segment 1", "Segment 2", "Segment 3", "Segment 1", "Segment 2", "Segment 3"],
        "Amount_sold": [100, 120, 120, 80, 160, 150]
    }
    
    df = pd.DataFrame(data)
    pivot_df = df.pivot(index='Segment',
                        columns='Product',
                        values='Amount_sold')
    
    # 分组条形图
    pivot_df.plot.bar(grid=True)
    
    plt.show()
    

    14

  3. 数量堆积条形图

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 自定义数据
    data = {
        "Product": ["Product A", "Product A", "Product A", "Product B", "Product B", "Product B"],
        "Segment": ["Segment 1", "Segment 2", "Segment 3", "Segment 1", "Segment 2", "Segment 3"],
        "Amount_sold": [100, 120, 120, 80, 160, 150]
    }
    
    df = pd.DataFrame(data)
    pivot_df = df.pivot(index='Segment',
                        columns='Product',
                        values='Amount_sold')
    
    # 堆积条形图
    pivot_df.plot.bar(stacked=True,
                      grid=True)
    
    plt.show()
    

    15

  4. 百分比堆积条形图

    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 自定义数据
    data = {
        "Product": ["Product A", "Product A", "Product A", "Product B", "Product B", "Product B"],
        "Segment": ["Segment 1", "Segment 2", "Segment 3", "Segment 1", "Segment 2", "Segment 3"],
        "Amount_sold": [100, 120, 120, 80, 160, 150]
    }
    
    df = pd.DataFrame(data)
    pivot_df = df.pivot(index='Segment',
                        columns='Product',
                        values='Amount_sold')
    pivot_df_percentage = pivot_df.div(pivot_df.sum(axis=1), axis=0) * 100
    
    
    # 百分比堆积条形图
    pivot_df_percentage.plot.bar(stacked=True,
                      grid=True)
    
    # 图例
    plt.legend(bbox_to_anchor=(1.04, 1),loc='upper left')
    plt.show()
    

    16

总结

以上通过seaborn的barplot、matplotlib的bar和pandas的bar快速绘制条形图,并通过修改参数或者辅以其他绘图知识自定义各种各样的条形图来适应相关使用场景。

共勉~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机的自行车里程监测系统的设计

摘 要 :本设计是一种基于单片机的自行车里程监测系统,采用 STC89C52RC 单片机为核心处理芯片,液晶显示器使用 LCD1602 , 速度测量使用霍尔传感器,温度传感器使用 DS18B20 ,时间由时钟芯片 DS1302 进行…

HTML-JavaWeb

目录 1.标题排版 2.标题样式 ​编辑 ​编辑 小结 3.超链接 4.正文排版 ​编辑​编辑​编辑5.正文布局 6.表格标签 7.表单标签 8.表单项标签 1.标题排版 ● 图片标签 :< img> src:指定图像的ur1(绝对路径/相对路径) width:图像的宽度(像素/相对于父元素的百…

【硬核测评】猫咪主食冻干测评揭秘SC、希喂、爱立方真实对比测评

主食冻干喂养是否必要&#xff1f; 来自七年经验的铲屎官明确告诉你&#xff0c;这是非常必要的喂养方式&#xff01; 随着宠物经济的蓬勃发展和科学养宠知识的普及&#xff0c;如今养猫已不仅仅是让猫咪吃饱那么简单。越来越多的养猫人开始重视猫咪的饮食健康。大量实际喂养案…

吴恩达2022机器学习专项课程C2W2:2.19 sigmoid函数的替代方案 2.20如何选择激活函数 2.21 激活函数的重要性

这里写目录标题 引言sigmoid激活函数的局限1.回顾需求案例2.ReLU激活函数 常用的激活函数1.线性激活函数的解释 如何选择激活函数&#xff1f;1.选择输出层的激活函数2.选择隐藏层的激活函数 选择激活函数的总结1.输出层总结2.隐藏层总结3.TensorFlow设置激活函数 激活函数多样…

kafka-消费者组-发布订阅测试

文章目录 1、发布订阅测试1.1、创建消费者4并指定组 my_group21.2、列出所有的消费者组1.3、查看 my_group2 组的详细信息1.4、发送第六条消息accomplish1.4.1、查看 my_group1 组的详细信息1.4.2、查看 my_group2 组的详细信息 1、发布订阅测试 接着上一篇点对点博客测试 kafk…

Java入门基础学习笔记49——ArrayList综合案例

ArrayList的综合案例-模仿外卖系统中的商家系统 需求&#xff1a; 完成菜品的上架、以及菜品信息浏览功能。 目标&#xff1a; 使用所学的ArrayList集合结合面向对象编程实现以上两个需求。 Food类&#xff1a; package cn.ensource.arraylist;public class Food {private …

【前端之ES6语法】

前端之ES6语法 1. ES6简介2. ES6新特性3.ES6不支持&#xff0c;使用babel3.1 参考文献 4.let和const命令5. 模版字符串6.函数之默认值、剩余参数7. 函数之扩展运算符、箭头函数8.箭头函数this指向和注意事项9.解构赋值10.对象扩展11.Symbol类型12.Set集合类型13.Map数据类型14.…

什么是GPT-4o,推荐GPT-4o的获取使用方法,使用GPT4o模型的最新方法教程(2024年5月16更新)

2024年5月最新GPT-4o模型使用教程和简介 2024年5月最新GPT-4o模型使用教程和简介 2024 年 5 月 13 日&#xff0c;openai 发布了最新的模型 GPT4o。 很多同学还不知道如何访问GPT-4、GPT-4 Turbo和GPT-4o等模型&#xff0c;这篇文章介绍如何在ChatGPT中访问GPT-4o&#xff0…

Cero保存stp格式模型时保留模型的渲染效果

如果默认保存则会丢失渲染效果 如果保存时修改选项如下

【软考】设计模式之外观模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.为子系统中的一组接口提供一个一致的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。2.Facade Pattern。3.是一种结构型设计模式&…

Java学习17

目录 一.System类&#xff1a; 1.System类常见方法 二.BigInteger和BigDecima类&#xff1a; 三.日期类&#xff1a; 1.Date&#xff1a;精确到毫秒&#xff0c;代表特定的瞬间。 2.Calendar: (1)简介&#xff1a; 3.第三代日期类&#xff1a; 1.第三代日期类的常用方…

freemarker ftl模板 格式、列表、图片

文章目录 前言一、freemarker实现内容替换二、ftl 模板1.word另存ftl2.编辑ftl文件2.1 了解一下常用的标记及其说明2.2 list处理2.3 红线2.4 图片 总结 前言 固定内容word生成&#xff1a;freemarker ftl模板 动态表格生成&#xff1a;https://blog.csdn.net/mr_wanter/articl…

假象和谎言

原创 | 刘教链 隔夜BTC&#xff08;比特币&#xff09;徘徊在69k一线。5.25教链内参报告&#xff0c;《BTC ETF持仓即将超越中本聪》。ETH ETF的尘嚣逐渐散去&#xff0c;复归于平静。戏刚唱了个开头&#xff0c;结尾还留着悬念。4000刀之于ETH看来是个关键阻力位&#xff0c;最…

智能视频监控技术为游泳馆安全护航,助力安全管理新升级

随着社会的进步和科技的发展&#xff0c;视频监控技术在各行各业的应用越来越广泛。游泳馆作为公共场所&#xff0c;每天都会有大量的游泳者进出。在这样的环境中&#xff0c;有时难免会发生一些意外事故&#xff0c;如溺水、摔倒等。因此&#xff0c;视频监控建设的必要性尤为…

云服务器如何使用局域网服务器的磁盘空间

说明 云服务器中的磁盘空间不足时&#xff0c;想要开通更多的磁盘空间&#xff0c;但奈何价格太贵&#xff0c;开不起 刚好局域网中有闲置的服务器空间可以拿来用&#xff0c;这里我们直接使用Samba服务来共享文件夹&#xff0c;使用frp来进行内网穿透&#xff1b; 1、磁盘挂…

选择海外代理IP需要注意什么?

跨境电商近年来的兴起与发展&#xff0c;越来越多的跨境从业者从事该行业&#xff0c;但在从事跨境贸易中则需要海外IP代理来突破地域限制、提升访问速度和稳定性、防止账号关联以及保护隐私和安全。这些功能都有助于跨境电商企业在全球范围内拓展业务&#xff0c;提升竞争力&a…

【JPCS出版,EI稳定检索会议推荐】第四届计算机、遥感与航空航天国际学术会议(CRSA 2024)已成功申请JPCS出版,火热征稿中!

【EI核心、Scopus】第四届计算机、遥感与航空航天国际学术会议&#xff08;CRSA 2024&#xff09;将于2024年7月5-7日在日本大阪举行。计算机、遥感与航空航天国际学术会议为来自世界各地的研究学者、工程师、学会会员以及相关领域的专家们提供一个关于“计算机科学”、“遥感技…

C++原创人工智能QPBS01G大功告成!!!

俗话说得好&#xff0c;你周五周六不写作业&#xff0c;要上学了才着急了 我之前的版本bug太多&#xff0c;结果这两天晚上改的我两眼发白&#xff0c;太烦人了 这次这娃学聪明了&#xff0c;遇到不会的问题上网搜&#xff0c;我还更新了反骂人骂人功能&#xff0c;第一次测试…

Nginx从入门到精通(一)Nginx 介绍

一、Nginx应用场景 1、HTTP服务器 Nginx本身也是一个静态资源的服务器&#xff0c;当只有静态资源的时候&#xff0c;就可以使用Nginx来做服务器&#xff0c;如果一个网站只是静态页面的话&#xff0c;那么就可以通过这种方式来实现部署。 2、FTP服务器 FTP服务器&#xff…

Go源码--sync库(1)

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…