首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在修改过的轴上添加有意义的小滴答?

在修改过的轴上添加有意义的小滴答?
EN

Stack Overflow用户
提问于 2017-07-21 06:45:50
回答 1查看 202关注 0票数 0

此示例具体涉及将数据绘制为日志(redshift+1)的函数,并具有参考红移轴,但可以很容易地推广到任何功能修改。

我编写了一个简洁的小函数(这里有一些问题/答案),它允许我轻松地将红移轴添加到日志(1+redshift)图的顶部。我是,为得到有意义的小事而挣扎(我不愿和你分享我那令人沮丧的努力!)

下面是代码,包括示例绘图:

在这种情况下,我希望每增加0.1次红移,而不是由一个主要的滴答占用,灵活地更改函数调用中的0.1。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import numpy as np

def add_zaxis(axis,denomination):
    oldx = axis.get_xlim()
    axis.set_xlim(0., None)
    zspan = [(10**x)-1 for x in axis.get_xlim()]

    denom = denomination
    zmax = int(np.floor(zspan[1]/denom))*denom
    zspan[1] = zmax

    k = len(np.arange(zspan[0],zspan[1],denom))+1
    zs = np.linspace(zspan[0],zspan[1],k)
    z_ticks = [np.log10(1+x) for x in zs]

    axz = axis.twiny()
    axz.set_xticks(z_ticks)
    axz.set_xticklabels(['{:g}'.format(y) for y in zs])

    axz.set_xlim(oldx)
    axis.set_xlim(oldx)
    return axz


data = np.random.randn(500)
data = data[data>0.]

fig, ax = plt.subplots(1)
plt.hist(np.log10(data+1), bins=22)
ax.set_xlabel('log(z+1)')
ax.minorticks_on()

axz = add_zaxis(ax,.3)
axz.set_xlabel('z')
axz.minorticks_on()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 10:36:12

这样做的目的是使用一个FixedLocator来定位轴上的滴答。然后,您可能有一个FixedLocator的主要滴答和一个小滴答。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import matplotlib.ticker
import numpy as np

def add_zaxis(ax,d=0.3, dminor=0.1):
    f = lambda x: np.log10(x+1)
    invf = lambda x: 10.0**x - 1.

    xlim = ax.get_xlim()
    zlim = [invf(x) for x in xlim]
    axz = ax.twiny()
    axz.set_xlim(xlim)

    zs = np.arange(0,zlim[1],d)
    zpos = f(zs)
    axz.xaxis.set_major_locator(matplotlib.ticker.FixedLocator(zpos))
    axz.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(zs))

    zsminor = np.arange(0,zlim[1],dminor)
    zposminor = f(zsminor)

    axz.xaxis.set_minor_locator(matplotlib.ticker.FixedLocator(zposminor))
    axz.tick_params(axis='x',which='minor',bottom='off', top="on")
    axz.set_xlabel('z')


data = np.random.randn(400)
data = data[data>0.]

fig, ax = plt.subplots(1)
plt.hist(np.log10(data+1), bins=22)
ax.set_xlabel('log(z+1)')

add_zaxis(ax)

ax.minorticks_on()
ax.tick_params(axis='x',which='minor',bottom='on', top="off")

plt.show()

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

https://stackoverflow.com/questions/45230789

复制
相关文章

相似问题

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