Редактирование Colorbar (Легенда) в Geopandas? - PullRequest
0 голосов
/ 05 ноября 2018

Есть несколько вещей, которые я хочу отредактировать с помощью цветовой шкалы в мире геопанд, где я создаю. А именно, размер (так, чтобы он приблизительно соответствовал самой карте), размер текста (который в настоящее время отображается слишком маленьким), и я также хотел добавить к нему метку. Кажется, что, прочитав немного, нет простого способа сделать это явно в геопандах, и поэтому мне было интересно, есть ли у кого-нибудь какие-нибудь обходные пути, чтобы предложить? Любая помощь будет принята с благодарностью.

Это фрагмент кода, который я сейчас использую (для некоторого контекста средний раздел просто объединяет списки с рисунками по странам, которые я использую в качестве основы для раскрашивания, во фрейм)

fig, ax = plt.subplots(figsize=(40,29.171))
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))

world=pd.DataFrame(world)
world['LEADS']=0.1
world = world.set_index('name')
world['name']=world.index
for x, y in zip(Countries, country_counts):
    world.loc[x, 'LEADS'] = y
world=geopandas.GeoDataFrame(world)

world = world[(world.index != "Antarctica")]
ax.set_axis_off()
#ax.legend(title="Leads")
world.plot(ax=ax, column='LEADS', cmap='Oranges', legend=True,linewidth = 1.5)
plt.tight_layout()

plt.savefig('plot_image.png', bbox_inches='tight', transparent=True)

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

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Найденный ответ здесь помог мне найти обходной путь.

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize = (30,25))
vmin = data.column.min()
vmax = data.column.max()
data.plot(ax=ax,column = column,edgecolor='black',cmap = 'YlOrRd',legend = False)
plt.xlim([6,19])
plt.ylim([36,47.7])
plt.xticks([], [])
plt.yticks([], [])

cax = fig.add_axes([1, 0.1, 0.03, 0.8])
sm = plt.cm.ScalarMappable(cmap='YlOrRd', norm=plt.Normalize(vmin=vmin, vmax=vmax))
sm._A = []
cbr = fig.colorbar(sm, cax=cax,)
cbr.ax.tick_params(labelsize=200) 
plt.tight_layout()
plt.savefig(os.path.join('out','fig.png'),format = 'png',bbox_inches='tight')
plt.show()

Если у вас есть объект Colorbar my_cbar, вы можете устанавливать свойства в режиме matplotlib. Здесь я изменил размер этикетки. Не забудьте использовать bbox_inches='tight', если вам нужно сохранить рисунок: в противном случае цветовая полоса не сохраняется. Мой вывод примерно такой, с измененным размером шрифта цветовой панели. map with colorbar

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

Как насчет создания цветовой панели на отдельной фигуре?

Используя первый найденный пример здесь вы можете создать функцию:

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

def create_colourbar(cmap, vmin, vmax, label, save_path=None):
    ''' Creates colourbar in separate figure 
    :param cmap: Cmap string or object
    :param vmin: minimum value in data array
    :param vmax: maximum value in data array
    :param label: colourbar label
    :param save_path: Save path, optional
    '''

    fig, ax = plt.subplots(figsize=(5, 1))

    cb1 = mpl.colorbar.ColorbarBase(cmap=cmap,
                                    norm=Normalize(vmin=vmin,
                                                   vmax=vmax),
                                    orientation='horizontal', ax=ax)
    cb1.set_label(label, fontsize=6)
    plt.tight_layout()
    if save_path:
        plt.savefig(save_path3)
    plt.show()

где:

vmax = np.nanmax(world['LEADS'].values)
vmin = np.nanmin(world['LEADS'].values)

и cmap - строка или объект карты цветов.

...