编辑代码

import matplotlib.pyplot as plt 
import numpy as np

# 定义x轴标签
categories = ['Sup', 'Semi', 'PSSS','DDLR+PSSS']

# 定义每个子图的数据
data_1_vein = {
    'x1': [64.93, 67.94, 71.79,73.45],
    'x2': [67.27, 71.86, 74.29,76.24],
    'x3': [69.79,72.98,75.63,77.51]
}

data_2_vein = {
    'x1': [39.71, 45.73, 51.34,52.95],
    'x2': [42.75,48.65, 55.33,55.97],
    'x3': [43.74, 50.50, 55.37,57.92]
}

data_3_vein = {
    'x1': [23.56, 25.73, 36.73,38.39],
    'x2': [25.37, 30.45, 38.14,39.81],
    'x3': [25.42, 32.54, 36.94,40.52]
}

data_mIoU = {
    'x1': [42.73, 46.47,53.29,54.93],
    'x2': [45.13, 50.32, 55.92,57.34],
    'x3': [46.32, 50.01, 55.98,58.65]
}

# 设置柱状图宽度和x轴位置偏移量
bar_width =0.2
x = np.arange(len(categories))

# 创建图形和子图
fig, axs = plt.subplots(2, 2, figsize=(12, 4))

# 颜色列表
colors = ['blue', 'green','red']

# 绘制1°vein子图
for i, (key, values) in enumerate(data_1_vein.items()):
    axs[0, 0].bar(x + (i - 1) * bar_width, values, bar_width, label=key, color=colors[i])
axs[0, 0].set_title('(a) 1°vein',y=-0.4, fontsize=12)
axs[0, 0].set_xticks(x + bar_width-0.2 )
axs[0, 0].set_xticklabels(categories)
axs[0, 0].set_ylim(60, 80)
axs[0, 0].set_yticks(np.arange(60, 81, 5))
axs[0, 0].legend()

# 绘制2°vein子图
for i, (key, values) in enumerate(data_2_vein.items()):
    axs[0, 1].bar(x + (i - 1) * bar_width, values, bar_width, label=key, color=colors[i])
axs[0, 1].set_title('(b) 2°vein',y=-0.4, fontsize=12)
axs[0, 1].set_xticks(x + bar_width-0.2)
axs[0, 1].set_xticklabels(categories)
axs[0, 1].set_ylim(35, 60)
axs[0, 1].set_yticks(np.arange(35, 61, 5))
axs[0, 1].legend()

# 绘制3°vein子图
for i, (key, values) in enumerate(data_3_vein.items()):
    axs[1, 0].bar(x + (i - 1) * bar_width, values, bar_width, label=key, color=colors[i])
axs[1, 0].set_title('(c) 3°vein',y=-0.4, fontsize=12)
axs[1, 0].set_xticks(x + bar_width -0.2)
axs[1, 0].set_xticklabels(categories)
axs[1, 0].set_ylim(20, 45)
axs[1, 0].set_yticks(np.arange(20, 46, 5))
axs[1, 0].legend()

# 绘制mIoU子图
for i, (key, values) in enumerate(data_mIoU.items()):
    axs[1, 1].bar(x + (i - 1) * bar_width, values, bar_width, label=key, color=colors[i])
axs[1, 1].set_title('(d) mIoU',y=-0.4, fontsize=12)
axs[1, 1].set_xticks(x + bar_width -0.2)
axs[1, 1].set_xticklabels(categories)
axs[1, 1].set_ylim(40, 60)
axs[1, 1].set_yticks(np.arange(40, 61, 5))
axs[1, 1].legend()

# 调整子图布局
plt.tight_layout()

# 保存图片
plt.savefig('bar_chart.png', dpi=300)