Я работаю над сценарием Python для создания графика точек разброса.Теперь я хотел бы сделать некоторые небольшие изменения, Вот фактический код
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams.update({'font.size': 22})
#Read datafile
Datafile='t_20_12.data'
name=[]
mean=[]
stdvar=[]
with open(Datafile,'r') as ins:
for line in ins:
line=line.strip('\n')
ind=line.index(' ')
name.append(line[0:ind])
while line[ind]==' ': ind+=1
line=line[ind:]
ind=line.index(' ')
mean.append(line[0:ind])
while line[ind]==' ': ind+=1
line=line[ind:]
stdvar.append(line)
original_name=['BASAL_INFEROSEPTAL','BASAL_INFERIOR','BASAL_INFEROLATERAL','BASAL_ANTEROLATERAL','BASAL_ANTERIOR','BASAL_ANTEROSEPTAL','MID_INFEROSEPTAL','MID_INFERIOR','MID_INFEROLATERAL','MID_ANTEROLATERAL','MID_ANTERIOR','MID_ANTEROSEPTAL','APICAL_INFERIOR','APICAL_LATERAL','APICAL_ANTERIOR','APICAL_SEPTAL']
short_name=['BasInfSep','BasInf','BasInfLat','BasAntLat','BasAnt','BasAntSep','MidInfSep','MidInf','MidInfLat','MidAntLat','MidAnt','MidAntSep','ApexInf','ApexLat','ApexAnt','ApexSep']
for i in range(len(name)):
origin=name[i]
ind=origin.index('_')
variable=origin[0:ind+1]
segment=origin[ind+1:]
modif_seg=short_name[original_name.index(segment)]
name[i]=variable+modif_seg
fig, ax = plt.subplots()
ax.scatter(mean,stdvar)
for i, txt in enumerate(name):
if (float(mean[i])>1e-4):
ax.annotate(txt, (mean[i], stdvar[i]))
plt.title('Sensitivity analysis: time')
plt.xlabel('Mean')
plt.ylabel('Standard variation')
plt.show()
А вот файл данных
a_BASAL_INFEROSEPTAL 0.000127547 0.000142708
b_BASAL_INFEROSEPTAL 5.47966e-05 0.000109593
e_BASAL_INFEROSEPTAL 0.000168496 0.000211819
XI_BASAL_INFEROSEPTAL 6.91457e-05 0.000138291
a_BASAL_INFERIOR 0.000133961 0.00013912
b_BASAL_INFERIOR 0 0
e_BASAL_INFERIOR 0 0
XI_BASAL_INFERIOR 0 0
a_BASAL_INFEROLATERAL 2.41402e-05 4.82804e-05
b_BASAL_INFEROLATERAL 0 0
e_BASAL_INFEROLATERAL 1.0847e-05 2.16941e-05
XI_BASAL_INFEROLATERAL 1.10378e-05 2.20757e-05
a_BASAL_ANTEROLATERAL 0.00014744 0.00029488
b_BASAL_ANTEROLATERAL 0 0
e_BASAL_ANTEROLATERAL 1.32931e-05 2.65863e-05
XI_BASAL_ANTEROLATERAL 0 0
a_BASAL_ANTERIOR 0.000115112 0.000230223
b_BASAL_ANTERIOR 1.0847e-05 2.16941e-05
e_BASAL_ANTERIOR 0 0
XI_BASAL_ANTERIOR 4.92837e-05 9.85674e-05
a_BASAL_ANTEROSEPTAL 0.000395227 0.000156225
b_BASAL_ANTEROSEPTAL 0.000110388 0.000194361
e_BASAL_ANTEROSEPTAL 6.46093e-05 0.000129219
XI_BASAL_ANTEROSEPTAL 6.68646e-05 0.000103741
a_MID_INFEROSEPTAL 9.81276e-06 1.96255e-05
b_MID_INFEROSEPTAL 0 0
e_MID_INFEROSEPTAL 0 0
XI_MID_INFEROSEPTAL 0.000181976 0.000149634
a_MID_INFERIOR 5.31215e-05 0.000106243
b_MID_INFERIOR 0 0
e_MID_INFERIOR 0 0
XI_MID_INFERIOR 6.07881e-05 0.000121576
a_MID_INFEROLATERAL 7.77117e-05 0.000130014
b_MID_INFEROLATERAL 0 0
e_MID_INFEROLATERAL 1.32931e-05 2.65863e-05
XI_MID_INFEROLATERAL 0.000121497 0.000242994
a_MID_ANTEROLATERAL 1.0847e-05 2.16941e-05
b_MID_ANTEROLATERAL 0.000115112 0.000230223
e_MID_ANTEROLATERAL 0 0
XI_MID_ANTEROLATERAL 0 0
a_MID_ANTERIOR 0.000136149 0.000142746
b_MID_ANTERIOR 0 0
e_MID_ANTERIOR 0 0
XI_MID_ANTERIOR 0 0
a_MID_ANTEROSEPTAL 0.000177225 0.00020393
b_MID_ANTEROSEPTAL 6.68646e-05 0.000133729
e_MID_ANTEROSEPTAL 0 0
XI_MID_ANTEROSEPTAL 6.29343e-05 0.000125869
a_APICAL_INFERIOR 0 0
b_APICAL_INFERIOR 6.92841e-05 0.000108435
e_APICAL_INFERIOR 0 0
XI_APICAL_INFERIOR 6.68646e-05 0.000133729
a_APICAL_LATERAL 0 0
b_APICAL_LATERAL 0 0
e_APICAL_LATERAL 0 0
XI_APICAL_LATERAL 0 0
a_APICAL_ANTERIOR 3.90355e-05 7.8071e-05
b_APICAL_ANTERIOR 0 0
e_APICAL_ANTERIOR 5.91207e-05 0.000118241
XI_APICAL_ANTERIOR 9.93506e-05 0.000198701
a_APICAL_SEPTAL 6.68646e-05 0.000133729
b_APICAL_SEPTAL 1.10378e-05 2.20757e-05
e_APICAL_SEPTAL 0 0
XI_APICAL_SEPTAL 9.93506e-05 0.000198701
Он производит следующую картинку: График разброса
Это то, что я хотел бы изменить:
-Изменение размера шрифта надписи (txt в функции аннотирования) Я попытался посмотреть параметры, доступные для аннотации, поэтому, возможно,Ответ заключается в том, чтобы вместо этого что-то сделать с txt (я посмотрю на него) => Хорошо, похоже, что matplotlib.rcParams.update ({'font.size': 22}) выполнит эту работу.Решено и обновлен код
-Точка и связанная метка расположены слишком близко друг к другу, возможно ли это изменить?=> Я нашел способ сделать это, используя
offset_x=str(float(mean[i])+0.00001)
ax.annotate(txt, (mean[i], stdvar[i]),(offset_x, stdvar[i]))
Есть ли способ лучше / чище?
-Включить указанную метку либо слева, либо справаточки, с которой это связано, чтобы сделать график более читабельным.Возможно, есть способ сделать это, используя offset_x, определенный в предыдущем вопросе, но если у вас есть идея получше ...
Конечно, я продолжу искать ответ самостоятельно и будуобновить мой код, если я сделаю.Заранее спасибо за помощь