Pyecharts入门

news2024/12/23 7:32:01

数据可视化 Pyecharts简介

Apache ECharts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了;PyEcharts是Echarts的Python接口, Pyecharts = Python + Echarts

  • Pyecharts 官方文档手册:pyecharts - A Python Echarts Plotting Library built with love.
  • Pyecharts 官方示例网站:Document
  • echart 官方网站:Apache ECharts

Pyecharts是一个强大的Python库,用于创建各种类型的数据可视化图表,包括折线图、柱状图、饼图、散点图、地图、雷达图等

Pyecharts 环境搭建

Pyeharts版本

本系列Pyecharts版本采用 1.9.0

Pyecharts 安装

建议大家在单独的隔离环境中使用pip 进行安装

pip install pyecharts==1.9.0

也可以使用源码方式安装最新版,但是由于pyecharts更新方式,不同版本的API可能略有不同

$ git clone https://github.com/pyecharts/pyecharts.git
$ cd pyecharts
$ pip install -r requirements.txt
$ python setup.py install
# 或者执行 python install.py

在可视化之前,会对原始数据进行一些列的整理,数据处理过程中,可能会用到

  • pandas
  • numpy
  • matplotlib

等Python工具,在进行绘图时,会高频率访问pyecharts API 文档和示例官网

  • Pyecharts 官方文档手册:pyecharts - A Python Echarts Plotting Library built with love.
  • Pyecharts 官方示例网站:Document
  • echart 官方网站:Apache ECharts

Pyecharts 柱状图绘制 

我们使用中国各省2003年至2021年结婚登记数与离婚登记数数据进行分析与可视化,该数据来自中国国家统计局官方数据。

数据准备

import pandas as pd
import numpy as np

path_marry = "结婚数据.csv"
path_divorse = "离婚数据.csv"
marry_data = pd.read_csv(path_marry)
divorse_data = pd.read_csv(path_divorse)

# 只需要在顶部声明 CurrentConfig.ONLINE_HOST 即可
# from pyecharts.globals import CurrentConfig, OnlineHostType

# OnlineHostType.NOTEBOOK_HOST 默认值为 http://localhost:8888/nbextensions/assets/
# CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST

可以预览一下结婚数据(离婚数据类似)

marry_data

853c5ab4c9e741da9cd119b712c93e05.png

显示了各个省2003年到2021年结婚数据,单位是(万对),数据中,并没有显示全国合计的数据,可以给当前的数据增加一行,表示全国求和的数据,执行如下代码:

demo = marry_data.set_index(marry_data["地区"]).drop(columns=["地区"])
demo = demo.transpose()
demo['全国合计'] = demo.sum(axis=1)
marry_data = demo.transpose()

需求1,要求对全国结婚登记数每年度数据变化展现

marry_data.loc["全国合计"]

3dbcb6eada944275af091a4d5924918a.png

很明显,是一个Series类型的数据,该类型数据有两个需要展示的内容,分别是index和values,可视化图标中能够展示该类型数据有很多,但是最贴题的应该是条柱图,在进行图形展示之前,我们还需要了解,Pyecharts到底是怎么进行条柱图绘制的?

pyecharts 条柱图的绘制

在官方示例中,直接copy过来最简单的pyecharts的源码

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker


c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
    .render("bar_base.html")
)

大家执行这些代码时,并没有什么效果,并不是代码错误,而是在代码中执行render("bar_base.html")这个方法,默认规则是生成一个HTML页面,在页面中使用echarts渲染对应图表;大家可以查看一下,在当前目录下,是否生成了一个bar_base.html内容,为了学习过程中的联系性,我们不选择生成一个单独的页面,我们选择在notebook中进行渲染,只需要替换一点点代码,把render方法替换成render_notebook

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker
c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
)
c.render_notebook()

解析一下这段代码,首先,pyecharts的编程风格是链式调用风格,在pyecharts中每一种图表都是实例对象,柱状图就是Bar这个类实例化后的结果,柱状图绘制其实需要两种数据,X轴上的数据,以及Y轴上的数据,柱状图是通过条柱的高低或者长短来表示数据;所以,在Bar实例化后,需要添加两个轴方向上的数据,add_xaxis 方法添加的就是X轴向的数据,Faker.choose()其实就是pyecharts提供的一个方便产生随机数据的方法,随机产生数据。对于柱状图而言,X轴向的数据是离散的,并不是连续的!一般是种类、类别数据

