【Python百日进阶-数据分析】Day146 - plotly小提琴图:px.violin()/go.violin()

news2024/11/15 4:19:20

文章目录

  • 四、实例
    • 4.1 Plotly Express 的小提琴图
      • 4.1.1 Plotly Express 的基本小提琴图
      • 4.1.2 带框和数据点的小提琴图
      • 4.1.3 多个小提琴图
      • 4.1.4 叠加的小提琴图
    • 4.2 graph_objects的小提琴图
      • 4.2.1 基本小提琴图
      • 4.2.2 多条小提琴迹线
      • 4.2.3 分组小提琴图
      • 4.2.4 分裂小提琴图
      • 4.2.5 高级小提琴图
      • 4.2.6 脊线图
      • 4.2.7 只有点的小提琴图
      • 4.2.8 Dash中的应用

四、实例

4.1 Plotly Express 的小提琴图

小提琴图是数字数据的统计表示。它类似于箱线图,在每一侧都增加了一个旋转的核密度图。

用于可视化分布的小提琴图的替代方法包括直方图、箱线图、ECDF 图和条形图。

4.1.1 Plotly Express 的基本小提琴图

import plotly.express as px

df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.violin(df, y="total_bill")
fig.show()

在这里插入图片描述

4.1.2 带框和数据点的小提琴图

import plotly.express as px

df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''

fig = px.violin(df, y="total_bill", box=True, # 在小提琴内部绘制方框图
                points='all', # 可以是 'outliers', or False
               )
fig.show()

在这里插入图片描述

4.1.3 多个小提琴图

import plotly.express as px

df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.violin(df, y="tip", x="smoker", color="sex", box=True, points="all",
          hover_data=df.columns)
fig.show()

在这里插入图片描述

4.1.4 叠加的小提琴图

import plotly.express as px

df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.violin(df, y="tip", color="sex",
                # 默认violinmode是'group'
                violinmode='overlay', # 把小提琴放在彼此的上面
                hover_data=df.columns)
fig.show()

在这里插入图片描述

4.2 graph_objects的小提琴图

如果Plotly Express 没有提供好的起点,您可以使用plotly.graph_objects的go.Violin所有选项go.Violin都记录在参考https://plotly.com/python/reference/violin/中

4.2.1 基本小提琴图

import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv'
df = pd.read_csv("f:/violin_data.csv")
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''

fig = go.Figure(data=go.Violin(y=df['total_bill'], box_visible=True, line_color='black',
                               meanline_visible=True, fillcolor='lightseagreen', opacity=0.6,
                               x0='Total Bill'))

fig.update_layout(yaxis_zeroline=False)
fig.show()

在这里插入图片描述

4.2.2 多条小提琴迹线

import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv'
df = pd.read_csv("f:/violin_data.csv")
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''

fig = go.Figure()

days = ['Thur', 'Fri', 'Sat', 'Sun']

for day in days:
    fig.add_trace(go.Violin(x=df['day'][df['day'] == day],
                            y=df['total_bill'][df['day'] == day],
                            name=day,
                            box_visible=True,
                            meanline_visible=True))

fig.show()

在这里插入图片描述

4.2.3 分组小提琴图

import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv'
df = pd.read_csv("f:/violin_data.csv")
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''

fig = go.Figure()

fig.add_trace(go.Violin(x=df['day'][ df['sex'] == 'Male' ],
                        y=df['total_bill'][ df['sex'] == 'Male' ],
                        legendgroup='M', scalegroup='M', name='M',
                        line_color='blue')
             )
fig.add_trace(go.Violin(x=df['day'][ df['sex'] == 'Female' ],
                        y=df['total_bill'][ df['sex'] == 'Female' ],
                        legendgroup='F', scalegroup='F', name='F',
                        line_color='orange')
             )

fig.update_traces(box_visible=True, meanline_visible=True)
fig.update_layout(violinmode='group')

fig.show()

在这里插入图片描述

4.2.4 分裂小提琴图

