Как изменить график разброса точек в питоне - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю над сценарием 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, определенный в предыдущем вопросе, но если у вас есть идея получше ...

Конечно, я продолжу искать ответ самостоятельно и будуобновить мой код, если я сделаю.Заранее спасибо за помощь

...