add_yaxis 方法就是添加Y轴向数据,也是条柱图要表达的数据,pyecharts可以支持多Series系列数据,什么是系列呢,该图表有两种颜色的条柱,一种颜色的条柱就是Series数据,调用add_yaxis方法就会像Bar实例添加一个系列的数据。这个add_yaxis 是pyecharts非常核心的方法,可以查看下这个方法的参数

help(Bar().add_yaxis)

# 
Help on method add_yaxis in module pyecharts.charts.basic_charts.bar:

add_yaxis(series_name: str, y_axis: Sequence[Union[int, float, pyecharts.options.charts_options.BarItem, dict]], *, is_selected: bool = True, xaxis_index: Union[int, float, NoneType] = None, yaxis_index: Union[int, float, NoneType] = None, is_legend_hover_link: bool = True, color: Optional[str] = None, is_realtime_sort: bool = False, is_show_background: bool = False, background_style: Union[pyecharts.options.charts_options.BarBackgroundStyleOpts, dict, NoneType] = None, stack: Optional[str] = None, stack_strategy: Optional[str] = 'samesign', sampling: Optional[str] = None, cursor: Optional[str] = 'pointer', bar_width: Union[int, float, str] = None, bar_max_width: Union[int, float, str] = None, bar_min_width: Union[int, float, str] = None, bar_min_height: Union[int, float] = 0, category_gap: Union[int, float, str] = '20%', gap: Optional[str] = '30%', is_large: bool = False, large_threshold: Union[int, float] = 400, dimensions: Optional[Sequence] = None, series_layout_by: str = 'column', dataset_index: Union[int, float] = 0, is_clip: bool = True, z_level: Union[int, float] = 0, z: Union[int, float] = 2, label_opts: Union[pyecharts.options.series_options.LabelOpts, dict, NoneType] = <pyecharts.options.series_options.LabelOpts object at 0x10567fcc0>, markpoint_opts: Union[pyecharts.options.series_options.MarkPointOpts, dict, NoneType] = None, markline_opts: Union[pyecharts.options.series_options.MarkLineOpts, dict, NoneType] = None, tooltip_opts: Union[pyecharts.options.global_options.TooltipOpts, dict, NoneType] = None, itemstyle_opts: Union[pyecharts.options.series_options.ItemStyleOpts, dict, NoneType] = None, encode: Union[str, pyecharts.commons.utils.JsCode, dict, NoneType] = None) method of pyecharts.charts.basic_charts.bar.Bar instance

有很多很多参数,很夸张,这些参数控制着这个系列数据的展现形式,有各种各样的配置,比如条柱颜色,条柱上Label的位置等等,具体信息请查看pyecharts的官网,解释很详细 点我.

可以观察到,这个方法有两个必须传递的参数,第一个参数和第二个参数,分别表示该系列数据的名称,这个系列名称会自动添加到该图形的legend上去,第二个参数就是该系列数据的真实值,其他参数,未传入的参数都有默认值,注意,这些参数主要控制着每一种系列数据的样式,也就是说,不同系列数据可以设置不同的样式!

重点!

接下来有调用了一个很重要的方法,set_global_opts方法,这个方法是实例对象调用的,但是他,并不是对系列数据进行修饰,而是对整体图表进行修饰,称之为全局项配置。负责图形大部分整体的修饰,主要包括:

  • 初始化配置
  • 动画配置
  • 标题配置
  • 图例配置
  • 坐标轴配置
  • 工具箱配置
  • 动画配置

对Pyecharts有了一定了解之后,我们就可以把marry_data.loc["全国合计"] 这个Pandas中的Series数据使用柱图表现出来了,只需要替换add_xaxis和add_xaxis方法中的数据值。

tips:

pyecharts 中只支持list等 Python原生数据,所以还要对numpy数组进行一个转换,使用tolist方法

show_data1 = marry_data.loc["全国合计"]
x_axis_data = pd.Series(show_data1.index).apply(lambda x:x[:-1]).values.tolist()
y_axis_data = show_data1.values.tolist()
c = (
    Bar()
    .add_xaxis(x_axis_data)
    .add_yaxis("全国数据分布", y_axis_data)
)
c.render_notebook()

