【问题标题】:Colorbar tick labels as log outputs颜色条刻度标签作为日志输出
【发布时间】:2017-07-05 22:33:54
【问题描述】:

我正在玩histogram2d,我正在尝试合并一个彩条对数值。

这是我当前的代码:

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 --> 410**6 --> 6

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

【问题讨论】:

  • 您是如何尝试更改格式的?那应该可以。
  • 我尝试使用 matplotlib.ticker 中的模块 LogFormatter ,但我能得到的最好的结果是科学记数法格式。
  • 您阅读过this Q&A 和其中的文档/链接吗?
  • 是的,我的norm 参数设置为LogNormwieght 设置为正在分析的值gas_Temp。我认为链接设置类似于使用histogram2D,但我不知道我做错了什么。
  • 链接的文档有an example,其中一个图有10^x标签,另一个是对数标签。后者不是你想要达到的吗?

标签: python matplotlib colorbar


【解决方案1】:

惯用的做法是使用LogFormatterExponent 来设置颜色条的格式。这正是您需要的:将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()

比较原始(左)与修改后的结果(右):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2020-02-18
    • 1970-01-01
    • 2020-01-05
    • 2018-06-05
    • 2022-01-28
    相关资源
    最近更新 更多