import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv'
df = pd.read_csv("f:/violin_data.csv")
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''

fig = go.Figure()

fig.add_trace(go.Violin(x=df['day'][ df['smoker'] == 'Yes' ],
                        y=df['total_bill'][ df['smoker'] == 'Yes' ],
                        legendgroup='Yes', scalegroup='Yes', name='Yes',
                        side='negative',
                        line_color='blue')
             )
fig.add_trace(go.Violin(x=df['day'][ df['smoker'] == 'No' ],
                        y=df['total_bill'][ df['smoker'] == 'No' ],
                        legendgroup='No', scalegroup='No', name='No',
                        side='positive',
                        line_color='orange')
             )
fig.update_traces(meanline_visible=True)
fig.update_layout(violingap=0, violinmode='overlay')

fig.show()

在这里插入图片描述

4.2.5 高级小提琴图

import plotly.graph_objects as go

import pandas as pd
# 'https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv'
df = pd.read_csv("f:/violin_data.csv")
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''

fig = go.Figure()

pointpos_male = [-0.9,-1.1,-0.6,-0.3]
pointpos_female = [0.45,0.55,1,0.4]
show_legend = [True,False,False,False]

fig = go.Figure()

for i in range(0,len(pd.unique(df['day']))):
    fig.add_trace(go.Violin(x=df['day'][(df['sex'] == 'Male') &
                                        (df['day'] == pd.unique(df['day'])[i])],
                            y=df['total_bill'][(df['sex'] == 'Male')&
                                               (df['day'] == pd.unique(df['day'])[i])],
                            legendgroup='M', scalegroup='M', name='M',
                            side='negative',
                            pointpos=pointpos_male[i], # 在哪里定位点
                            line_color='lightseagreen',
                            showlegend=show_legend[i])
             )
    fig.add_trace(go.Violin(x=df['day'][(df['sex'] == 'Female') &
                                        (df['day'] == pd.unique(df['day'])[i])],
                            y=df['total_bill'][(df['sex'] == 'Female')&
                                               (df['day'] == pd.unique(df['day'])[i])],
                            legendgroup='F', scalegroup='F', name='F',
                            side='positive',
                            pointpos=pointpos_female[i],
                            line_color='mediumpurple',
                            showlegend=show_legend[i])
             )

# 更新所有跟踪共享的特征
fig.update_traces(meanline_visible=True,
                  points='all', # 显示所有要点
                  jitter=0.05,  # 在点上添加一些抖动以获得更好的可见性
                  scalemode='count') # 用总计数缩放绘图区域
fig.update_layout(
    title_text="总账单分配<br><i>按每个性别的账单数量缩放",
    violingap=0, violingroupgap=0, violinmode='overlay')

fig.show()

在这里插入图片描述

4.2.6 脊线图

脊线图(以前称为 Joy Plot)显示了几个组的数值分布。它们可用于可视化分布随时间或空间的变化。

import plotly.graph_objects as go
from plotly.colors import n_colors
import numpy as np
np.random.seed(1)

# 12组正态分布的随机数据,平均值和标准差都在增加
data = (np.linspace(1, 2, 12)[:, np.newaxis] * np.random.randn(12, 200) +
            (np.arange(12) + 2 * np.random.random(12))[:, np.newaxis])

colors = n_colors('rgb(5, 200, 200)', 'rgb(200, 10, 10)', 12, colortype='rgb')

fig = go.Figure()
for data_line, color in zip(data, colors):
    fig.add_trace(go.Violin(x=data_line, line_color=color))

fig.update_traces(orientation='h', side='positive', width=3, points=False)
fig.update_layout(xaxis_showgrid=False, xaxis_zeroline=False)
fig.show()

在这里插入图片描述

4.2.7 只有点的小提琴图

条形图就像一个带有点的小提琴图,没有小提琴:

import plotly.express as px
df = px.data.tips()
print(df)
'''
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]
'''
fig = px.strip(df, x='day', y='tip')
fig.show()

在这里插入图片描述

4.2.8 Dash中的应用