没有经过修饰的 图表肯定不是我们想要的,接下来,我们就要对该图表进行修饰,第一步,肯定是对不规则的label进行设计。由于图表密度比较大,产生重叠,所以最好把label移入柱体内部。这个label是series条柱本身的设计,所以可以在add_yaxis中通过参数配置,具体规则,还是需要对文档进行查询 来吧,点我.

c = (
    Bar(init_opts=opts.InitOpts(width="1000px",height="400px"))
    .add_xaxis(x_axis_data)
    .add_yaxis("全国数据分布", y_axis_data
              , label_opts=opts.LabelOpts(
                      position="inside"
                      , color='white'
                      , rotate=90
                      , font_size=12
                      , font_weight='blod'
                    
                  )
              )
)
c.render_notebook()

结果是清晰了一些,但是还是有问题,显示数据并没有格式化,数据格式化可以对原始数据进行格式化,也可以在现实的时候通过配置进行控制,通过查询文档,发现,在配置LabelOpts时,支持formatter这样的格式化函数,但是不幸的是,这个是需要传入一个javascript函数,也就是说,在使用Python编程完成可视化时,还需要了解一点点的JavaScript代码,以下是文档对该回调函数的解释

    # 参数 params 是 formatter 需要的单个数据集。格式如下:
    # {
    #    componentType: 'series',
    #    // 系列类型
    #    seriesType: string,
    #    // 系列在传入的 option.series 中的 index
    #    seriesIndex: number,
    #    // 系列名称
    #    seriesName: string,
    #    // 数据名,类目名
    #    name: string,
    #    // 数据在传入的 data 数组中的 index
    #    dataIndex: number,
    #    // 传入的原始数据项
    #    data: Object,
    #    // 传入的数据值
    #    value: number|Array,
    #    // 数据图形的颜色
    #    color: string,
    # }

接下来可以使用js代码稍微修饰一下

from pyecharts.commons.utils import JsCode
js_code_01 = """function (param) {return Number(param.data).toFixed(2)}"""
c = (
    Bar(init_opts=opts.InitOpts(width="1000px",height="400px"))
    .add_xaxis(x_axis_data)
    .add_yaxis("全国数据分布", y_axis_data
              , label_opts=opts.LabelOpts(
                      position="inside"
                      , color='white'
                      , rotate=90
                      , font_size=12
                      , font_weight='blod'
                      , formatter=JsCode(js_code_01)
                  )
              )
)
c.render_notebook()

接下来,还需要进行文本的显示,这里的文本是指图表的标题,这里是全局设置,通过title_opts参数设置

c = (
    Bar(init_opts=opts.InitOpts(width="1000px",height="400px"))
    .add_xaxis(x_axis_data)
    .add_yaxis("全国数据分布", y_axis_data
              , label_opts=opts.LabelOpts(
                      position="inside"
                      , color='white'
                      , rotate=90
                      , font_size=12
                      , font_weight='blod'
                      , formatter=JsCode(js_code_01)
                  )
              )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title = "全国结婚登记数量(万对)数据分布"
            , subtitle="结婚数据"
        )
    )
)
c.render_notebook()

到此,基本设计已经完结,但是,当前可视化图表颜色表达还不是特别突出,为了得到良好的视觉效果,可以使用VisualMapOpts 进行颜色与数据的映射,该配置可以使用全局配置。

c = (
    Bar(init_opts=opts.InitOpts(width="1000px",height="400px", theme='dark'))
    .add_xaxis(x_axis_data)
    .add_yaxis("全国数据分布", y_axis_data
              , label_opts=opts.LabelOpts(
                      position="inside"
                      , color='white'
                      , rotate=90
                      , font_size=12
                      , font_weight='blod'
                      , formatter=JsCode(js_code_01)
                  )
              )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title = "全国结婚登记数量(万对)数据分布"
            , subtitle="结婚数据"
        ),
        visualmap_opts=opts.VisualMapOpts(
            max_ = show_data1.max()
            , min_ = show_data1.min()
            , range_color = ['#3867d6','#45aaf2','#0fb9b1','#26de81','#fed330','#fa8231','#eb3b5a']
        )
    )
)
c.render_notebook()

我们还可以给条柱设计阴影效果,让图表显示的更立体,通过属性ItemStyleOpts,穿越时空.,但是pyecharts并没有开放对应的阴影效果的属性,但是我们可以使用字典形式的配置,来指定阴影效果,可以直接查阅echarts再次穿越对应的阴影设置,在pyecharts中使用字典配置

