【问题标题】:Is there a way to easily compress a section of the an axis in matplotlib?有没有办法在matplotlib中轻松压缩a轴的一部分?
【发布时间】:2015-07-31 08:57:49
【问题描述】:

我有this graph,虽然低于 0% 的数据足够重要,需要显示,但它太少见了,不能保证歪曲整个图表。有没有办法使比例低于 0% 时缩小/压缩,因此相同的距离会产生更大的百分比变化。 (我不想用断轴,因为可能还有其他数据

我已经看到this 是可行的方法,但是我想要的只是

【问题讨论】:

  • 将你的 yaxis 更改为 log 比例是我能想到的唯一方法!
  • @ThePredator 不能有负 y 值的对数刻度...
  • 如果有任何事情使问题变得更糟,因为其中包含大部分数据的部分被压缩到图表的顶部四分之一(并且数据中的细微之处不太清楚)编辑:以及@tom 所说的
  • @tom 是的!忘了!!
  • 是否可以将您的图像 this graph 嵌入到您的 OP 中,并添加您当前用于绘制图表的代码的最小示例。

标签: python matplotlib axis scaling


【解决方案1】:

我认为您唯一的选择确实是为您的轴创建自定义投影。从理论上讲,这应该不会太难,因为您想要一个线性比例,只是正负值的比例不同,但您仍然需要编写大量代码来创建相关类。

http://matplotlib.org/devel/add_new_projection.html 正如您已经链接的那样:http://matplotlib.org/examples/api/custom_scale_example.html

【讨论】:

    【解决方案2】:

    所以我找到了一个解决方法,但它有点软糖。 This is what it looks like.

    代码如下:

    fig, ax = plt.subplots()
    fig.canvas.set_window_title("Frame-to-frame pump-to-probe")
    plt.xlabel(r'$t/ps$')
    plt.ylabel(r'%')
    min = 0
    for i in range(len(ftf_PtmPlist)):
        if ftf_PtmPlist[i] < min:
            min = ftf_PtmPlist[i]
        if ftf_PtmPlist[i] < 0:
            ftf_PtmPlist[i] = 2*ftf_PtmPlist[i]/10.0
    for i in range(len(ftf_PttPlist)):
        if ftf_PttPlist[i] < min:
            min = ftf_PttPlist[i]
        if ftf_PttPlist[i] < 0:
            ftf_PttPlist[i] = 2*ftf_PttPlist[i]/10.0
    lables = [0,20,40,60,80,100]
    ymin = int(20*math.floor(min/100.0))
    for y in range(ymin,-19,20):
        lables.append(y)
    lables = sorted(lables)
    for i in range(-ymin/20):
        lables[i] = str(int(lables[i]*10/2.0))
    ax.set_yticklabels(lables)
    plt.plot(timelist,ftf_PtmPlist,'magenta', label='pump to main probe efficiency')
    plt.plot(timelist,ftf_PttPlist,'teal', label='pump to total probe efficiency')
    plt.plot(timelist,p_deplist,'orange', label='pump energy depletion')
    plt.gca().set_ylim(top=105)
    plt.gca().set_xlim(left=-1.0)
    plt.legend(bbox_to_anchor=(0.55, 0.17), loc=2, borderaxespad=0., prop={'size':10})
    

    首先,我将两个列表的所有小于 0 的值缩放 0.2 倍,这两个列表有可能出现负值,同时寻找总体上最负的值。然后我使用这个值来找到最负的刻度标签应该是什么(给定我正在使用的缩放比例)并创建一个新的刻度标签列表,以便负值显示为它们在我缩小它们之前的值。

    我知道这有点草率,但确实可以!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2023-03-09
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多