import plotly.graph_objects as go # or plotly.express as px
fig = go.Figure() # or any Plotly Express function e.g. px.bar(...)
# fig.add_trace( ... )
# fig.update_layout( ... )

import dash
import dash_core_components as dcc
import dash_html_components as html

app = dash.Dash()
app.layout = html.Div([
    dcc.Graph(figure=fig)
])

app.run_server(debug=True, use_reloader=False)  # Turn off reloader if inside Jupyter

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

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

相关文章

植物大战僵尸:寻找召唤僵尸关键CALL

通过遍历寻找召唤僵尸的CALL&#xff0c;通过调用CALL出现自定义的僵尸&#xff0c;加速僵尸的出现。我们可以通过僵尸出现在屏幕中的个数来遍历寻找僵尸出现的CALL 僵尸CALL的遍历技巧&#xff1a;首先打开CE->进入游戏开始新的游戏-> 直接搜索未知初始化数据等待出现第…

新手程序员入职新公司,该如何快速上手?

小C今天又来找我了&#xff0c;一脸不开心的样子&#xff0c;我心想不是刚被开除&#xff0c;不会这么快又被开除了吧。 小C对我说&#xff1a;下周马上要入职新公司了。 我&#xff1a;好事啊&#xff0c;怎么一脸不开心的。 小C&#xff1a;马上要入职新公司了&#xff0c…

Altium Designer 20 凡亿教育视频学习-04-2

屏蔽电源线或者我们想要屏蔽的线&#xff0c;只显示我们想要的线 PCB上都是线会妨碍我们布线&#xff0c;因此在分模块的布置器件时&#xff0c;我们只单纯的显示我们需要的模块线&#xff0c;其他的线路就不显示了。白线叫预拉线&#xff0c;就是你真实的线要连的两个地方 第…

15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程

15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程 今天小编分享纳米金对于R-藻红蛋白的反应&#xff0c;一起看看吧&#xff1a; 纳米金修饰藻红蛋白的制备过程&#xff1a; 取不同pH条件下金前驱体溶液20 mL&#xff0c;先加入质量分数为2%的稳定剂(PVP&am…

高校房产管理系统使用环境?

数图互通高校房产综合管理信息系统是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解…

redis 持久化

文章目录一、什么是redis持久化二、两种持久化机制三、RDB(Redis DataBase) 内存快照RDB 原理RDB的触发方式RDB的数据恢复&#xff1a;RDB的优点RDB的缺点四、AOF(Append Only File) 增量日志AOF 原理AOF的触发方式AOF 重写机制AOF的优点AOF的缺点一、什么是redis持久化 redis…

JavaEE【Spring】:SpringBoot 统一功能处理

文章目录前言一、用户登录权限效验1、最初用户登录验证2、Spring AOP 用户统⼀登录验证的问题3、Spring 拦截器① 自定义拦截器② 将自定义拦截器加入到系统配置4、拦截器实现原理① 实现原理源码分析② 拦截器小结5、扩展&#xff1a;统⼀访问前缀添加二、统⼀异常处理1、使用…

系分 - (软件)需求工程

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - (软件)需求工程考点摘要需求工程需求开发&#xff08;主线&#xff0c;目标&#xff09;需求分类领域工程PIECES框架需求获取需求记录技术需求分析结构化分析方法 - SASA - 数据字典SA - 数据流图D…

浅谈Web缓存

Web缓存分为两类 http缓存浏览器缓存 1、缓存位置 Service WorkerMemory CacheDisk CachePush Cache 2、浏览器缓存分为三类 cookielocalStroragesessionStorage cookie的最大容量为4kb, localStorage, sessionStorage容量为5M localStorage可永久存储, 除非调用API删除或…

【Linux编译器-gcc/g++使用】

1. 背景知识1. 预处理&#xff08;)2. 编译&#xff08;)3. 汇编&#xff08;&#xff09;4. 连接&#xff08;)有关具体详解可以参照这篇博客&#xff1a;程序环境与预处理2. gcc如何完成格式 gcc [选项] 要编译的文件 [选项] [目标文件]2.1预处理&#x1f4d9;功能&#x1f4…

