Сложность изменения горизонтального пространства между участками Matplotlib - PullRequest
1 голос
/ 19 октября 2019

В Python я делал график из нескольких вспомогательных сюжетов и в конечном итоге решил в эстетических целях попытаться удалить горизонтальные пробелы между ними, но эта, казалось бы, легкая задача как-то не получается, и я был бы признателен любомусовет о том, как это сделать.

Мой текущий график выглядит следующим образом:

enter image description here

И код для его генерации такой,

## The data first, pardon its length
data = {'n_size: 10, scale: 5': {'Normal_data': {'T_model': {'% model_mean_accuracy': 0.9665604111322623,
    '% model_std_accuracy': 0.1403044027874627},
   'Normal_model': {'% model_mean_accuracy': 0.3588016310928018,
    '% model_std_accuracy': 0.15670772400999605}},
  'T_data': {'T_model': {'% model_mean_accuracy': 0.9571050544498441,
    '% model_std_accuracy': 0.4919716194794976},
   'Normal_model': {'% model_mean_accuracy': 0.33135961083598975,
    '% model_std_accuracy': 0.09517290555081247}}},
 'n_size: 10, scale: 10': {'Normal_data': {'T_model': {'% model_mean_accuracy': 0.9641872823759053,
    '% model_std_accuracy': 0.12880945204032987},
   'Normal_model': {'% model_mean_accuracy': 0.5566844810693337,
    '% model_std_accuracy': 0.16096047896246227}},
  'T_data': {'T_model': {'% model_mean_accuracy': 0.6216338568355548,
    '% model_std_accuracy': 0.7082362141795221},
   'Normal_model': {'% model_mean_accuracy': 0.3948692029244512,
    '% model_std_accuracy': 0.18799991442400232}}},
 'n_size: 10, scale: 20': {'Normal_data': {'T_model': {'% model_mean_accuracy': 0.9680652106664631,
    '% model_std_accuracy': 0.11374246421698583},
   'Normal_model': {'% model_mean_accuracy': 0.7466108597314576,
    '% model_std_accuracy': 0.15341975348920403}},
  'T_data': {'T_model': {'% model_mean_accuracy': 1.1329410521346626,
    '% model_std_accuracy': 0.09506974062859724},
   'Normal_model': {'% model_mean_accuracy': 0.6864829731707396,
    '% model_std_accuracy': 0.13872252491967219}}},
 'n_size: 10, scale: 30': {'Normal_data': {'T_model': {'% model_mean_accuracy': 0.933652508907905,
    '% model_std_accuracy': 0.03935646501763717},
   'Normal_model': {'% model_mean_accuracy': 0.8218968469603595,
    '% model_std_accuracy': 0.13640544525624385}},
  'T_data': {'T_model': {'% model_mean_accuracy': 0.9965691581931089,
    '% model_std_accuracy': 0.05996151343132031},
   'Normal_model': {'% model_mean_accuracy': 0.8539754983373469,
    '% model_std_accuracy': 0.012542281271065603}}}}


def draw_barplots(data, rows_columns_length = 5):

    fig=plt.figure()  

#     plt.subplots_adjust(wspace=0.0)
#     fig.subplots_adjust(wspace=0.0)

    ## Calculating the correct # of rows/columns for whole figure
    n_cols = rows_columns_length
    n_rows = len(data) / rows_columns_length
    if not (n_rows).is_integer():
        n_rows = n_rows + 1      

#     matplotlib.gridspec.GridSpec(n_rows, n_cols, wspace=0.0)

    for i, var_name in enumerate(data):
        ax = fig.add_subplot(n_rows, n_cols, i+1)

        width = 0.5
        ax.bar(x = [0], height = [data[var_name]['Normal_data']['T_model']['% model_mean_accuracy']],
               width=width, label = 'T_model'
              )
        ax.bar(x = [0.5], height = [data[var_name]['Normal_data']['Normal_model']['% model_mean_accuracy']],
              width=width, label='Normal_model'
              )

        ax.set_title(var_name, size=8.5)
        ax.xaxis.set_visible(False)
        ax.yaxis.set_visible(False)

#     plt.subplots_adjust(wspace=0.0)
#     fig.subplots_adjust(wspace=0.0)
#     matplotlib.gridspec.GridSpec(n_rows, n_cols, wspace=0.0) 

    plt.show()

draw_barplots(data, 2)

Я попытался установить plt.subplots_adjust(hspace=0.0) и matplotlib.gridspec.GridSpec(n_rows, n_cols, hspace=0.0) согласно этим ответам ( link1 , link2 ), но они, похоже, не работают.

Как я могу понять, что происходит?

...