[英]Editing Colorbar (Legend) in Geopandas?
在我正在創建的 geopandas 世界 choropleth 中,我想用顏色條編輯多項內容。 即大小(使其與地圖本身大致匹配)、文本大小(當前顯示太小),我還想為其添加標簽。 從閱讀中似乎沒有簡單的方法可以在 geopandas 中明確地做到這一點,所以我想知道是否有人可以提供任何解決方法? 任何幫助將不勝感激。
這是我目前正在使用的一段代碼(對於某些情況,中間部分只是將列表與按國家/地區划分的數字合並到框架中,我將其用作着色的基礎)
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)
這里的理想解決方案是保持圖例選項具有的顏色,指定大小和文本大小並在欄頂部啟用標簽。 不幸的是,我正在努力弄清楚這些是如何完成的。
此處找到的答案幫助我找到了解決方法。
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'
:否則不會保存bbox_inches='tight'
。 我的輸出是這樣的,修改了顏色條字體大小。
在單獨的圖形中創建一個顏色條怎么樣?
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
是顏色圖字符串或對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.