首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当范围小于十年时,Matplotlib日志颜色条小滴答就消失了。

当范围小于十年时,Matplotlib日志颜色条小滴答就消失了。
EN

Stack Overflow用户
提问于 2014-04-03 00:36:47
回答 1查看 2.1K关注 0票数 3

我的用户有时希望看到一个二维地块的值的日志缩放,即使数据跨度不到十年。我可以使用“pcolormesh”或“imshow”使用

代码语言:javascript
复制
norm=LogNorm(vmin=minimum,vmax=maximum)

参数,并准确显示测井标度的“强度”值。我想要的‘颜色条’显示一些小滴答和滴答标签,但当最小和最大跨度不到十年,无论我做什么,只有一个滴答值显示。我在这篇文章中尝试了这个建议:

Minor ticks in matplotlib's colorbar

在下面的代码片段中进行了修改:

代码语言:javascript
复制
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()

但是,没有小的蜱,标记或其他:

我还尝试了以下几点:

代码语言:javascript
复制
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是假的,这将是唯一被标记的”,而假的和真实的都不会比标记的基数更多,我想这是因为这是指主要蜱,但为什么世界上我不能得到小挠痒或标签呢?

如有任何建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-18 06:59:33

Matplotlib色条似乎不会在日志规模上做小的滴答。在this answer中使用这个方法是可行的,尽管它有点不方便--有一天这是自动的,但是现在您必须手工组织小的滴答值(在本例中是np.arange(2, 10)/10.,但是如果值上升到10,就必须附加np.arange(2, 10) )。

代码语言:javascript
复制
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()方法没有做任何事情,所以我将其注释掉。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22825686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档