Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.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 Colorbar标记标签作为日志输出_Python_Matplotlib_Colorbar - Fatal编程技术网

Python Colorbar标记标签作为日志输出

Python Colorbar标记标签作为日志输出,python,matplotlib,colorbar,Python,Matplotlib,Colorbar,我正在玩historogram2d,我正在尝试合并一个颜色条对数值 这是我目前的代码: import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl from matplotlib.colors import LinearSegmentedColormap cmap = LinearSegmentedColormap.from_list('mycmap', ['black', 'maroon',

我正在玩
historogram2d
,我正在尝试合并一个颜色条对数值

这是我目前的代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from matplotlib.colors import LinearSegmentedColormap


cmap = LinearSegmentedColormap.from_list('mycmap', ['black', 'maroon', 
                                                'crimson', 'orange', 'white'])

fig = plt.figure()
ax = fig.add_subplot(111)
H = ax.hist2d(gas_pos[:,0]/0.7, gas_pos[:,1]/0.7, cmap=cmap, 
            norm=matplotlib.colors.LogNorm(), bins=350, weights=np.log(gas_Temp))

ax.tick_params(axis=u'both', which=u'both',length=0)
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

cb = fig.colorbar(H[3], ax=ax, shrink=0.8, pad=0.01, 
                orientation="horizontal", label=r'$\log T\ [\mathrm{K}]$')
cb.ax.set_xticklabels([1,2,3,4])
cb.update_ticks()

empty = Rectangle((0,0 ), 0, 0, alpha=0.0)
redshift = fig.legend([empty], [r'$z = 127$'], 
        loc='upper right', frameon=False, handlelength=0, handletextpad=0)
redshift.get_texts()[0].set_color('white')
#fig.add_artist(redshift)

plt.show()

权重是未通过
np.log()
传递的值,当前正通过
LogNorm()
进行标准化

我试图得到的是将色条tic标签作为当前存在的对数值,例如
10**4-->4
10**6-->6
,等等


我尝试过更改格式,并传递了np.log(gas_Temp)的对数值,但没有任何效果。

惯用的方法是使用a来设置颜色条的格式。这正是您需要的:将
10**x
值显示为
x
,或者换句话说,将
y
值显示为
log10(x)

使用虚拟数据进行证明:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
from matplotlib.ticker import LogFormatterExponent # <-- one new import here

# generate dummy data
histdata = 10**(np.random.rand(200,200)*4 + 1)  # 10^1 -> 10^5

# plot
fig = plt.figure()
ax = fig.add_subplot(111)

ax.tick_params(axis=u'both', which=u'both',length=0)
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)

im = plt.imshow(histdata,cmap='viridis',norm=LogNorm())
cb = fig.colorbar(im, ax=ax, shrink=0.8, pad=0.01,
                  orientation="horizontal", label=r'$\log T\ [\mathrm{K}]$')

# v-- one new line here
cb.formatter = LogFormatterExponent(base=10) # 10 is the default
cb.update_ticks()
将numpy导入为np
将matplotlib.pyplot作为plt导入
从matplotlib.colors导入LogNorm
从matplotlib.ticker导入LogFormatterExponent#10^5
#密谋
图=plt.图()
ax=图添加_子批次(111)
ax.勾选参数(轴=u'both',其中=u'both',长度=0)
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
im=plt.imshow(histdata,cmap='viridis',norm=LogNorm())
cb=图颜色条(im,ax=ax,收缩=0.8,衬垫=0.01,
方向=“水平”,label=r'$\log T\[\mathrm{K}]$)
#v--这里有一条新线路
cb.formatter=LogFormatterExponent(base=10)#10是默认值
cb.update_ticks()
将原始版本(左)与修改版本(右)的结果进行比较:


您是如何尝试更改格式的?这应该行得通。我试过使用
matplotlib.ticker
中的模块
LogFormatter
,但我能得到的最好的结果是科学符号格式。你读过其中的和文档/链接吗?是的,我的
norm
参数设置为
LogNorm
wieght
设置为正在分析的值
gas\u Temp
。我认为链接设置类似于使用
historogram2d
,但我不知道我做错了什么。链接文档中有一个绘图有
10^x
标签,另一个是对数标签。后者不是你想要实现的吗?