
代码绘制成果展示










代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport matplotlib.pyplot as pltimport pandas as pdfrom scipy import statsfrom itertools import combinations

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: {'colors': ['#FFD166', '#118AB2', '#EF476F'],'fill': ['#FFE8B2', '#88C4D8', '#F7A3B7'],'dark': ['#CCA751', '#0D6E8E', '#BF3858']},}}scheme_id = 60 #提取配色方案scheme = COLOR_SCHEMES.get(scheme_id, COLOR_SCHEMES[1]) #获取对应配色方案

第三部分

# =========================================================================================# ======================================3.绘图函数======================================# =========================================================================================def plot_raincloud(data, labels):fig, ax = plt.subplots(figsize=(6, 5))x_positions = np.arange(len(labels)) #X轴坐标点位置ax.scatter(x_jitter, #Xd, #Ys=90, #大小color=colors[i], #散点颜色edgecolor='white', #边缘线颜色linewidth=1.2, #边缘线的宽度zorder=3) #图层

第四部分

#绘制箱线图box = ax.boxplot(data, #数据positions=x_positions, #Xwidths=0.08, #箱体宽度patch_artist=True, #允许对箱体内部进行颜色填充修改showfliers=True, #离群点#离群点的样式flierprops=dict(marker='o', #形状markerfacecolor='#222222', #填充颜色markeredgecolor='none', #离群点边缘线markersize=9)) #大小

第五部分

#小提琴图violins = ax.violinplot(data, #数据positions=x_positions + 0.15, #位置showmeans=False, #不显示均值横线showextrema=False, #不显示极值线showmedians=False) #不显示中位数横线#遍历小提琴图for i, pc in enumerate(violins['bodies']):pc.set_facecolor(fill_colors[i]) #填充色pc.set_alpha(1) #透明度pc.set_edgecolor('none') #隐藏边框线paths = pc.get_paths()[0] #绘图路径信息vertices = paths.vertices #提取构成路径的所有顶点坐标数组center = x_positions[i] + 0.15 #小提琴图的中心点X轴坐标vertices[:, 0] = np.clip(vertices[:, 0], center, np.inf) #截断左侧部分

第六部分

# 利用排列组合生成不同数据组索引的两两配对列表,用于后续显著性检验计算pairs = list(combinations(range(len(data)), 2))ax.plot([x1, x1, x2, x2], #四个顶点的X坐标[y_top - line_height, y_top, y_top, y_top - line_height], #Y坐标lw=1.5, #线宽c='black') #颜色#文本ax.text((x1 + x2) / 2, #Xy_top + line_height * 0.2, #ysig_text, #显著性标记ha='center', #水平va='bottom', #垂直color='black', #颜色fontsize=12, #大小fontweight='bold') #加粗

第七部分

#获取显著性横线的Y坐标高度top_y = global_max + y_range * 0.08 + (y_range * 0.12 * (len(pairs) - 1))#子图标号ax.text(-0.5, #Xtop_y + y_range * 0.15, #Y'E', #编号fontsize=20, #大小fontweight='bold', #加粗va='center') #垂直#设置刻度线ax.tick_params(axis='both', #X轴和Y轴which='major', #主刻度labelsize=12, #大小width=1.5, #宽度length=5) #长度

第八部分

# =========================================================================================# ======================================4.执行部分======================================# =========================================================================================if __name__ == '__main__':excel_file_path = r'data.xlsx' #原始数据路径df = pd.read_excel(excel_file_path) #读取数据input_labels = df.columns.tolist() #获取列名input_data = [df[col].dropna().values for col in input_labels] #数据plot_raincloud(input_data, input_labels)

如何应用到你自己的数据

1.选择要使用的配色方案:
scheme_id = 60 #提取配色方案2.设置绘图结果的保存路径:
save_dir = r'云雨图'3.设置原始数据文件的路径:
excel_file_path = r'data.xlsx' #原始数据路径
推荐


获取方式
