Уменьшить разрыв между двумя группами на панели matplotlib

avatar
dhanush-ai1990
8 апреля 2018 в 01:56
1669
1
-1

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

import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np


sns.set()
sns.set_style("dark")
sns.set_style("whitegrid",{"xtick.major.size": 5})
sns.set(font_scale=1.2)
plt.figure(figsize=(2,6))
sns.set_style("darkgrid")

n_groups = 2


skip=[0.651]
skip.append(sum([0.819335,0.818205])/len([0.819335,0.818205]))

Glove=[0.655]
Glove.append(sum([0.768675,0.835844])/len([0.768675,0.835844]))

RNN=[0.629]
RNN.append(sum([0.768675,0.773007])/len([0.768675,0.773007]))

Global=[0.635]
Global.append(sum([0.759134,0.764281])/len([0.759134,0.764281]))

Cross=[0.665]
Cross.append(sum([0.768675,0.838481])/len([0.768675,0.838481]))
Dist=[0.61]
Dist.append(sum([0.753107,0.755493])/len([0.753107,0.755493]))

#Comparion of Brain Bench Vs Rest
fig, ax = plt.subplots()
index = np.arange(n_groups)
bar_width = 0.05
opacity = 1.0
#('Global Context', 'Skip-Gram',    'RNN',  'Cross-Lingual',    'Glove',    'Non-Distributional','Skip-Gram-Italian')

rects1 = plt.bar(index, skip, bar_width,
                 alpha=opacity,
                 color='#581845',
                 label='Skip-Gram')

rects2 = plt.bar(index + bar_width, Glove, bar_width,
                 alpha=opacity,
                 color='#FF5733',
                 label='Glove')


rects3 = plt.bar(index + bar_width + bar_width, RNN, bar_width,
                 alpha=opacity,
                 color='#000080',
                 label='RNN')

rects4 = plt.bar(index + bar_width + bar_width+bar_width, Global, bar_width,
                 alpha=opacity,
                 color='#800080',
                 label='Global Context')

rects5 = plt.bar(index + bar_width + bar_width+bar_width+bar_width, Cross, bar_width,
                 alpha=opacity,
                 color='#808000',
                 label='Cross-Lingual')

rects6 = plt.bar(index + bar_width + bar_width+bar_width+bar_width+bar_width, Dist, bar_width,
                 alpha=opacity,
                 color='#FFC300',
                 label='Non-Dist')








#algo = ('BrainBench','WS-353','WS-353-SIM', 'WS-353-REL','MEN','MTurk-771')
algo = ( 'BrainBench V1.0','BrainBench V2.0')
algo_len = np.arange(len(algo))
#plt.xticks(index + 0.15, ( 'BrainBench','WS-353','WS-353-SIM', 'WS-353-REL','MEN','MTurk-771'))
plt.xticks(index+bar_width, ( 'BrainBench V1.0','BrainBench V2.0'))
plt.ylim(0.55,0.88)
#sns.plt.title('2 vs. 2 Accuracy for Concrete/Abstract Words in Italian fMRI').set_fontsize('12')
sns.plt.title('Comparison of BrainBench Versions').set_fontsize('12')
sns.plt.ylabel('Correlation').set_fontsize('12')




plt.gcf().subplots_adjust(bottom=0.20)
plt.legend()
plt.tight_layout()
# plt.xticks(rotation=15)
#plt.show()
plt.savefig("/Users/Dhanush/Desktop/Versions.png", dpi=300)

Two groups of bar separated by large gap

Основной проблемой здесь является большой разрыв между двумя группами. Мне нужно, чтобы две группы были разделены одной шириной полосы

Источник
user3483203
8 апреля 2018 в 02:19
1

Вау, это много кода. Можете ли вы сократить его до минимального примера вашей проблемы?

dhanush-ai1990
8 апреля 2018 в 02:32
0

Я внес изменения, предложенные @chriz, это весь код, необходимый для создания приведенного выше графика.

dhanush-ai1990
8 апреля 2018 в 03:07
0

У людей здесь действительно есть культура минусовать, если они не знают ответа. Таких вопросов нет, и большинство даже не знает, как это сделать.

Ответы (1)

avatar
dhanush-ai1990
8 апреля 2018 в 03:05
0

Я изменил код, чтобы получить желаемые результаты. Заменены индекс и ширина полосы в приведенном ниже фрагменте кода пользовательскими позициями в списке. Здесь список указывает точные позиции для построения полосы. Я дал для первого бара 0,1 и для второго бара 0,5. Ширина каждой полосы равна 0,05, а полос 6. Таким образом, 0,1+ 6 * 0,05 + 0,1 в качестве разрыва между двумя группами, что дает мне 0,5 в качестве начальной позиции для 2-го гистограммы скип-граммы.

До

rects1 = plt.bar(index, skip, bar_width,
                 alpha=opacity,
                 color='#581845',
                 label='Skip-Gram')

Изменено на

rects1 = plt.bar([0.1, 0.5], skip, bar_width,
                 alpha=opacity,align='center',
                 color='#581845',
                 label='Skip-Gram')

enter image description here