show_data2 = show_data1.sort_index()
x_axis_data = pd.Series(show_data2.index).apply(lambda x:x[:-1]).values.tolist()
y_axis_data = show_data2.values.tolist()
c = (
    Bar(init_opts=opts.InitOpts(width="1000px",height="400px", theme='dark'))
    .add_xaxis(x_axis_data)
    .add_yaxis("全国数据分布", y_axis_data
              , label_opts=opts.LabelOpts(
                      position="inside"
                      , color='white'
                      , rotate=90
                      , font_size=12
                      , font_weight='blod'
                      , formatter=JsCode(js_code_01)
                  ),
                itemstyle_opts={
                       "areaColor":'#091632'
                       , 'borderColor':'#4168E1'
                       , 'shadowColor':'#4168E1'
                       , "shadowBlur":5
                       , 'opacity':1
                   
               }
               , markline_opts=opts.MarkLineOpts(
                   data=[
                       opts.MarkLineItem(
                           name="平均值"
                           , type_="average"
                           , 
                       ),
                       opts.MarkLineItem(
                           name="最低值"
                           , type_="min"
                       )
                   ],
                   linestyle_opts=opts.LineStyleOpts(
                       width=2
                       , color="#8854d0"
                       , type_="dashed"
                       , opacity=0.5
                   )
               )
              )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title = "全国结婚登记数量(万对)数据分布"
            , subtitle="结婚数据"
        ),
        visualmap_opts=opts.VisualMapOpts(
            max_ = show_data1.max()
            , min_ = show_data1.min()
            , range_color = ['#3867d6','#45aaf2','#0fb9b1','#26de81','#fed330','#fa8231','#eb3b5a']
        )
    )
)
c.render_notebook()

需求2,计算2019年各省结婚登记数量对比

上一个需求数据对比的维度是时间,当前这个需求对比的维度则转变成了省份

数据准备

show_data2 = marry_data["2019年"]
show_data2 = show_data2.iloc[:-1]
show_data2

c9f232af41054f8b969995b9fa91467d.png

绘图展示

需要展现的数据依然是Series数据,本案例使用条形图进行数据展示,首先去示例官网寻找示例,记得常回来看看, 这里涉及到了另一个方法,就是set_series_opts方法,这个方法是对有Series系列进行属性设计,他接受的参数与add_yaxis方法接受的参数类似。

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.faker import Faker

c = (
    Bar()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values())
    .add_yaxis("商家B", Faker.values())
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
    .set_global_opts(title_opts=opts.TitleOpts(title="Bar-翻转 XY 轴"))
)
c.render_notebook()

可以观察到,Bar实例对象调用了reversal_axis方法,进行了X轴与Y轴数据的转换,从而柱形图变成了条形图,所以在替换数据时,不需要改变数据轴向的位置。

条形图显示的数据,一般是排序之后的数据,这里排序就对数据源进行排序

show_data2 = show_data2.sort_values()
x_axis_data = pd.Series(show_data2.index).values.tolist()
y_axis_data = show_data2.values.tolist()
c = (
    Bar(init_opts=opts.InitOpts(width="800px",height="700px"))
    .add_xaxis(x_axis_data)
    .add_yaxis("2019年结婚登记数量(万对)", y_axis_data)
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
    .set_global_opts(title_opts=opts.TitleOpts(title="全国各省2019年登记结婚数量(万对)"))
)
c.render_notebook()

需求3,查看2019年各地区结婚离婚登记数据对比

之前的需求都是查看结婚登记数据,现在需要再一张图表上展示两种系列数据,结婚登记数与离婚登记数,当然,普通的展示只是需要调用两次add_yaxis方法,两种系列数据就能展示出来。

demo = divorse_data.set_index(divorse_data["地区"]).drop(columns=["地区"])
show_data3 = demo['2019年']
# show_data3.index == show_data2.index
show_data2 = marry_data["2019年"][:-1]
show_data3.index == show_data2.index

多Series绘制

x_axis_data = show_data2.index.tolist()
y_axis_data1 = show_data2.values.tolist()
y_axis_data2 = show_data3.values.tolist()
c = (
    Bar(init_opts=opts.InitOpts(width="800px",height="700px"))
    .add_xaxis(x_axis_data)
    .add_yaxis("2019年结婚登记数量(万对)", y_axis_data1)
    .add_yaxis("2019年离婚登记数量(万对)", y_axis_data2)
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(position="right"))
    .set_global_opts(title_opts=opts.TitleOpts(title="全国各省2019年登记结婚数量(万对)"))
)
c.render_notebook()

