Created on Tue Oct 24 09:30:19 2023
Created on Mon Oct 23 19:53:51 2023
Created on Thu Jun 22 15:16:16 2023
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['savefig.dpi'] = 600
plt.rcParams['figure.dpi'] = 600
data = pd.read_csv(r'F:\Fianl paper\BoxPlot\666.csv')
x_labels = ['水体', '植被', '农业用地', '建设用地'] * 3
font = FontProperties(family='serif')
fig, axs = plt.subplots(num_rows, num_columns, figsize=(20, 20), sharex='col', sharey='row')
fig.subplots_adjust(wspace=0.001, hspace=0.15)
axs[0, 0].text(1.9, 1.2, '六月', transform=axs[0, 0].transAxes,
ha='center', va='center', fontsize=22)
axs[0, 4].text(1.9, 1.2, '七月', transform=axs[0, 4].transAxes,
ha='center', va='center', fontsize=22)
axs[0, 8].text(1.9, 1.2, '八月', transform=axs[0, 8].transAxes,
ha='center', va='center', fontsize=22)
fig.text(0.085, 0.5, '温度(℃)', transform=fig.transFigure,
ha='center', va='center', fontsize=22, rotation=90)
year_labels = ['1999', '2005', '2011','2017','2022']
for i in range(num_rows):
axs[i, num_columns - 1].text(1.39, 0.5, year_labels[i],
transform=axs[i, num_columns - 1]
ha='center', va='center', fontsize=22, rotation=90)
for i in range(num_rows):
for j in range(num_columns):
index = i * num_columns + j
if index < len(data.columns):
column_array = data.iloc[:, index].dropna().values
bp = axs[i, j].boxplot([column_array], positions=[0], widths=0.5, patch_artist=True)
axs[i, j].spines['top'].set_visible(False)
axs[i, j].spines['right'].set_visible(False)
axs[i, j].spines['bottom'].set_visible(False)
axs[i, j].spines['left'].set_visible(False)
if j % (num_columns // 3) == 0:
axs[i, j].spines['left'].set_visible(True)
axs[i, j].spines['left'].set_linewidth(2)
axs[i, j].spines['left'].set_color('black')
axs[i, j].spines['bottom'].set_visible(True)
axs[i, j].spines['bottom'].set_linewidth(2)
axs[i, j].spines['bottom'].set_color('black')
axs[i, j].set_xticks([0])
axs[i, j].set_xticklabels([x_labels[j]], rotation=0, ha='center', fontsize=22)
axs[i, j].tick_params(axis='y', labelsize=22)
colors = ['darkblue', 'darkgreen', 'pink', 'darkred']
box.set(facecolor=colors[j % (num_columns // 3)])
for i in range(num_rows):
for j in range(0, num_columns, num_columns // 3):
for k in range(num_columns // 3):
column_array = data.iloc[:, i * num_columns + j + k].dropna().values
mean_values.append(np.mean(column_array))
mean_line = np.mean(mean_values)
axs[i, j].axhline(mean_line, color='gray', linestyle='-', linewidth=3, xmin=0.02, xmax=0.98)
axs[i, j + 1].axhline(mean_line, color='gray', linestyle='-', linewidth=3, xmin=0.02, xmax=0.98)
axs[i, j + 2].axhline(mean_line, color='gray', linestyle='-', linewidth=3, xmin=0.02, xmax=0.98)
axs[i, j + 3].axhline(mean_line, color='gray', linestyle='-', linewidth=3, xmin=0.02, xmax=0.98)
box_height = axs[i, j].get_ylim()[1] - axs[i, j].get_ylim()[0]
axs[i, j].text(1.9, 1.06, f'{mean_line:.2f}℃', transform=axs[i, j].transAxes,
ha='center', va='center', fontsize=16, bbox=dict(facecolor='white', edgecolor='gray', boxstyle='round'))
for i in range(num_rows):
for j in range(num_columns):
index = i * num_columns + j
if index < len(data.columns):
axs[i, j].xaxis.set_visible(True)
axs[i, j].tick_params(axis='x', which='both', bottom=False, top=False, color='black', width=2)
axs[i, j].yaxis.set_visible(True)
axs[i, j].tick_params(axis='y', which='both', left=False, right=False)
plt.savefig(os.path.join(r'F:\Fianl paper','箱式图'))
