first commit
This commit is contained in:
parent
abc6526143
commit
26631f9b48
24 changed files with 1089 additions and 1 deletions
71
Code/9-polar-graph.py
Normal file
71
Code/9-polar-graph.py
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import numpy as np
|
||||
import openpyxl
|
||||
import os.path
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
def draw_cbf_graph(cbf_mean_dict, data_type, save_path):
|
||||
plt.rcParams["figure.figsize"] = [32, 18]
|
||||
plt.rcParams["figure.autolayout"] = True
|
||||
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体
|
||||
subplot = plt.subplot(1, 1, 1, projection='polar')
|
||||
|
||||
count = len(cbf_mean_dict)
|
||||
theta = np.linspace(0.0, 2 * np.pi, count, endpoint=False)
|
||||
data = np.array(list(cbf_mean_dict.values()))
|
||||
width = 1.8 * np.pi / count
|
||||
subplot.set_theta_zero_location('N')
|
||||
subplot.set_theta_direction(-1)
|
||||
subplot.xaxis.set_ticks(theta)
|
||||
subplot.yaxis.set_ticks([])
|
||||
|
||||
bars = subplot.bar(x=theta, height=data, width=width)
|
||||
for data_value, bar in zip(data, bars):
|
||||
bar.set_facecolor(plt.cm.turbo(data_value / 60))
|
||||
bar.set_alpha(0.8)
|
||||
for theta_value, data_value in zip(theta, data):
|
||||
margin = data.max() * 0.08
|
||||
subplot.annotate(str(round(data_value, 2)), xy=(theta_value, data_value + margin))
|
||||
|
||||
subplot.set_xticklabels(list(cbf_mean_dict.keys()))
|
||||
for label, angle in zip(subplot.get_xticklabels(), theta):
|
||||
x, y = label.get_position()
|
||||
lab = subplot.text(x, y - 0.1, label.get_text(), transform=label.get_transform(), ha=label.get_ha(),
|
||||
va=label.get_va())
|
||||
rotation = - np.rad2deg(angle) + 90
|
||||
if rotation < -90:
|
||||
rotation += 180
|
||||
lab.set_rotation(rotation)
|
||||
subplot.set_xticklabels([])
|
||||
|
||||
plt.title(f"221例健康人西门子5延迟数据各脑区{data_type}")
|
||||
plt.savefig(save_path, dpi=200)
|
||||
plt.cla()
|
||||
plt.close('all')
|
||||
|
||||
|
||||
def main():
|
||||
# 请尝试添加att参数,并调整色阶范围使得CBF=40时为红色,60时为蓝色
|
||||
data_types = ['corr-CBF']
|
||||
atlas_list = ['AnImage_AAL3']
|
||||
output_dir = r'..\Data\polar-graph'
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
input_file = r'..\Data\csv-simple-stat.xlsx'
|
||||
workbook = openpyxl.load_workbook(input_file, data_only=True)
|
||||
|
||||
for data_type in data_types:
|
||||
for atlas in atlas_list:
|
||||
cbf_mean_dict = {}
|
||||
worksheet = workbook[f'{atlas}_{data_type}']
|
||||
for column_num in range(2, worksheet.max_column + 1):
|
||||
name = worksheet.cell(row=1, column=column_num).value
|
||||
mean = worksheet.cell(row=worksheet.max_row - 8, column=column_num).value
|
||||
print(atlas, data_type, name, mean)
|
||||
if type(mean) is float:
|
||||
cbf_mean_dict[name] = mean
|
||||
|
||||
draw_cbf_graph(cbf_mean_dict, data_type, os.path.join(output_dir, f'{atlas}_{data_type}.png'))
|
||||
|
||||
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue