将辅助数据绘制为第二个y轴上的刻度

时间:2017-04-24 06:57:47

标签: python matplotlib plot

我想绘制二次数据,而不是绘图,而是绘制y轴。 我试图在图中说清楚。 首先,我将A与C进行了对比。

现在我想绘制A对B,但不是作为一条线,而是与A一致的数字。 在这种情况下,A是深度。在深度上有两个测量B和C.我已经将A和C之间的关系绘制成线图。现在我想将A和B的关系作为一种表添加到辅助y轴中。 注意:我不需要辅助y轴!我需要将B(A = 2),B(A = 0),B(A = -2)等的值表示为第二y轴中的数字。因此,只有A的刻度必须在第二轴上得到数字B(A)。

          0 -              +   - 0
         -1 -             +    - 0.5
         -2 -            +     - 0.62
         -3 -           +      - 2.1
       A -4 -          +       - 1.5  B
         -5 -       +++        - 1.9
         -6 -     +            - 2.8
         -7 -  +               - 3.0
         -8 - +                - 4.1
            --------------------
                       C

[实施例] [1]

我已经实现了Stefan的示例,但是使用了列表而不是函数。 (dpt[0] = a[0] = c[0]dpt[22] = a[22] = c[22]等) 我的列表很长,有很多小数。因此,我的刻度值与列表中的数据不完全对应。我找到了最接近的值并将数字四舍五入。对于那些感兴趣的人,这对我有用:

    ax2 = ax1.twinx() 
    depth = [round(x, 1) for x in dpt]  # In my case the original list used 5 decimals and next line ‘difr’ has 1 decimal.
    def mapAtoB(A):
        difr= min(depth, key=lambda x: abs(x - A))   #Find the value in ‘depth’ which is closest to the tick-value A.
        B = round(a[depth.index(difr)],2)            #The index value (difr==depth) is plugged into the list I want on the y-axis. The obtained value needed to be rounded as well. 
        return B

    ax2.plot(c, dpt, alpha=0)
    ticks = ticker.FuncFormatter(lambda dpt, pos: '{0:g}'.format(mapAtoB(dpt)))
    ax2.yaxis.set_major_formatter(ticks)

我希望我的榜样足够清楚!

1 个答案:

答案 0 :(得分:1)

由于您可能知道var d = new Date(); var n = d.getTime(); // n == time in milliseconds since 1st Jan 1970 var weekday = d.GetDay() // 0...6 ; 0 == Sunday, 6 = Saturday, 4 = Thursday var numDaysToNextThursday = weekday >= 4 ? 7 - (weekday-4) : 4 - weekday; var nextThursday_msecs = n + numDaysToNextThursday * 24 * 60 * 60 * 1000; var theDate = new Date(nextThursday_msecs); // this is the date 如何映射到A,只需将y-ticks从A转换为y-ticks of B,绘制两者并隐藏B的图。

示例:

B

example plot