【发布时间】:2014-05-14 13:50:06
【问题描述】:
我的用户有时希望看到二维绘图值的对数缩放,即使数据跨度不到 10 年。我可以使用 'pcolormesh' 或 'imshow' 使用
norm=LogNorm(vmin=minimum,vmax=maximum)
参数并准确显示对数缩放的“强度”值。我希望“颜色条”显示一些小刻度和刻度标签,但是当最小和最大跨度小于十年时,无论我做什么,都只显示一个刻度值。我尝试了此 SO 帖子中的建议:
Minor ticks in matplotlib's colorbar
改编于以下sn-p:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
# fill grid
x = np.linspace(1,10,10)
y = np.linspace(1,10,10)
X, Y = np.meshgrid(x,y)
Z = np.abs(X/10 + Y/10)
# plot
f, ax = plt.subplots()
p = plt.pcolormesh(X, Y, Z, norm=LogNorm(), vmin=2e-1, vmax=1)
cb = plt.colorbar(p, ax=ax)
cb.ax.minorticks_on()
plt.show()
但是没有小标记,标记或其他:
我还尝试了以下方法:
from matplotlib.ticker import LogFormatterMathtext
from matplotlib.ticker import LogLocator
from matplotlib.ticker import LogFormatter
import numpy as nmp
import matplotlib.pyplot as pyp
'''
<snip>
'''
ccbb=pyp.colorbar(label='ohms')
ccbb.ax.yaxis.set_minor_locator(LogLocator(subs=nmp.arange(2,10)))
# AND/OR
# ccbb.ax.yaxis.set_minor_locator(LogLocator(subs=[0.2,0.5,1.0]))
ccbb.ax.yaxis.set_minor_formatter(LogFormatterMathtext())
ccbb.update_ticks()
'''
<snip>
'''
还有其他一些我没有保存的东西。所有这些都产生相同的结果,颜色条除了单个十年刻度/标签之外缺少任何内容。股票代码类的文档非常难以理解:
http://matplotlib.org/api/ticker_api.html
特别是下面关于LogFormatter参数labelOnlyBase的声明:
“base 用于定位十年刻度,如果 labelOnlyBase 为 False,这将是唯一要标记的刻度” False 和 True 都不会导致比基数更多的刻度,我想那是因为这指的是主要刻度,但是为什么在世界上我不能得到小勾号或标签吗??
任何建议将不胜感激。
【问题讨论】:
-
this answer 可能会有所帮助..
标签: matplotlib colorbar