当前位置: 首页 > news >正文

使用大语言模型进行Python图表可视化

Python使用matplotlib进行可视化一直有2个问题,一是代码繁琐,二是默认模板比较丑。因此发展出seaborn等在matplotlib上二次开发,以更少的代码进行画图的和美化的库,但是这也带来了定制化不足的问题。在大模型时代,这个问题有了另一种解法,即使用大模型直接生成代码,解决了代码繁琐(代码虽长但不用手写)的问题。

一、使用大模型生成代码进行可视化

使用大模型生成想要的代码需要精准的提示词描述,否则大模型会根据自己的理解画图。为了让大模型能够精准的理解我们的意图,我把画图的设置进行了整理。同时把大模型生成的代码中的最佳实践列出来,便于大模型按照最佳的方法输出代码,避免大模型自创错误的方法。
需要画图时更改要求并把代码作为案例一并提交大模型生成代码。下面的需求是给大模型的输入所以,为了让大模型输出更精准,所以把关键把代码和自然语言混编。
本文主要解决三个问题
1、给出一个各类图标的基础设置提示词模板,保证大模型能一次性按需生成需要的模型,避免反复与大模型多轮对话。
2、给出代码的最佳实践和指定易错的API,避免大模型生成错误代码
3、各类图表的使用场景和样式。

画图一:使用Python 绘制柱图

