Как удалить атрибут из сюжета «Легенда о разбросе» - PullRequest
0 голосов
/ 22 ноября 2018

Я сделал разброс plot, используя seaborn из трех столбцов ['Category','Installs' and 'Gross Income'] и карту оттенков, используя столбец категории из моего набора данных.Однако в легенде, кроме столбца категории, который я хочу отобразить, в конце есть большая самодовольная демонстрация одного из столбцов, используемых на диаграмме рассеяния, «Установки».Я хотел бы удалить этот элемент, но из поиска по другим вопросам выслушайте и документацию seaborn и matplotlib Я не знаю, как поступить.

Вот фрагмент кода, с которым я работаю:

fig, ax = pyplot.subplots(figsize=(12,6))

ax=sns.scatterplot( x="Installs", y="Gross Income", data=comp_income_inst, hue='Category', 
                   palette=sns.color_palette("cubehelix",len(comp_income_inst)), 
                   size='Installs', sizes=(100,5000), legend='brief', ax=ax) 

ax.set(xscale="log", yscale="log")
ax.set(ylabel="Average Income") 
ax.set_title("Distribution showing the Earnings of Apps in Various Categories\n", fontsize=18)
plt.rcParams["axes.labelsize"] = 15



# Move the legend to an empty part of the plot
plt.legend(loc='upper left', bbox_to_anchor=(-0.2, -0.06),fancybox=True, shadow=True, ncol=5)
#plt.legend(loc='upper left')

plt.show()

This is the result of the code above, notice the smug in the Legend on the lower right corner

1 Ответ

0 голосов
/ 23 ноября 2018

На самом деле, это не пятно, а легенда размера для вашей карты оттенков.Поскольку размеры пузырьков (100, 5000) настолько велики по сравнению с данными, в легенде они перекрываются в этом пространстве, создавая эффект «размазывания».Легенда по умолчанию объединяет в себе легенды о цвете и размере.

Но вместо того, чтобы убрать маркеры размера, как вы предполагаете, читателям может понадобиться узнать диапазон Установок размер пузырьков.Поэтому рассмотрите возможность разделения одной легенды на две легенды и используйте borderpad и prop size для размещения пузырьков и надписей.

Данные (засеянные случайные данные)

categs = ['GAME', 'EDUCATION', 'FAMILY', 'WEATHER', 'ENTERTAINMENT', 'PHOTOGRAPHY', 'LIFESTYLE',
          'SPORTS', 'PRODUCTIVITY', 'COMMUNICATION', 'PERSONALIZATION', 'HEALTH_AND_FITNESS', 'FOOD_AND_DRINK', 'PARENTING',
          'MAPS_AND_NAVIGATION', 'TOOLS', 'VIDEO_PLAYERS', 'BUSINESS', 'AUTO_AND_VEHICLES', 'TRAVEL_AND_LOCAL',
          'FINANCE', 'MEDICAL', 'ART_AND_DESIGN', 'SHOPPING', 'NEWS_AND_MAGAZINES', 'SOCIAL', 'DATING', 'BOOKS_AND REFERENCES',
          'LIBRARIES_AND_DEMO', 'EVENTS']

np.random.seed(11222018)
comp_income_inst = pd.DataFrame({'Category': categs,
                                 'Installs': np.random.randint(100, 5000, 30),
                                 'Gross Income': np.random.uniform(0, 30, 30) * 100000
                                }, columns=['Category', 'Installs', 'Gross Income'])

График

fig, ax = plt.subplots(figsize=(13,6))

ax = sns.scatterplot(x="Installs", y="Gross Income", data=comp_income_inst, hue='Category', 
                    palette=sns.color_palette("cubehelix",len(comp_income_inst)), 
                    size='Installs', sizes=(100, 5000), legend='brief', ax=ax) 

ax.set(xscale="log", yscale="log")
ax.set(ylabel="Average Income") 
ax.set_title("Distribution showing the Earnings of Apps in Various Categories\n", fontsize=20)
plt.rcParams["axes.labelsize"] = 15

# EXTRACT CURRENT HANDLES AND LABELS
h,l = ax.get_legend_handles_labels()

# COLOR LEGEND (FIRST 30 ITEMS)
col_lgd = plt.legend(h[:30], l[:30], loc='upper left', 
                     bbox_to_anchor=(-0.05, -0.50), fancybox=True, shadow=True, ncol=5)

# SIZE LEGEND (LAST 5 ITEMS)
size_lgd = plt.legend(h[-5:], l[-5:], loc='lower center', borderpad=1.6, prop={'size': 20},
                      bbox_to_anchor=(0.5,-0.45), fancybox=True, shadow=True, ncol=5)

# ADD FORMER (OVERWRITTEN BY LATTER)
plt.gca().add_artist(col_lgd)

plt.show()

Выход

Two Legend Plot Output

Даже рассмотрите тему морского рожка с sns.set() как раз перед началом сюжета:

Seaborn Plot Output

...