Matplotlib:用两个x轴绘制x / y坐标,并进行反比例缩放

时间:2013-07-16 11:25:51

标签: python numpy matplotlib

我想用两个x轴和一个y轴创建一个特殊的图。底部X轴的值增加,顶部X轴的值减小。我有一个x-y对,我想在其中绘制y在一个x轴和顶部x'轴上绘制不同比例:(x' = f(x))

在我的情况下,xx'之间的转换为x' = c/x,其中c是常量。我找到了一个例子here,它处理这种转换。不幸的是,这个例子对我不起作用(没有错误信息,输出只是没有转换)。

我正在使用python 3.3matplotlib 1.3.0rc4 (numpy 1.7.1)

有人知道使用matplotlib做一个方便的方法吗?

修改 我在stackoverflow(https://stackoverflow.com/a/10517481/2586950)上找到了一个答案,帮助我找到了理想的情节。只要我发布图片(由于信誉限制),我会在这里发布答案,如果有人有兴趣的话。

2 个答案:

答案 0 :(得分:1)

我不确定这是否是您正在寻找的东西,但无论如何它都在这里:

import pylab as py
x = py.linspace(0,10)
y = py.sin(x)
c = 2.0

# First plot
ax1 = py.subplot(111)
ax1.plot(x,y , "k")
ax1.set_xlabel("x")

# Second plot
ax2 = ax1.twiny()
ax2.plot(x / c, y, "--r")
ax2.set_xlabel("x'", color='r')
for tl in ax2.get_xticklabels():
    tl.set_color('r')

example

我猜这是你的意思

  

我有一对x-y对,我想在一个x轴上和一个x'轴上绘制不同的缩放比例。

但如果我错了,我道歉。

答案 1 :(得分:1)

以下代码的输出对我来说是令人满意的 - 除非有更方便的方法,我坚持下去。

import matplotlib.pyplot as plt
import numpy as np

plt.plot([1,2,5,4])
ax1 = plt.gca()
ax2 = ax1.twiny()

new_tick_locations = np.array([.1, .3, .5, .7,.9]) # Choosing the new tick locations
inv = ax1.transData.inverted()
x = []

for each in new_tick_locations:
    print(each)
    a = inv.transform(ax1.transAxes.transform([each,1])) # Convert axes-x-coordinates to data-x-coordinates
    x.append(a[0])

c = 2
x = np.array(x)
def tick_function(X):
    V =  c/X
    return ["%.1f" % z for z in V]
ax2.set_xticks(new_tick_locations) # Set tick-positions on the second x-axes
ax2.set_xticklabels(tick_function(x)) # Convert the Data-x-coordinates of the first x-axes to the Desired x', with the tick_function(X)

A possible way to get to the desired plot.