pyplot colorbar属性(间隙和刻度标签)没有响应

时间:2018-04-05 04:16:07

标签: matplotlib scaling subplot colorbar

Colorbar tick属性失败,子绘图轴缩放无法响应2x2多时隙的显式指令。

例如,以下图形的代码指定了颜色条间隙= 0.0,但仍有空格。当我为子图1指定负间隙值时,它会消失[4月8日:不再出现此问题,但现在整个子图水平移位,负cbar间隙值....但未在下面的代码示例中实现]。 / p>

同样,colorbar tick标签没有响应。我试过了:

cbar.ax.set_yticklabels(fontname='Arial', fontsize=somevariable)

cbarticklabs = cbar.ax.get_yticklbels()
cbar.ax.set_yticklabels(cbarticklabs, fontsize=somevariable)

for font_objects in cbar.ax.yaxis.get_ticklabels():
    font_objects.set_size(somevariable)

我尝试过其他一些代码配置,但似乎都会产生以下错误:

AttributeError: 'NoneType' object has no attribute 'ax' 

编辑7月4日:为了“完整”和“可验证”,我的代码跟随随机数据。子图大小现在正在改变(并忽略ax.set_lim和ax.set_ylim命令),数据范围控制(ax.set_xbounds和ax.set_ybounds也被忽略,但这里不包括)。

编辑8月4日:看似无关紧要的剥离位(例如轴标签,背景图像等)。得到循环工作,但现在cbar标签不一致居中。似乎已经获得了对子画面范围的控制和错误的cbar间隙已经消失。仍无法控制cbar tick属性,现在无法使X和Y轴相同。

import numpy as np
from matplotlib import pyplot as plt

# Global variables, lists, and dicts

spextents = [1800000, 1830000, 5444000, 5485000] # desired [xmin, xmaz, ymin, ymax] for subplot
extbuf = 1000
cbarlab = 'meters of horizontal error'
cbarlabelpadval = -28
ticklabsize = 8
figszx = 9
figszy = 12
ptscalefact = .2
SplocYrKeyDict = {1:'194', 2:'196', 3:'198', 4:'2017'}
YrCompDict = {'194':'1941-1944', '196':'1961-1966', '198':'1989', '2012':'2012-2013', '2017':'2017'}
MaxErrDict = {1:50, 2:60, 3:250, 4:2}

# Create a figure with 2x2 subplot 
fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(figszx, figszy), dpi=120, sharex=True, sharey=True) # sharex and sharey ignored when plotting, 
fig.subplots_adjust(hspace = .1, wspace = .1)


for sploc, yr in SplocYrKeyDict.items() :
    ax = "ax" + str(sploc)
    ax = plt.subplot(2,2,sploc)
    compyr = SplocYrKeyDict[sploc]
    ToX = np.random.randint((spextents[0]+extbuf),(spextents[1]-extbuf), size=(80,1))
    ToY = np.random.randint((spextents[2]+extbuf),(spextents[3]-extbuf), size=(80,1))
    DistScale = np.random.randint(0, MaxErrDict[sploc], size=(80,1))
    p ="p" + str(sploc)
    p = ax.scatter(ToX, ToY, c=DistScale, zorder=9, s=DistScale*(figszx*ptscalefact), cmap='autumn_r') # (X, Y, color, drawing order, point size, colormap..."_r" extention flips the coloramp)
    plt.axis(spextents, aspect=1) #neither 'scaled', nor aspect=1 work cause axes to plot same when X != Y image dimensions
    ax.tick_params(axis='both', labelsize=ticklabsize)
    cbar = fig.colorbar(p, ax=ax, orientation='vertical', aspect=30, pad=0.0).set_label(cbarlab, labelpad=cbarlabelpadval, fontname='Arial', fontsize=ticklabsize)
    #cbarticklabs = cbar.ax.get_yticklbels()
    #cbar.ax.set_yticklabels(cbarticklabs, fontsize=ticklabsize)
    #cbar.ax.set_yticklabels(fontname='Arial', fontsize=ticklabsize) #....won't run

# draw to plot
plt.show()

这会产生: getting closer

最终,我正试图达到以下目的: nearly there

但是颜色栏紧邻每个子图(或者,理想情况下叠加在每个子图上)。和colorbar tick标签文本的大小与X和Y轴的刻度相同(理想情况下,叠加在颜色条本身上)

鉴于子图似乎也忽略了x和y边界以及sharex / sharey参数,我认为我的问题可能在代码中处于相当高的水平?不幸的是,我是一名地球科学家,而不是一名编码人员,而且我在这项工作中投入的时间虽然极具教育意义,却耗费了大量时间。非常感谢任何帮助。

干杯

0 个答案:

没有答案