图形绘制之后,发现对比数据比较杂乱,这里可以使用堆叠图形来进行优化。这里第一次涉及到了legend_opts的设计,来嘛,来嘛

c = (
    Bar(init_opts=opts.InitOpts(width="800px",height="700px"))
    .add_xaxis(x_axis_data)
    .add_yaxis("2019年结婚登记数量(万对)", y_axis_data1, stack="happy", itemstyle_opts={
            "color":"#ed1941"
        }
    )
    .add_yaxis("2019年离婚登记数量(万对)", y_axis_data2, stack="happy", itemstyle_opts={
            "color":"#006400"
        }
    )
    .reversal_axis()
    .set_series_opts(label_opts=opts.LabelOpts(
                            position="insideRight"
                        )
                    )
    .set_global_opts(title_opts=opts.TitleOpts(title="全国各省2019年登记结婚数量(万对)"),
                        legend_opts=opts.LegendOpts(
                            pos_right='10%'
                            , pos_top='2%'
                            , orient="horizontal" 
                        )
                    )
)
c.render_notebook()

 

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

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

相关文章

Vue下载接口返回流的处理

1.下载接口返回流如下&#xff1a; 2.可以写公共方法处理 excelDownload(obj, name Date.now(), suffix xlsx) {//Date.now()获取当前日期const url window.URL.createObjectURL(//Blob是二进制大对象new Blob([obj], { type: application/vnd.ms-excel }))const aDOM docu…

【一竞技LCK】夏季赛:HLE强势横扫2比0击败KT!

北京时间6月24日&#xff0c;LCK夏季赛在昨天结束了第二周最后一个比赛日的比赛。昨天第二场比赛是HLE战队迎战DK战队&#xff0c;本赛季DK战队的状态可以说是相当的低迷&#xff0c;在首轮比赛是被KDF战队给2比0横扫&#xff0c;昨天面对实力不俗的HLE战队也是落了下风&#x…

工程化视角的 Kotlin Multiplatform核心解读及优化

本篇为KMP技术的技术及实践系列文章的第二篇。在这篇技术文章中我们会以百人移动研发团队的工程化视角&#xff0c;探讨Kotlin Multiplatform的核心技术及优化。 Kotlin: 语言与编译 人们在用自然语言沟通时&#xff0c;内容可以不明确&#xff0c;甚至小的错误&#xff0c;而听…

【数学建模】—【Python库】—【Numpy】—【学习】

目录 ​编辑 1. NumPy安装 2. ndarray对象 1. 创建ndarray 1.从列表或元组创建&#xff1a; 2.使用内置函数创建&#xff1a; 2. ndarray属性 3. 数组运算 1. 基本运算 2. 数学函数 3.统计函数 4. 数组索引与切片 1. 一维数组索引与切片 2.多维数组索引与切片 5.…

Excel 宏录制与VBA编程 —— 16、InputBox函数的使用方式

Input函数基本操作 InputBox函数的Type参数使用技巧&#xff08;输入类型限制&#xff0c;若输入类型不符系统提示&#xff09; 关注 笔者 - jxd

山东大学-科技文献阅读与翻译(期末复习)(选择题+翻译)

目录 选择题 Chapter1 1.which of the following is not categorized as scientific literature 2.Which of the followings is defined as tertiary(三级文献) literature? 3.Which type of the following international conferences is listed as Number one conference…

【Redis】数据持久化

https://www.bilibili.com/video/BV1cr4y1671t?p96 https://blog.csdn.net/weixin_54232666/article/details/128821360 单点redis问题&#xff1a; 数据丢失问题&#xff1a;实现Redis数据持久化并发能力问题&#xff1a;搭建主从集群&#xff0c;实现读写分离故障恢复问题&…

jeecg导入excel 含图片(嵌入式,浮动式)

jeecgboot的excel导入 含图片&#xff08;嵌入式&#xff0c;浮动式&#xff09; 一、啰嗦二、准备三、 代码1、代码&#xff08;修改覆写的ExcelImportServer&#xff09;2、代码&#xff08;修改覆写的PoiPublicUtil&#xff09;3、代码&#xff08;新增类SAXParserHandler&a…

算法设计与分析:并查集法求图论桥问题

