如何增大Matplotlib中每个Colormap的显示尺寸?
解决Matplotlib Colormap显示拥挤问题
我来帮你搞定这个问题!你的所有Colormap挤在一起根本看不清,核心原因是没有给每个色条分配足够的垂直显示空间。咱们只需要调整Figure的尺寸参数,再优化一下布局,就能让每个Colormap清晰展示。
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt # 所有Colormap分类(保持你的原列表不变) cmaps = [('All Color Maps', "Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spectral, spectral_r, spring, spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r".replace(" ", "").split(',') )] # 获取Colormap的数量 nrows = len(cmaps[0][1]) gradient = np.linspace(0, 1, 256) gradient = np.vstack((gradient, gradient)) def plot_color_gradients(cmap_category, cmap_list, nrows): # 关键修改1:动态设置Figure尺寸,每个Colormap分配0.3英寸高度,宽度设为6 fig, axes = plt.subplots(nrows=nrows, figsize=(6, nrows*0.3)) # 关键修改2:优化布局参数,避免底部内容被截断 fig.subplots_adjust(top=0.95, bottom=0.02, left=0.2, right=0.99) axes[0].set_title(cmap_category + ' colormaps', fontsize=14) for ax, name in zip(axes, cmap_list): ax.imshow(gradient, aspect='auto', cmap=plt.get_cmap(name)) pos = list(ax.get_position().bounds) x_text = pos[0] - 0.01 y_text = pos[1] + pos[3]/2. fig.text(x_text, y_text, name, va='center', ha='right', fontsize=10) # 关闭所有刻度和边框 for ax in axes: ax.set_axis_off() for cmap_category, cmap_list in cmaps: plot_color_gradients(cmap_category, cmap_list, nrows) plt.show()
核心修改说明
- 动态设置
figsize:通过figsize=(6, nrows*0.3)让Figure的高度随Colormap数量自动调整,每个色条获得0.3英寸的垂直空间(你可以根据需求调整这个数值,比如改成0.4会更宽松)。 - 优化布局参数:微调
subplots_adjust的bottom值,避免最底部的Colormap名称被画布截断。 - 简化了
nrows的计算:因为你只有一个分类,直接取该分类下Colormap的数量即可,原代码的max在这里没必要。
这样修改后,每个Colormap都会有足够的显示空间,再也不会挤成一团啦!
内容的提问来源于stack exchange,提问作者code base 5000
相关产品推荐
相关产品推荐

