我的用户有时希望看到一个二维地块的值的日志缩放,即使数据跨度不到十年。我可以使用“pcolormesh”或“imshow”使用
norm=LogNorm(vmin=minimum,vmax=maximum)参数,并准确显示测井标度的“强度”值。我想要的‘颜色条’显示一些小滴答和滴答标签,但当最小和最大跨度不到十年,无论我做什么,只有一个滴答值显示。我在这篇文章中尝试了这个建议:
Minor ticks in matplotlib's colorbar
在下面的代码片段中进行了修改:
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>
'''还有其他一些我还没保存的东西。所有这些都会产生相同的结果,除了单个十年的滴答/标签之外,色条都会丢失任何一个。关于ticker类的文档是很难理解的:
api.html
特别是关于LogFormatter参数labelOnlyBase的以下声明:“基数用来定位十年滴答,如果labelOnlyBase是假的,这将是唯一被标记的”,而假的和真实的都不会比标记的基数更多,我想这是因为这是指主要蜱,但为什么世界上我不能得到小挠痒或标签呢?
如有任何建议,将不胜感激。
发布于 2015-07-18 06:59:33
Matplotlib色条似乎不会在日志规模上做小的滴答。在this answer中使用这个方法是可行的,尽管它有点不方便--有一天这是自动的,但是现在您必须手工组织小的滴答值(在本例中是np.arange(2, 10)/10.,但是如果值上升到10,就必须附加np.arange(2, 10) )。
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 + 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()
# We need to nomalize the tick locations so that they're in the range from 0-1...
minorticks = p.norm(np.arange(2, 10)/10.)
cb.ax.yaxis.set_ticks(minorticks, minor=True)
plt.show()

minorticks_on()方法没有做任何事情,所以我将其注释掉。
https://stackoverflow.com/questions/22825686
复制相似问题