目录 一、实验目的 二、问题描述 三、实验要求 四、算法思想 1. 基准算法 1.1 算法思想 1.2 代码 1.3 时间复杂度 2. 使用并查集的高效算法 2.1 算法思想 2.2 代码&#xff1a; 2.3 时间复杂度&#xff1a; 五、实验结果 一、实验目的 1. 掌握图的连通性。 2. 掌…

《代码大模型安全风险防范能力要求及评估方法》正式发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…

干货分享 | TSMaster 的 CAN UDS 诊断操作指南(下)

上期&#xff0c;我们主要介绍了 UDS 诊断模块的创建以及TSMaster 基础诊断配置。很多客户表示意犹未尽。因此我们将继续带来《TSMaster 的 CAN UDS 诊断操作指南&#xff08;下&#xff09;》的精彩内容&#xff0c;为您带来UDS on CAN/CAN FD 的功能以及详细的使用操作。 本文…

深入浅出:npm常用命令详解与实践

简介 在现代的软件开发中&#xff0c;特别是在 JavaScript 生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;是一个核心工具。它不仅仅是 Node.js 的包管理器&#xff0c;还扮演着项目依赖管理、脚本执行、项目发布等多重角色。理解 npm 的常用命令不仅…

【数据结构】线性表之《队列》超详细实现

队列 一.队列的概念及结构二.顺序队列与链队列1.顺序队列2.链队列 三.链队列的实现1.创建队列2.初始化队列3.入队4.出队5.获取队头元素6.获取队尾元素7.队列的大小8.队列的判空9.清空队列10.销毁队列 四.队列的盲区五.模块化源代码1.Queue.h2.Queue.c3.test.c 六.栈和队列必做O…

小白上手AIGC-基于FC部署stable-diffusion

AIGC AIGC&#xff08;人工智能创造内容&#xff09;作为一种基于人工智能技术生成内容的新型创作模式。打破了过去大家对于AI的理解都是说只能涉足部分领域而无法涉足艺术或者是其他的创作领域的定律&#xff0c;现在的AIGC也能够创作内容了&#xff0c;而不再只是单纯的返回…

MAC Address

文章目录 1. 前言2. MAC Address2.1 MAC 地址格式2.2 Locally Administered MAC Address2.3 MAC 单播 和 多播 3. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. MAC Address 2.1 MA…

Java集合框架深度解析:Hashtable、HashMap与TreeMap的较量,哪个更适合你的项目?

引言 在Java编程世界中&#xff0c;集合是编程语言的重要组成部分。它们负责存储、组织和操作数据集合&#xff0c;是开发过程中不可或缺的工具。Java集合框架提供了丰富且功能强大的数据结构&#xff0c;而其中的Hashtable、HashMap和TreeMap是使用频率极高的三种实现。 本篇文…

2024年希望杯数学竞赛各年级100道练习题及答案

链接里面有无答案版本链接&#xff1a;https://pan.baidu.com/s/1nTIVJrTEWUzb0LJNo4mI_Q 提取码&#xff1a;0548 –来自百度网盘超级会员V7的分享 一年级 二年级 三年级 四年级 五年级 六年级 七年级 八年级

如何使得Macos的剪切板感知fileURL并当fileURL被执行paste 动作时 回调到某个监听的函数 从而来填充file content

问题及尝试&#xff1a; 我在做一个跨平台文件拷贝的功能&#xff0c;文件可能是从其他操作系统比如Linux 或者Windows 拷贝到Macos上&#xff0c; 但是我试过所有可以hook NSPasteboard的方法&#xff0c;确实没有找到可以监听macos 剪切板的方法&#xff0c;因为fileURL 确实…

网络设备框架

文章目录 前言一、主要流程二、Linux网络设备驱动架构1.概述2.读入数据 总结 前言 Linux中的Ethernet驱动框架涉及到网络设备驱动程序的多个方面&#xff0c;包括初始化、注册、数据传输以及与物理层&#xff08;PHY&#xff09;的交互。以下是网络设备驱动架构的概述&#xf…

Centos7虚拟机

Centos 7 安装 1 镜像下载1.1 官网下载1.2 阿里云镜像下载 2 环境的安装2.1 打开我们的虚拟机&#xff0c;点击文件进行新建2.2 选择典型之后&#xff0c;下一步2.3 选择稍会安装操作系统2.4 勾选Linux&#xff0c;并且选择CentOS 7的版本2.5 设定我们虚拟机的名称和安装位置2.…