Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 色条上的手动刻度_Python_Python 3.x_Matplotlib_Colorbar - Fatal编程技术网

Python 色条上的手动刻度

Python 色条上的手动刻度,python,python-3.x,matplotlib,colorbar,Python,Python 3.x,Matplotlib,Colorbar,我正在尝试创建一个对数色条。我知道以前有人问过这个问题,但是在回答中,plot函数用于创建对数色条。我想独立于绘图函数来做。因此,我编写了一个函数,它将计算记号的位置并相应地创建标签,但当我尝试更新颜色栏上的记号和标签时,它不起作用: 假设我有下面的情节 现在我的轴看起来像这样: list(cbar.ax.get\u yticklabels()) >>>[文本(1,0.0,'$\\mathdefault{10^{0}}$'), 文本(1,0.5,), 文本(1,1.0,), 文本(1,1.5,

我正在尝试创建一个对数色条。我知道以前有人问过这个问题,但是在回答中,plot函数用于创建对数色条。我想独立于绘图函数来做。因此,我编写了一个函数,它将计算记号的位置并相应地创建标签,但当我尝试更新颜色栏上的记号和标签时,它不起作用:

假设我有下面的情节

现在我的轴看起来像这样:

list(cbar.ax.get\u yticklabels())
>>>[文本(1,0.0,'$\\mathdefault{10^{0}}$'),
文本(1,0.5,),
文本(1,1.0,),
文本(1,1.5,),
文本(1,2.0,),
文本(1,2.5,),
文本(1,3.0,),
文本(1,3.5,”)]
使用我的函数后,我得到了刻度的位置(每个自然数都有一个标签,其他的则没有,因为它们像小刻度一样使用):

pos=[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,3.0,3.1,3.1,3.5]
和我的标签:

labels=['$\\mathdefault{10^{3}}$'、'''、''、''、''、''、''、''、''、'$\\mathdefault{10^{3}}$'、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、''、'''''''.''''.''''.'''''''.''''''.''''''.'''''.'''.\
当我尝试更改刻度和标签时:

cbar.set_ticks(位置)
cbar.设置标签(标签)
我明白了:

[文本(1,0.0,'$\\mathdefault{10^{0}}}$'),文本(1,0.5',),文本(1,1.0',),文本(1,1.5',),文本(1,0',),文本(1,2.5',),文本(1,3.0',),文本(1,3.5',),文本(1,0',),文本(1,0',),文本(1,0',),文本(1,0',),文本(1,0',),文本(1,0',),文本(1,0',),文本(1,0',),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,),文本(1,0,))]
因此,添加了其他位置,但都位于位置0且没有标签

使用

cbar.ax.set\u-yticks(位置)
cbar.ax.set_yticklabels(标签)
相反,也不起作用:

[Text(1,0.0,$\\mathdefault{10^{3}}}$'、Text(1,0.5,)、Text(1,1.0,)、Text(1,0,)、Text(1,2.5,)、Text(1,3.0,)、Text(1,3.5,)、Text(1,0,)、Text(1,0,)、Text(1,0,)、Text(1,0,)、Text(1,0,)、Text(1,0,)、Text(1,0,)、Text(1,0,)(1,0,,),文本(1,0,,),文本(1,0,,),文本(1,0,,$\\mathdefault{10^{3}}$'),文本(1,0,,),文本(1,0,,),文本(1,0,,),文本(1,0,,),文本(1,0,,),文本(1,0,,),文本(1,0,,,),文本(1,0,,,,),,,,,,,,,,,,,,,文本(1,0,,,),,,,,,,,,,,,,,文本(1,0,,),文本(1,0,,,,,,),,,,,,,,),,,,,,,,),,,,,,,,,,,,,,,,,,,,文本(1,0
因此,我想知道我在尝试更改刻度/标签时做错了什么。 非常感谢您的帮助

如果您感兴趣,我将使用以下函数创建颜色栏并创建新的标记和标签:

将matplotlib导入为mpl
将numpy作为np导入
def生成日志刻度(当前刻度):
最小值=np.inf
max_uz=-np.inf
对于当前刻度中的元素:
pos,val=elem.get_position()
如果val<最小值:
最小值=val
如果val>max\ux:
最大值=val
#新标记=[]
新标签=[]
新位置=[]
对于范围内的i(int(最小值10),int(最大值10+1)):
如果i%10==0:
新增位置附加(i/10)
新标签。追加($\\mathdefault{10^{“+str(int(val))+“}}}$”)
#new_ticks.append(mpl.text.text(1,i/10,“$\\mathdefault{10^{int(val)}}}$”)
其他:
新增位置附加(i/10)
新标签。附加(“”)
#新的_ticks.append(mpl.text.text(1,i/10,“”))
#返回新标记、新位置、新标签
返回新的\u位置、新的\u标签
def make_cbar(数据,cmap=mpl.cm.jet,log=False):
m=mpl.cm.ScalarMappable(cmap=cmap)
如果记录:
m、 集合数组(np.log10(列表(集合(数据)))
norm=plt.Normalize(np.log10(最小值(数据)),np.log10(最大值(数据)))
其他:
m、 集合数组(列表(集合(数据)))
norm=plt.规格化(最小值(数据)、最大值(数据))
cbar=plt.色条(m)
cbar.ax.tick_参数(axis='both',which='major',width=3,length=5)
cbar.ax.tick_参数(轴='both',其中='minor',宽度=2,长度=3)
如果记录:
pos,labels=make\u log\u ticks(列表(cbar.ax.get\u yticklabels())
cbar.ax.set_-yticks(位置)
cbar.ax.set_yticklabels(标签)
返回cbar,λc:m.cmap(标准值(np.log10(c)))
其他:
返回cbar,λc:m.cmap(标准值(c))

我不知道如何告诉颜色条是对数的。但是我发现了如何做到这一点,以防任何人遇到类似的问题:

m=mpl.cm.scalarMapable(cmap=cmap,norm=mpl.colors.LogNorm())
norm=mpl.colors.LogNorm(最小值(数据),最大值(数据))
m、 集合数组(列表(集合(数据)))
cbar=plt.色条(m)
可以将可映射设置为使用对数范数。然后,标签将自动完成。无需手动完成。但是,我无法更改标签的问题仍然存在