【问题标题】:Is it possible to make different-sized ticks for graphs?是否可以为图表制作不同大小的刻度?
【发布时间】:2011-06-29 06:56:39
【问题描述】:

假设我有一个带有 25 个刻度的轴的图表,我想让每五个刻度(0、5、10、15、20、25)比其他刻度更大,以便更容易阅读图表。 (那些刻度上已经有数字标签,而其他刻度上没有标签,但阅读仍然相当不舒服......)甚至可能吗?如果我有 27 个滴答声而不是 25 个滴答声怎么办?

E:更多信息:

我实际上是在编辑一个没有太多评论的脚本,该脚本由一位更有经验的程序员编写(我也不是很有经验)。该程序根据给定的数据绘制了一个颜色图(暗示坐标点(x,y)中的应变)......呃,我不得不承认我不理解代码中所说的所有内容。但是,有一部分是在画出所问的应变场。

        # Strain field on background
        fig = mpl.figure(1,figsize=(6,5),facecolor='w',edgecolor='k')
        mpl.clf()
        ax1 = fig.add_axes([0.5*(1-0.50*ratio)+0.05, 0.45, 0.50*ratio, 0.50])
        mpl.contourf(strainY.T * 100,50) # Into percents
        mpl.xlim(0,x-1)
        mpl.ylim(0,y-1)
        mpl.gca().invert_yaxis()
        yt = np.linspace(0,y-1,len(vHeight)+1)
        locs, labels = mpl.yticks(yt, vHeight, fontsize=9)
        xt = np.linspace(0,x-1,len(vWidth)+1)
        locs, labels = mpl.xticks(xt, vWidth, fontsize=9)

yt 和 xt 表示用于放置刻度的特殊向量。由于一些令人讨厌的缩放内容(从像素 (?) 到其他测量值)和不同长度的轴,它们需要一些工作......无论如何,结果是一个 2D 应变图,其中带有恒定空间的刻度......

如果您需要更多信息,请询问更多信息,我很困惑,我不知道哪些信息是必要的。

...我在 cmets 和文档下面所理解的,contourf() 对应于 plot()。那么 set_major_locator 应该可以工作吗?虽然我记得我尝试过一次,但结果并不好……不过,我可以在该脚本的副本中再试一次。

【问题讨论】:

    标签: python graph matplotlib axis


    【解决方案1】:

    您在寻找主要和次要蜱虫吗?我假设您正在寻找以下示例:

    http://matplotlib.sourceforge.net/examples/pylab_examples/major_minor_demo1.html#pylab-examples-major-minor-demo1

    编辑 我已经修改了您的示例,以便可以运行它。下次,请发布一个其他人可以复制/粘贴/执行的最小示例。

    从上面引用的网站,我复制了轴格式。如果我正确理解您的问题,您希望在任意位置设置刻度线。为此,我们可以将 FixedLocator 与列表一起使用。如果刻度之间的间隔恒定,则使用 MultipleLocator。 matplotlib.ticker 中还有很多其他定位器...

    您应该能够运行下面的代码并希望得到您想要的! :-)

    import matplotlib.pyplot as mpl
    import numpy as np
    from matplotlib.ticker import MultipleLocator, FormatStrFormatter, FixedLocator
    
    majorLocator   = FixedLocator([0,15,19,40,60,99])
    majorFormatter = FormatStrFormatter('%d')
    minorLocator   = MultipleLocator(5)
    
    ratio = 1
    strainY = np.zeros((100,100))
    x = 100
    y = 100
    vHeight = np.arange(0,100,5)
    vWidth = np.arange(0,100,5)
    
    # Strain field on background
    fig = mpl.figure(1,figsize=(6,5),facecolor='w',edgecolor='k')
    mpl.clf()
    ax1 = fig.add_axes([0.5*(1-0.50*ratio)+0.05, 0.45, 0.50*ratio, 0.50])
    mpl.contourf(strainY.T * 100,50) # Into percents
    mpl.xlim(0,x-1)
    mpl.ylim(0,y-1)
    mpl.gca().invert_yaxis()
    yt = np.linspace(0,y-1,len(vHeight)+1)
    locs, labels = mpl.yticks(yt, vHeight, fontsize=9)
    xt = np.linspace(0,x-1,len(vWidth)+1)
    locs, labels = mpl.xticks(xt, vWidth, fontsize=9)
    
    ax1.xaxis.set_major_locator(majorLocator)
    ax1.xaxis.set_major_formatter(majorFormatter)
    ax1.xaxis.set_minor_locator(minorLocator)
    
    mpl.show()
    

    如果这不是您所需要的,您能否将您的示例代码更改为可以运行的代码,或者发布您需要的草图?

    【讨论】:

    • 啊,这看起来很有希望!谢谢,我查一下。
    • ...呃,好吧,我的情况似乎无法使用它。我的脚本为图像制作了单独的轴,由于一些缩放等东西,它们不能通过绘图来制作......无论如何。轴刻度当前以这种方式制作:locs, labels = mpl.yticks(yt, vHeight) 其中 yt 表示刻度的位置,vHeight 表示标签的位置。这是我知道的唯一处理它的好方法。我不确定如何在我的情况下放置 set_major_locator 和其他东西......有人可以建议吗?我试图阅读 matplotlib.ticker 的文档,但找不到帮助......我对这些东西不是很有经验。
    • @mmyntti:我想你必须提供更多信息来说明为什么通常的主要/次要刻度是不够的。最好有一个显示问题的最小示例脚本。
    • 啊!很抱歉忘记了“以可执行形式编写”的东西。我在那里很新。一旦我得到另一个项目,我将检查该滴答问题并修复上面编写的代码。非常感谢,很抱歉搞砸了这么多!
    • 没问题,希望你能成功!如果我的回答与您的问题不符,请告诉我。
    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2021-04-23
    • 2023-03-07
    • 2013-04-28
    • 1970-01-01
    • 2011-06-30
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多