使用Python画柱图,数据如下,其中x轴是 y轴是
1、使用颜色 #1E9ED9表示平均RSRP。
2、设置字体为汉字宋体。图标题字体为24,其他为18
3、全局设置mpl.rcParams[‘figure.dpi’] = 1080
4、每个 bar 显示标签,位置在bar的顶端而不是内部,label_type=‘edge’
5、bar无边框
6、纵轴标签为“平均RSRP(dbm)”从0开始
7、为了保障距离上边框的距离,纵轴最大刻度是ax.margins(y=0.2) ,顶部留20%空间
8、横轴标签为方案一、方案二。
9、横轴缩短每个bar的宽度和缩短两个bar 间的距离。
10、横轴使用margin()函数让最右边的bar距离右边框和最左边的bar 距离左边框距离一致ax.margins(x=margin ) # 顶部留20%空间
核心布局参数系统
bar_width = 0.28 # 柱体宽度
bar_spacing = 0.12 # 柱间间距
margin = 0.12 # 新增边界控制参数 (建议范围0-0.3)
11、图标题为主覆盖站点选择
12、整个图像要加粗线的外边框

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np# 全局参数配置
mpl.rcParams['figure.dpi'] = 1080  # 设置分辨率
plt.rcParams['font.sans-serif'] = ['SimSun']  # 设置宋体
plt.rcParams['axes.unicode_minus'] = False   # 显示负号# 核心数据与参数
data = [-89.68, -84.27]
labels = ['方案一', '方案二']
bar_color = '#1E9ED9'# 布局控制系统
bar_width = 0.12      # 柱体宽度
bar_spacing = 0.28    # 柱间间距
margin = 0.24         # 边界对称控制参数# 创建画布与坐标系
fig, ax = plt.subplots(figsize=(10, 7))# 横坐标定位引擎
x_base = np.arange(len(labels))  # 基准定位点 [0, 1]
x_pos = x_base * (bar_width + bar_spacing)  # 精确柱体定位# 绘制柱状图系统
bars = ax.bar(x_pos, data,width=bar_width,color=bar_color,edgecolor='none')  # 无边框设置# 数据标签渲染器
ax.bar_label(bars,labels=[f'{v:.2f}' for v in data],label_type='edge',  # 将标签放置在柱子顶端padding=5,          # 调整标签与柱子顶端的距离fontsize=18,color='black')# 坐标轴配置系统
ax.set_xticks(x_pos)
ax.set_xticklabels(labels, fontsize=18)
ax.set_ylabel('平均RSRP(dBm)', fontsize=18)
#ax.set_title('主覆盖站点选择', fontsize=24)# 纵轴显示优化
ax.set_ylim(0, max(data) * 1.2)  # 强制从0开始
ax.invert_yaxis()  # 数值倒置显示
ax.margins(y=0.2)  # 顶部留20%空间# 边界对称控制系统
ax.margins(x=margin)  # 左右对称留白# 边框强化模块
for spine in ax.spines.values():spine.set_linewidth(2.5)  # 边框加粗# 生成最终图像
plt.show()

画图二、使用Python 绘制直方图

使用Python 绘制频数分布直方图:

1、图像布局
使用颜色 #1E9ED9表示平均RSRP。
设置字体为汉字宋体,并解决负号显示问。
图标题字体为24,其他为18
图标题为:RSRP
全局设置mpl.rcParams[‘figure.dpi’] = 1080
图例放在右下角legend,去除外框。
在图像的右上角要加入plt.text 均值: 标准差:
为了保障距离上边框的距离,顶部留20%空间是ax.margins(y=0.2) ,
2、坐标轴
x轴标签为方案一、方案二。
y轴为“平均RSRP(dbm)” 从0开始,0在最下面。
3、标签和网格线
将标签放在柱子顶端,只显示非0标签。
相邻等高的柱子,标签要错开(可以去掉,bar等高标签防止重叠 from adjustText import adjust_text)
不显示网格线
4、其他元素
在均值的位置加一根红虚线

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
# 设置字体为宋体并解决负号显示问题
plt.rcParams['font.sans-serif'] = ['SimSun']  # 设置全局字体为宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 数据列表
data = [-92.3, -92.6, -86.6, -84.9, -89.2, -86, -87.9, -90.9, -87.9, -84.4,-89.1, -84.3, -96.9, -86.5, -88.7, -89.9, -88.7, -95, -89.7, -87.9,-84.6, -90.6, -91.4, -90.5, -86.3, -88, -90.6, -87.5, -88.7, -86.1
]mean_value = sum(data) / len(data)
std_value = np.std(data)plt.figure(figsize=(10, 6))
bins = np.linspace(-100, -80, 15)
n, bins, patches = plt.hist(data,bins=bins,color='#1E9ED9',  # 使用颜色 #1E9ED9edgecolor='black',alpha=0.8)# 在每个 bar 的顶端显示标签
for i, patch in enumerate(patches):height = n[i]if height > 0:  # 只显示非零高度的标签plt.text(patch.get_x() + patch.get_width() / 2, height + 0.1, str(int(height)),ha='center', va='bottom', fontsize=10, fontname='SimSun')# 添加均值红虚线,并设置图例标签
plt.axvline(x=mean_value, color='red', linestyle='--', label=f'均值: {mean_value:.2f} dBm')# 设置标题和坐标轴标签
plt.title('RSRP数据分布直方图', fontsize=20)
plt.xlabel('RSRP值 (dBm)', fontsize=16)
plt.ylabel('频数', fontsize=16)# 设置纵轴最大刻度并留出顶部空间
ax = plt.gca()
ax.margins(y=0.2)  # 纵轴顶部留 20% 空间
ax.yaxis.set_major_locator(MaxNLocator(integer=True))  # 纵轴刻度设置为整数# 设置横轴范围
plt.xlim(-100, -80)  # 横轴从 -100 到 -80# 添加图例
plt.legend(loc='lower right', fontsize=10, frameon=True, edgecolor='black')  # 图例在右上角# 在图像右上角加入均值和标准差
plt.text(0.95, 0.95, f'均值: {mean_value:.2f} dBm\n标准差: {std_value:.2f} dBm',transform=ax.transAxes, fontsize=10, fontname='SimSun',verticalalignment='top', horizontalalignment='right',bbox=dict(boxstyle="round", facecolor="white", edgecolor="black"))# 加粗所有边框
for spine in ax.spines.values():spine.set_linewidth(1.5)# 调整布局
plt.tight_layout()# 显示图像
plt.show()

画图三、使用Python 绘制箱线图

1、使用颜色 #DB472A作图。
2、设置字体为汉字宋体。
3、箱线图纵向显示
4、异常值用红点显示不要红点无边框
5、箱线图箱体填充
6、清空Y轴刻度系统ax.set_yticks([])
7、箱线图横放

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd# 全局参数设置
plt.rcParams['font.sans-serif'] = ['Arial']  # 替换为 Arial 字体
plt.rcParams['axes.unicode_minus'] = False# 数据集
data = [13.15, 14.35, 14.15, 10.72, 16.35, 16.24, 15.42, 14.65, 10.87, 14.05,14.3, 12.83, 14.88, 16.69, 21.44, 15.96, 16.22, 15.16, 9.26, 15.32,15.59, 23.28, 14.78, 16.36, 15.29, 11.66, 19.06, 17.81, 17.93, 12.49
]# 创建画布
fig, ax = plt.subplots()# 绘制横向箱线图
box = ax.boxplot(data,vert=False,patch_artist=True,flierprops={'marker': 'o', 'markerfacecolor': 'red','markeredgecolor': 'none'},boxprops={'color': '#DB472A', 'facecolor': '#DB472A'},whiskerprops={'color': '#DB472A'},capprops={'color': '#DB472A'},medianprops={'color': 'white'})# 计算统计量
mean_val = np.mean(data)
stats = [np.min(data), np.percentile(data, 25), np.median(data), np.percentile(data, 75), np.max(data)]# 添加统计标注
ax.text(0.95, 0.95,f'中位数:{stats[2]:.2f}\n平均值:{mean_val:.2f}',transform=ax.transAxes,ha='right', va='top',fontsize=12,color='black',fontweight='bold',linespacing=1.5,bbox=dict(facecolor='white', alpha=0.7, edgecolor='none'))  # 添加背景框
ax.set_yticks([])  # 清空Y轴刻度系统# 创建增强DataFrame
df = pd.DataFrame({"变量名称": ["数据集 A"],"最小值": [stats[0]],"Q1": [stats[1]],"中位数": [stats[2]],"Q3": [stats[3]],"最大值": [stats[4]],"平均值": [mean_val]
})# 显示图表及数据
plt.title('箱线图')
plt.xlabel('数值分布')
plt.tight_layout()
plt.subplots_adjust(right=0.85)  # 增加右侧边距
plt.show()# 打印 DataFrame
print(df)

画图四、使用Python 绘制二组数据的散点图

1、图像布局
使用颜色 #1E9ED9表示方案一、使用#DB472A表示方案二。方案一标记为圆形方案二为正方形。数据1为的标签为方案一和方案二。
设置字体为汉字宋体,并解决负号显示问。
图标题字体为24,其他为18
图标题为方案一和方案二对比散布图
全局设置mpl.rcParams[‘figure.dpi’] = 1080
图例放在右下角legend,去除外框。
在图像的右上角要加入plt.text 方案一均值 方案二 均值
为了保障距离上边框的距离,顶部留20%空间是ax.margins(y=0.2) ,
2、坐标轴
x轴标签为1到30
y轴为“平均RSRP(dbm)” 从-60 到-100
3、标签和网格线
不现实标签。2标签为方案一 均值:xx 使用f字符串实现,均值根据data计算
不显示网格线
4、其他元素
在给每组数据均值的位置加一根红虚线 案一的均值改为蓝色的虚线,两条虚线的上方都写上均值:xx 字体颜色与标记颜色相同
方案一标记为圆形方案二为正方形

import matplotlib.pyplot as plt
import numpy as np# 全局参数设置
plt.rcParams['font.sans-serif'] = 'SimSun'
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.dpi'] = 1080# 准备数据
data1 = [-92.3,-92.6,-86.6,-84.9,-89.2,-86,-87.9,-90.9,-87.9,-84.4,-89.1,-84.3,-96.9,-86.5,-88.7,-89.9,-88.7,-95,-89.7,-87.9,-84.6,-90.6,-91.4,-90.5,-86.3,-88,-90.6,-87.5,-88.7,-86.1]
data2 = [-86.8, -86.7, -86.4, -84.7, -82.1, -85.1, -82.6, -81.7, -86.2, -81.8,-83.4, -85.8, -86.8, -84.2, -84.2, -90.3, -85.8, -83, -84.2, -88, -87.1,-83, -85.2, -86, -83.1, -85, -86.3, -86.3, -85.7, -84.1
]
x = np.arange(1, 31)# 创建画布
fig, ax = plt.subplots(figsize=(10, 6))# 计算均值
mean1 = round(np.mean(data1), 1)
mean2 = round(np.mean(data2), 1)# 绘制散点图
ax.scatter(x, data1, c='#1E9ED9', marker='o', label='方案一')
ax.scatter(x, data2, c='#DB472A', marker='s', label='方案二')# 添加均值虚线及标注
ax.axhline(mean1, color='blue', linestyle='--', linewidth=1)
ax.axhline(mean2, color='red', linestyle='--', linewidth=1)
ax.text(15.5, mean1-3, f'均值:{mean1}', color='blue', ha='right', fontsize=12)
ax.text(15.5, mean2+3, f'均值:{mean2}', color='red', ha='right', fontsize=12)# 坐标轴设置
ax.set_xticks(x)
ax.set_ylim(-110, -70)
ax.set_ylabel('平均RSRP(dBm)', fontsize=18)
ax.yaxis.set_label_coords(-0.05, 0.5)# 图例设置
ax.legend(loc='lower right', frameon=False, fontsize=18)# 其他格式
ax.margins(y=0.2)
plt.title('RSRP散布图', fontsize=24)
ax.grid(False)
plt.tight_layout()
plt.show()

画图五、使用Python 绘制山脊图

使用joypy库绘山脊图

import pandas as pd
import matplotlib.pyplot as plt
from joypy import joyplot# 用户提供的四组数据(修正命名)
data1 = [13.9, 16.7, 18.5, 15.1, 12.1, 13.3, 12.4, 15.5, 15.9, 15, 14, 15.3, 14.6, 14.4, 16, 18.2, 16.8, 15.9, 14.4, 15.1, 16.2, 14.1, 14.2, 16, 13.1, 12.9, 15.8, 18.4, 16.5, 16.4]
data2 = [17.1, 14.4, 15.6, 16.4, 14.3, 15.5, 19.3, 17.4, 16.2, 15.3, 17.8, 11.4, 13.8, 17.5, 16.5, 16.1, 16.8, 11.7, 17.8, 18.2, 17.1, 14.1, 17.3, 17.8, 16, 14.7, 16.1, 16.2, 15.3, 13.8]
data3 = [16.5, 13.3, 15.5, 14.3, 13.4, 20.3, 16, 16, 12.5, 17.7, 15.5, 16, 15.3, 16.1, 17.1, 16.8, 20.8, 17.5, 17, 14, 16.5, 15.9, 15.9, 18.4, 14.4, 14.3, 17.4, 16.5, 15.4, 18.1]
data4 = [17, 19.7, 16.5, 18, 18.5, 17.2, 20, 18.4, 16.7, 18.2, 18.2, 16.1, 16.3, 19.6, 17, 17.4, 21.2, 18.3, 18.2, 16.5, 17.9, 13.2, 14.4, 13.9, 18.9, 16.6, 17.7, 18.7, 15.9, 16]# 转换为长格式DataFrame
df = pd.DataFrame({"方案1": data1,"方案2": data2,"方案3": data3,"方案4": data4
}).melt(var_name="Category", value_name="Value")# 绘制山脊图
fig, axes = joyplot(data=df,by="Category",column="Value",figsize=(8, 6),overlap=0.8,       # 控制层叠高度colormap=plt.cm.viridis,  # 颜色映射title="SINR山脊图示例",linecolor="white"  # 曲线颜色
)plt.show()

使用Python 生成和预览数据

生成数据 、查看数据直方图 、查看箱线图、生成数据和其统计写入excel

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator# 生成数据集
np.random.seed(2023)# 模拟生成 final_data 数据(假设其为一个长度为30的数组)
final_data = np.random.normal(loc=-89.1, scale=2, size=30)  # 示例数据# 创建数据框架
df = pd.DataFrame({'测试批次': [f'第{i}次测试' for i in range(1, 31)],'平均RSRP': np.round(final_data, 1)
})# 打印统计指标
mean_value = df['平均RSRP'].mean()
std_value = df['平均RSRP'].std(ddof=1)
print(f"平均值: {mean_value:.2f} dBm")
print(f"标准差: {std_value:.2f} dBm")# 绘制直方图
plt.figure(figsize=(10, 6))
bins = np.linspace(-100, -80, 15)  # 设置横轴从 -100 到 -80 分桶
n, bins, patches = plt.hist(df['平均RSRP'],bins=bins,color='#1E9ED9',  # 使用颜色 #1E9ED9edgecolor='black',alpha=0.8)# 在每个 bar 的顶端显示标签
for i, patch in enumerate(patches):height = n[i]if height > 0:  # 只显示非零高度的标签plt.text(patch.get_x() + patch.get_width() / 2, height + 0.1, str(int(height)),ha='center', va='bottom', fontsize=10, fontname='SimSun')# 添加均值红虚线
plt.axvline(x=mean_value, color='red', linestyle='--',label=f'均值: {mean_value:.2f} dBm')# 设置字体为宋体
plt.rcParams['font.sans-serif'] = ['SimSun']  # 设置全局字体为宋体
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 设置标题和坐标轴标签
plt.title('RSRP数据分布直方图', fontsize=14, fontname='SimSun')
plt.xlabel('RSRP值 (dBm)', fontsize=12, fontname='SimSun')
plt.ylabel('频数', fontsize=12, fontname='SimSun')# 设置纵轴最大刻度并留出顶部空间
ax = plt.gca()
ax.margins(y=0.2)  # 纵轴顶部留 20% 空间
ax.yaxis.set_major_locator(MaxNLocator(integer=True))  # 纵轴刻度设置为整数# 设置横轴范围
plt.xlim(-80, -100)  # 横轴从 -80 到 -100,-80 在最右边# 添加图例和外边框
plt.legend(loc='lower right', fontsize=10,frameon=True, edgecolor='black')  # 图例在右上角
ax.spines['top'].set_linewidth(1.5)  # 加粗上边框
ax.spines['bottom'].set_linewidth(1.5)  # 加粗下边框
ax.spines['left'].set_linewidth(1.5)  # 加粗左边框
ax.spines['right'].set_linewidth(1.5)  # 加粗右边框# 在图像右上角加入均值和标准差
plt.text(0.95, 0.95, f'均值: {mean_value:.2f} dBm\n标准差: {std_value:.2f} dBm',transform=ax.transAxes, fontsize=10, fontname='SimSun',verticalalignment='top', horizontalalignment='right',bbox=dict(boxstyle="round", facecolor="white", edgecolor="black"))# 调整布局
plt.tight_layout()# 显示直方图
plt.show()# 绘制箱线图
plt.figure(figsize=(6, 8))  # 设置图像大小
boxprops = dict(linewidth=1.5, color='#DB472A')  # 箱体样式,使用颜色 #DB472A
medianprops = dict(linewidth=1.5, color='black')  # 中位数线样式
whiskerprops = dict(linewidth=1.5, color='#DB472A')  # 触须样式
capprops = dict(linewidth=1.5, color='#DB472A')  # 端点样式
flierprops = dict(marker='o',  # 异常值样式markerfacecolor='#DB472A',markersize=5,linestyle='none',markeredgecolor='none'  # 新增边框颜色控制)plt.boxplot(df['平均RSRP'], vert=True, patch_artist=False,  # 纵向显示,箱体不填充boxprops=boxprops, medianprops=medianprops,whiskerprops=whiskerprops, capprops=capprops, flierprops=flierprops)# 设置标题和坐标轴标签
plt.title('RSRP数据分布箱线图', fontsize=14, fontname='SimSun')  # 设置标题字体为宋体
plt.ylabel('RSRP值 (dBm)', fontsize=12, fontname='SimSun')  # 设置纵轴标签字体为宋体
plt.xticks([1], ['平均RSRP'], fontsize=10, fontname='SimSun')  # 设置横轴刻度字体为宋体# 设置纵轴范围
plt.ylim(-100, -80)# 添加外边框
ax = plt.gca()
ax.spines['top'].set_linewidth(1.5)
ax.spines['bottom'].set_linewidth(1.5)
ax.spines['left'].set_linewidth(1.5)
ax.spines['right'].set_linewidth(1.5)# 调整布局
plt.tight_layout()# 显示箱线图
plt.show()# 写入 Excel 并添加统计指标
path = r"D:\工作\创新\QC\科创QC\方案细化\RSRP_测试报告.xlsx"
with pd.ExcelWriter(path) as writer:df.to_excel(writer, index=False, sheet_name='测量数据')stats = pd.DataFrame({'Max': [df['平均RSRP'].max()],'Min': [df['平均RSRP'].min()],'极差R': [df['平均RSRP'].max() - df['平均RSRP'].min()],'平均值X': [df['平均RSRP'].mean()],'标准差S': [df['平均RSRP'].std(ddof=1)]}, index=['统计值'])stats.to_excel(writer, sheet_name='测量数据',startrow=len(df) + 2, startcol=0, header=True)  # 将统计值写在数据下方

数据检验

T 检验

import numpy as np
from scipy import statsdata1 = [-88.8, -93.1, -86.9, -89.5, -84.6, -88.4, -91.1, -89.5, -89.2, -91.1, -88.9, -89.6, -89.6, -89.3, -91, -88, -91.9, -87.7, -85.4, -88.4, -86, -90.3, -90.6, -85.9, -86.3, -90.1, -92.1, -88.6, -90, -92.3]
data2 = [-82.1, -85.2, -82.1, -87.6, -82.5, -86.7, -84, -84.1, -84.7, -83.3, -86.6, -87.2, -79.7, -84.8, -85.2, -81.4, -83.6, -84.3, -85.7, -87.7, -86.3, -86.2, -87.7, -84.2, -86.9, -84.2, -85.4, -85.7, -87.1, -82.9]# 方差齐性检验
levene_test = stats.levene(data1, data2)
print("Levene检验结果:统计量=%.4f, p值=%.4f" % (levene_test.statistic, levene_test.pvalue))# 根据方差齐性结果选择equal_var参数
if levene_test.pvalue > 0.05:equal_var = True
else:equal_var = False# 进行独立样本T检验
t_stat, p_value = stats.ttest_ind(data1, data2, equal_var=equal_var)
print("\n独立样本T检验结果:")
print("t统计量 =", t_stat)
print("p值 =", p_value)# 计算自由度(如果是Welch检验)
if not equal_var:n1 = len(data1)n2 = len(data2)var1 = np.var(data1, ddof=1)var2 = np.var(data2, ddof=1)df = (var1/n1 + var2/n2) **2 / ((var1/n1)** 2/(n1-1) + (var2/n2)**2/(n2-1))print("自由度 =", df)
else:df = len(data1) + len(data2) - 2print("自由度 =", df)def cohen_d(data1, data2):n1, n2 = len(data1), len(data2)var1 = np.var(data1, ddof=1)  # 无偏估计var2 = np.var(data2, ddof=1)pooled_std = np.sqrt( ((n1-1)*var1 + (n2-1)*var2) / (n1+n2-2) )return abs( (np.mean(data1)-np.mean(data2)) / pooled_std )# 使用数据计算
d = cohen_d(data1, data2)
print(f"Cohen's d = {d:.2f}")  # 输出:Cohen's d = 2.15

ANova
对四个数据做ANOVA 分为四步 :正态性判断能不能用,方差齐性判断用哪种、ANOVA看明显不明显、事后检验看哪两组最明显。


import numpy as np
from scipy import stats
from statsmodels.stats.multicomp import pairwise_tukeyhsd# 用户数据
data1 = [17.1,14.4,15.6,16.4,14.3,15.5,19.3,17.4,16.2,15.3,17.8,11.4,13.8,17.5,16.5,16.1,16.8,11.7,17.8,18.2,17.1,14.1,17.3,17.8,16,14.7,16.1,16.2,15.3,13.8]
data2 = [13.9,16.7,18.5,15.1,12.1,13.3,12.4,15.5,15.9,15,14,15.3,14.6,14.4,16,18.2,16.8,15.9,14.4,15.1,16.2,14.1,14.2,16,13.1,12.9,15.8,18.4,16.5,16.4]
data3 = [13.4,17.9,19.2,15.1,16.3,16.1,13.7,17.3,14.9,13.1,14.8,15.8,14.8,11.7,16.2,13.2,17.5,16.6,17.2,14.8,15.9,15.7,16.5,15.2,16.8,13.5,15.1,14.4,13.3,14.3]
data4 = Data4 = [17, 19.7, 16.5, 18, 18.5, 17.2, 20, 18.4, 16.7, 18.2, 18.2, 16.1, 16.3, 19.6, 17, 17.4, 21.2, 18.3, 18.2, 16.5, 17.9, 13.2, 14.4, 13.9, 18.9, 16.6, 17.7, 18.7, 15.9, 16]# 正态性检验(Shapiro-Wilk)
for i, data in enumerate([data1, data2, data3, data4], 1):stat, p = stats.shapiro(data)print(f"Data{i}正态性检验: W={stat:.3f}, p={p:.3f}")# 方差齐性检验(Levene)
levene_stat, levene_p = stats.levene(data1, data2, data3, data4)
print(f"\nLevene方差齐性检验:F={levene_stat:.2f}, p={levene_p:.4f}")# 单因素ANOVA
f_stat, p_value = stats.f_oneway(data1, data2, data3, data4)
print(f"\n单因素ANOVA结果:F({3},{116})={f_stat:.2f}, p={p_value:.4f}")# 效应量计算(Eta squared)
total = np.concatenate([data1, data2, data3, data4])
ss_total = np.var(total, ddof=1) * (len(total)-1)
eta_sq = (f_stat * 3) / (f_stat * 3 + 116)  # 公式:η² = (F * df_between) / (F * df_between + df_within)
print(f"效应量η² = {eta_sq:.3f}")# 事后检验(Tukey HSD)
tukey = pairwise_tukeyhsd(endog=np.concatenate([data1, data2, data3, data4]),groups=np.array(['Data1']*30 + ['Data2']*30 + ['Data3']*30 + ['Data4']*30),alpha=0.05
)
print("\nTukey HSD事后检验结果:")
print(tukey.summary())

二、动态图表

使用有代码开源动态图表网站,寻找合适的模板,将图表和对应的代码输入大模型,然后提出修改意见和生成代码。
按优先顺序推荐如下
1、apache echarts的示例
图表好看、类型齐全、提供代码
https://echarts.apache.org/examples/zh/index.html#chart-type-line
2、pyercharts的基础图表
图表一般、类型齐全、提供代码
https://05x-docs.pyecharts.org/#/zh-cn/charts_base
3、镝数图标
图表好看、类型齐全、不提供代码,仅能参考
https://dycharts.com/appv2/#/pages/home/chart-template

三、画图的美化

给大模型提供美化库,让他使用特定的美化库的美化模板进行绘图。

1、Matplotx

主要用在深色主题的绘图中,特别是用在黑色或者蓝色的科技感演讲PPT中。
主题如下,其中Dracula主题非常流行。
在这里插入图片描述

2、案例图形

1、阴影雷达图
在这里插入图片描述

3、其他工具

数据专列表

def convert_to_list(input_data):"""将一列数字转换为 Python 列表。参数:input_data (str): 包含一列数字的字符串,每行一个数字。返回:list: 转换后的 Python 列表。"""# 按行分割输入数据lines = input_data.strip().splitlines()# 将每一行的数字转换为浮点数或整数data_list = []for line in lines:stripped_line = line.strip()if "." in stripped_line:  # 判断是否为浮点数data_list.append(float(stripped_line))else:data_list.append(int(stripped_line))return data_list# 示例输入数据
input_data = """
17"""# 调用函数并打印结果
data_list = convert_to_list(input_data)
print(data_list)

字体设置

https://blog.csdn.net/qq_35240689/article/details/130924160

相关文章:

使用大语言模型进行Python图表可视化

Python使用matplotlib进行可视化一直有2个问题,一是代码繁琐,二是默认模板比较丑。因此发展出seaborn等在matplotlib上二次开发,以更少的代码进行画图的和美化的库,但是这也带来了定制化不足的问题。在大模型时代,这个…...

Mac电脑(M芯片)安装ubuntu22.04

一、下载VMware虚拟机 VMware官网下载VMware Fusion 二、下载ubuntu镜像 M系列的Mac电脑要下载arm架构的镜像 方法一:官网下载 方法二:清华源下载 清华源镜像 点击获取下载链接 选择Ubuntu,下载22.04.5(arm64,Server) 三、创建虚拟机 …...

【linux】管理磁盘——RAID10(含备份)与逻辑卷管理

RAID概念 当今CPU性能每年可提升30%-50%但硬盘仅提升7%硬盘在服务器中需要持续、频繁、大量的I/O操作,故障机率较大,则需要对硬盘进行技术改造,提 升读写性能、可靠性1988年,加利福尼亚大学伯克利分校首次提出并定义了RAID技术概…...

Day3 蓝桥杯省赛冲刺精炼刷题 —— 排序算法与贪心思维

一、0实现插入排序 - 蓝桥云课 算法代码&#xff1a; #include <stdio.h>const int N 10000; // 定义数组的最大大小int arr[N 10], temp[N 10]; // arr为待排序的数组&#xff0c;temp为辅助数组// 合并操作&#xff1a;将两个已经排好序的子数组合并为一个有序数…...

查看iphone手机的使用记录-克魔实战

如何查看 iOS 设备近期的详细使用数据 在日常使用手机时&#xff0c;了解设备的运行状态和各项硬件的使用情况可以帮助分析耗电情况、优化应用使用方式。iOS 设备提供了一些数据记录&#xff0c;能够显示应用的启动和关闭时间、后台运行情况&#xff0c;以及应用在使用过程中调…...

Tcp——客户端服务器

Tcp——客户端服务器 目录 一、基本概念 二、代码 2.1 ser服务器 2.2 cil客户端 一、基本概念 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP模型中&#xff0c;TCP位于IP层之上&#xff0c;应用层之下&#x…...

《HarmonyOS Next开发进阶:打造功能完备的Todo应用华章》

章节 6&#xff1a;日期选择器与日期处理 目标 学习如何使用DatePicker组件。理解日期格式化和日期计算。 内容 日期选择器基础 使用DatePicker组件。处理日期选择事件。 日期格式化 格式化日期为友好的文本。 日期计算 判断日期是否过期或即将到期。 代码示例 Entry Com…...

化学方程式配平 第33次CCF-CSP计算机软件能力认证

很经典的大模拟题目 但是还不算难 大模拟题最需要注意的就是细节 写代码一定要考虑全面 并且要细心多debug 多打断点STL库的熟练使用 istringstream真的处理字符串非常好用 注意解耦合思想 这样改代码debug更加清晰 https://www.acwing.com/problem/content/5724/ #includ…...

数据结构【链表】

链表 1.单链表1.1概念与结构1.1.1结点1.1.2链表的性质1.1.3链表的打印 1.2实现单链表1.3链表的分类 2.双向链表2.1概念与结构2.2实现双链表 3.顺序表与链表的分析 1.单链表 1.1概念与结构 概念&#xff1a;链表是⼀种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据…...

AIP-210 Unicode

编号210原文链接AIP-210: Unicode状态批准创建日期2018-06-28更新日期2018-06-28 API在处理&#xff08;解释、限制长度、计费&#xff09;字符串值和字符串编码时&#xff0c;应当保持一致&#xff0c;范围从理解上的歧义&#xff08;如域“限制为1024个字符”&#xff09;到…...

WiFi(无线局域网)技术的多种工作模式

WiFi&#xff08;无线局域网&#xff09;技术支持多种工作模式&#xff0c;以满足不同的网络需求和应用场景。以下是主要的WiFi工作模式及其详细说明&#xff1a; 1. 基础设施模式&#xff08;Infrastructure Mode&#xff09; [无线接入点 (AP)]/ | \ [客户端…...

游戏引擎学习第198天

回顾并为今天的内容设定 今天我们有一些代码需要处理。昨天我们进行了一些调试界面的整合工作&#xff0c;之前我们做了一些临时的、粗糙的操作&#xff0c;将一些东西读进来并放到调试界面中。今天&#xff0c;我们并不打算进行大规模的工作&#xff0c;更多的是对之前的代码…...

git命令简陋版本

git push git pull 临时仓库暂存区 ##############创建提交################ git init #创建git地址 git config --global user.name "***YQ1007" git config --global user.email "***gmail.com" git remote…...

MySQL 进阶 面经级

会用数据库&#xff0c;找大厂工作是远远不够的。 本人2025美团暑期AI面试好几个MySQL场景问题不会答&#xff0c;已脏面评。遂在此整理学习&#xff01; 文章目录 美团AI面1.数据库分片sharding的概念&#xff0c;它有什么优势和挑战?优势Sharding 挑战 2. 分库分表的常见策…...

JavaScript数组Array的使用:添加、删除、排序、遍历、互转

1、数组的概述 数组是存储于一个连续空间且具有相同数据类型的元素集合。可以把数组看作一张单行表格,该表格的每一个单元格都可以存储一个数据,而且各单元格中存储的数据类型可以不同。这些单元格被称为数组元素,每个数组元素都有一个索引号,通过索引号可以方便地引用数组…...

Vue Transition组件类名+TailwindCSS

#本文教学结合TailwindCSS实现一个Transition动画的例子# 举例代码&#xff1a; <transition enter-active-class"transition-all duration-300 ease-out"enter-from-class"opacity-0 translate-y-[-10px]"enter-to-class"opacity-100 translate-…...

蓝桥杯备赛:动态规划入门

写题的时候我发现&#xff1a;除了输入输出、循环、条件等基本语句一类的题目之外&#xff0c;我就什么都不会了&#xff0c;题目根本写不下去。 需要学&#xff1a;动态规划、哈希表、二分法、贪心算法等基本算法 现在什么都不会&#xff0c;对这些东西也是一点都不会懂&…...

【VSCode SSH 连接远程服务器】:身份验证时,出现 key: invalid format 的问题

从其它电脑上把私钥文件复制后&#xff0c;出现格式错误 很有可能是复制的时候引入了乱码 很有可能是复制的时候引入了乱码 因此直接从其它电脑上把私钥文件复制到新设备上即可&#xff01;&#xff08;不直接复制私钥的内容&#xff09; 亲测有效。...

git和VScode

游戏存档保存的是游戏的进度 git保存的是代码的进度 Vscode和git 要正常的使用git首先要设置姓名和邮箱 要配合gitee&#xff08;也可以是其他平台&#xff0c;以gitee举例&#xff09;使用&#xff0c;首先创造一个gitee账号&#xff0c;复制邮箱和用户名 在VScode中找到…...

c语言数据结构——八大排序算法实现

文章目录 八大排序算法排序算法种类选择排序类堆排序算法思路时间复杂度和空间复杂度 选择排序算法思路算法优化时间复杂度和空间复杂度 插入排序类插入排序算法思路时间复杂度和空间复杂度 希尔排序算法思路时间复杂度和空间复杂度 非比较排序类计数排序时间复杂度和空间复杂度…...

Python入门(5):异常

目录 1 异常处理基础概念 1.1 什么是异常&#xff1f; 1.2 异常与错误的区别 2 异常处理基础 2.1 常见内置异常类型 2.2 try-except 基本结构 2.3 捕获多个异常 2.4 抛出异常 2.4.1 使用raise语句 2.4.2 自定义异常类 3 高级异常处理技巧 3.1 不要过度捕…...

OpenCv(五)——边缘检测

目录 边缘检测 一、sobel算子边缘检测 &#xff08;1&#xff09;原理 1、X轴方向的边缘检测 2、Y轴方向的边缘检测 &#xff08;2&#xff09;sobel算子参数 &#xff08;3&#xff09;X轴方向边缘检测代码演示 1、显示圆的图像 2、x方向上的边缘检测&#xf…...

论文笔记:Instruction-Tuning Llama-3-8B Excels in City-Scale MobilityPrediction

2024 Sigspatial Hummob Workshop 第2/3名 提出了 Llama-3-8B-Mob——一个基于 Llama-3-8B的指令微调版本&#xff0c;专为长期、多城市人类移动预测而设计。 1 问题定义 2 方法 将轨迹预测问题重构为一个带有指令的问答任务 通过 GPT-3.5 和 4 进行实验&#xff0c;发现虽然…...

基础框架系列分享:一个通用的Excel报表生成管理框架

由于我们系统经常要生成大量的Excel报表&#xff08;Word&#xff0c;PDF报表也有&#xff0c;另行分享&#xff09;&#xff0c;最初始他们的方案是&#xff0c;设计一个表&#xff0c;和Excel完全对应&#xff0c;然后读表&#xff0c;把数据填进去&#xff0c;这显然是非常不…...

Linux安装Ubuntu24.04系统 并安装配置Nvidia 4090 显卡驱动

目录标题 方式一、离线安装一、检查确认系统的版本首先在终端输入下载注意:注意, 后面带notebook的是笔记本的驱动,不要下载错了点击view点击下载二、安装我选择的是 NVIDIA Proprietary.安装完成之后,再次检查补充步骤三:禁用默认nouveau显卡驱动,后重启系统补充步骤四:…...

Deepdiff的使用实战记录

使用场景&#xff1a;在做数据库迁移 或 底层代码重构优化&#xff0c;用于对比新旧代码的接口层返回数据对比 1.模拟在新改造的接口上新加了字段is_ok&#xff0c;且时间戳字段精度变成毫秒&#xff0c;img字段域名变更&#xff0c;能准确对比。 api_old {"ret":…...

C语言:多线程

多线程概述 定义 多线程是指在一个程序中可以同时运行多个不同的执行路径&#xff08;线程&#xff09;&#xff0c;这些线程可以并发或并行执行。并发是指多个线程在宏观上同时执行&#xff0c;但在微观上可能是交替执行的&#xff1b;并行则是指多个线程真正地同时执行&…...

Linux(25)——进程调度

目录 一、Linux 进程调度&#xff1a; 二、进程优先级&#xff1a; 1、普通调度策略&#xff1a; 2、完全公平调度程序&#xff1a; 三、nice 值&#xff1a; 1、nice 值范围&#xff1a; 2、nice 值修改权限&#xff1a; &#xff08;1&#xff09;降低&#xff1a; …...

SAP CO88根据标准价格拆分增量错误解决

CO88事务码可能出现如下错误&#xff0c;错误消息号 MLCCS015。出现该错误&#xff0c;表示成本组件分解出现了问题&#xff0c;参照 MLCCS015 错误的帮助文档&#xff1a; 其实这里已经说明了原因和解决方法&#xff0c;但不是很具体。note 632752 - Use of the program MLCCS…...

spring boot 整合redis

1.在pom文件中添加spring-boot-starter-data-redis依赖启动器 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.编写三个实体类 RedisHash("p…...

游戏被外挂攻破?金融数据遭篡改?AI反作弊系统实战方案(代码+详细步骤)

一、背景与需求分析 随着游戏行业与金融领域的数字化进程加速,作弊行为(如游戏外挂、金融数据篡改)日益复杂化。传统基于规则的防御手段已难以应对新型攻击,而AI技术通过动态行为分析、异常检测等能力,为安全领域提供了革命性解决方案。本文以游戏反作弊系统和金融数据安…...

【JavaWeb】前端基础

JavaWeb 前端三大件&#xff1a;HTML&#xff08;主要用于网页主体结构的搭建&#xff09;&#xff0c;CSS&#xff08;页面美化&#xff09;&#xff0c;JavaScript&#xff08;主要用于页面元素的动态代理&#xff09; 1. HTML 1.1 html概述 HTML&#xff1a;Hyper Text …...

STM32智能手表——任务线程部分

RTOS和LVGL我没学过&#xff0c;但是应该能硬啃这个项目例程 ├─Application/User/Tasks # 用于存放任务线程的函数 │ ├─user_TaskInit.c # 初始化任务 │ ├─user_HardwareInitTask.c # 硬件初始化任务 │ ├─user_RunModeTasks.c…...

Java线程池详解

摘要&#xff1a;线程池是Java高并发编程的核心组件&#xff0c;有效管理线程生命周期并提升系统性能。本文将深入剖析Java线程池的实现原理、配置策略及生产环境中的实战技巧&#xff0c;助您构建高效稳定的多线程应用。 一、线程池核心价值 1.1 为什么需要线程池&#xff1f…...

Git Fetch 和 Git Pull 的区别

Git fetch和git pull的区别 二者都能够从远程获取最新版本到本地。 1. Git fetch 仅从远程获取最新版本到本地&#xff0c;不会进行 merge&#xff08;合并&#xff09;操作。 操作示例 从远程的 origin的 master 主分支上获取最新版本到 origin/master 分支上&#xff1a…...

《2核2G阿里云神操作!Ubuntu+Ollama低成本部署Deepseek模型实战》

简介&#xff1a; “本文为AI开发者揭秘如何在阿里云2核2G轻量级ECS服务器上&#xff0c;通过Ubuntu系统与Ollama框架实现Deepseek模型的高效部署。无需昂贵硬件&#xff0c;手把手教程涵盖环境配置、资源优化及避坑指南&#xff0c;助力初学者用极低成本在云端跑通行业领先的大…...

Rust闭包详解

文章目录 闭包捕获外部变量移动和借用闭包的特性闭包和性能闭包和生命周期 闭包 Rust中的闭包是一种匿名函数&#xff0c;可以捕获并存储环境中的变量&#xff0c;有点类似于Lambda表达式 闭包允许在其定义的作用域之外访问变量&#xff0c;并且可以在需要时将其移动或者借用…...

科技潮流出行新体验 方程豹全新车型钛3正式开启预售

科技潮流出行新体验&#xff0c;比亚迪个性化品牌方程豹旗下全新车型钛3正式开启预售&#xff0c;钛3定位科技潮品SUV&#xff0c;搭载独有的潮流配置“1机3舱”&#xff0c;以及“iCT”安全三件套、“E2C”智能三件套&#xff0c;实现了科技越级、空间越级、配置越级&#xff…...

如何将AI模型返回的字符串转为html元素?

场景&#xff1a; 接入deepseek模型的api到我们平台&#xff0c;返回的字符串需要做下格式化处理。 返回的数据是这样的&#xff1a; {"role": "assistant","content": "<think>\n嗯&#xff0c;用户问的是“星体是什么”。首先&am…...

使用SpringBoot + Thymeleaf + iText实现动态PDF导出

使用SpringBoot Thymeleaf iText实现动态PDF导出 1.前端模版代码&#xff0c;需要注意&#xff0c;iText有很多高级样式兼用性不好&#xff0c;需要自己试错&#xff1a; <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"…...

Redis 源码硬核解析系列专题 - 扩展篇:Gossip协议的具体实现

1. 引言 Redis Cluster使用Gossip协议实现节点间的状态同步和一致性维护。Gossip协议是一种去中心化的通信机制,通过节点间的“谣言传播”方式交换信息,具有高容错性和扩展性。本篇将深入剖析Redis中Gossip协议的具体实现,包括消息格式、传播机制和故障检测逻辑。 2. Gossi…...

scGPT环境安装

scGPT环境安装 conda create -n scgpt_2 conda activate scgpt_2 conda install python3.10.11 cudatoolkit11.7 cudatoolkit-dev gxx>6.0.0,<12.0 cudnn -c conda-forge pip install torch1.13.0cu117 torchvision0.14.0cu117 torchaudio0.13.0 --extra-index-url https…...

linux服务器组建与管理

环境: DNSSamba服务器 ip:192.168.177.153 FTP服务器 ip:192.168.177.152 pc ip:192.168.177.151 这里先把DNS的ip及DNS固定给固定了,免得我关机了还会更改 网络配置:(前面的命令是DNS/Samba的后面的是FTP的,下面那张是示例图) sudo nmcli con mod ens33 ipv4.addres…...

vue3 生命周期函数(挂载、更新、销毁)

在这之前&#xff0c;相必用户也是用过vue2的经历&#xff0c;所以&#xff0c;在讲解之前先对vue2和vue3的生命周期进行对比&#xff1a; Option API组合APIbeforeCreate-setupcreated-setupbeforeMountonBeforeMountmountedonMountedbeforeUpdateonBeforeUpdateupdatedonUpd…...

树莓派超全系列教程文档--(20)树莓派配置自动息屏

树莓派配置自动息屏 配置自动息屏桌面Raspberry Pi 配置CLI 控制台设置控制台模式自动息屏查看当前自动息屏设置 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置自动息屏 您可以将 Raspberry Pi 配置为在一段时间不活动后自动息屏。默认情况…...

基于 Qt / HTTP/JSON 的智能天气预报系统测试报告

目录 一、项目概述 1.1项目背景 1.2项目目标 二、功能需求 2.1 用户界面功能 2.2 后台功能 三、技术选择 3.1 开发框架与工具 3.2 第三方 API 四、UI设计 4.1界面展示 4.2stylesheet样式 五、代码实现 1.构造函数 2.网络请求响应处理函数 3.处理json数据 4.更新…...

Oracle数据库数据编程SQL<3.7 PL/SQL 触发器(Trigger)>

触发器是Oracle数据库中的一种特殊存储过程&#xff0c;它会在特定数据库事件发生时自动执行。触发器通常用于实现复杂的业务规则、数据验证、审计跟踪等功能。 目录 一、触发器基本概念 1. 触发器特点 2. 触发器组成要素 二、触发器类型 1. DML触发器 2. DDL触发器 3.…...

反常积分和定积分的应用 1

网课 还是得跟上网课的进度。但是不要给自己太大的压力。看到数学题确实有点慌张。老师为什么说写对了不要打对号&#xff0c;我感觉打对号可以给自己充足的正反馈。关键问题就是能做对的题不多。这篇笔记主要整理网课的一些笔记。网课落下的比较多&#xff0c;大概还需要补好…...

Day49 | 11. 盛最多水的容器、16. 最接近的三数之和、33. 搜索旋转排序数组、36. 有效的数独

11. 盛最多水的容器 题目链接&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 题目难度&#xff1a;中等 代码&#xff1a; class Solution {public int maxArea(int[] height) {int i0,jheight.length-1,res0;while(i<j){resheight[i]<heig…...

31天Python入门——第20天:魔法方法详解

你好&#xff0c;我是安然无虞。 文章目录 魔法方法1. __new__和__del__2. __repr__和__len__3. __enter__和__exit__4. 可迭代对象和迭代器5. 中括号[]数据操作6. __getattr__、__setattr__ 和 __delattr__7. 可调用的8. 运算符 魔法方法 魔法方法: Python中的魔法方法是一类…...