11_1、Java集合概述

一、Java集合框架概述 一方面&#xff0c; 面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象 的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊 端&#xff0c;而Java 集合就像一种容器&#xff0c;可以动…

【自学Java】Java语言数组赋值

Java语言数组赋值 Java数组赋值教程 在 Java 语言 中&#xff0c;给 数组 赋值&#xff0c;就相当于给每个位置上的对应的位置填充数据。 Java语言数组赋值详解 Java 中的数据赋值分为动态化赋值和静态化赋值两种赋值方式。动态化赋值指的是先定义数组&#xff0c;然后指定…

Unity github发布 和 gitignore文件的详细设置

你做了一个unity项目 想给他提到github上去 如果你是windows 他会不停提示你 warning: LF will be replaced by CRLF in ***** The file will have its original line endings in your working directory 提示这个是因为 windows和其他平台的换行符不一样导致的 git想给你改换行…

PDF转换成Word转换器,这个软件实在太好用了!

在办公中我们会发现&#xff0c;我们每天需要处理的文件实在是太多了。大部分时间里我们都在跟各种各样的文件打交道&#xff0c;有部分文件内容很接近&#xff0c;甚至只是转换了输出格式而已&#xff0c;其具体内容并没有发生改动。那当我们想要直接使用它的另一种格式的时候…

ArcGIS三维制作步骤发布时间:

ArcGIS三维制作步骤发布时间&#xff1a;2018-01-17 版权&#xff1a;同步视频教程&#xff08;一)&#xff1a;http://www.bigemap.com/video/play2018022687.html&#xff08;二&#xff09;&#xff1a;http://www.bigemap.com/video/play2018022686.html&#xff08;三&…

电脑死机怎么办?超级简单的方法

当我们的电脑运行多个软件的时候&#xff0c;就会很容易发生死机。如果是台式电脑&#xff0c;我们可以通过按重启按钮&#xff0c;或者是通过直接拔电源来解决死机的问题。 如果是笔记本电脑&#xff0c;我们怎么按鼠标或者电脑的键盘&#xff0c;它都没有反应。电脑死机怎么…

Ubuntu 20.04源码编译安装OpenCV 4.7.0

目录 前言 1--下载OpenCV 4.7.0 2--编译安装OpenCV 4.7.0 3--测试 3-1--查看安装的版本 3-2--基于VSCode和CMake测试项目 4--报错解决&#xff08;重点&#xff01;&#xff09; 4-1--OpenCV与FFmpeg不兼容 4-2--LIBTIFF报错 4-3--系统与Anaconda的库lib冲突 4-4--测…

MATLAB-罗盘图绘制

compass 函数用于绘制罗盘图&#xff0c;利用直角坐标系&#xff0c;在圆形栅格上绘制图形&#xff0c;整个形状类似一个“罗盘”&#xff0c;具体使用格式如下。1 ) compass( x , y):函数绘制一个由原点出发、由(x ,y)组成的向量箭头图形。2 ) compass( z):等价于compass( rea…

6步速通:修复损坏的word文件

前两天&#xff0c;老师找到我&#xff0c;想让我帮忙修复一个打不开的docx文档。症状大概是这样&#xff1a; 打开文件的时候花了较长时间&#xff0c;并且显示了乱码&#xff0c;并且老师使用WPS自带的文档修复功能也无法修复。 遇到这个情况&#xff0c;到底怎么办呢&#…

【填坑向】我可能也就是踩了dockrfile部署jar包(需读取resource目录下的文件)全部的坑吧。。。

FileNotFoundException。。没错、这篇还是从读取的文件找不到的问题开始&#xff0c;今天来个终极版(&#xffe3;∇&#xffe3;)/一开始我把要读取的文件放在了项目根路径&#xff0c;package就没把它打进去&#xff0c;显然是找不到的&#xff0c;于是我把这个JSON文件移到了…