2013-07-16 264 views
3

我想創建一個具有兩個x軸和一個y軸的特殊繪圖。底部X軸的值增加,頂部X軸的值減小。我有一個x-y對,爲此我想繪製y軸上的一個x軸和頂部x'不同比例軸:(x' = f(x))Matplotlib:繪製x/y座標,帶兩個具有倒數標度的x軸

在我的情況下,xx'之間的轉換是x' = c/x,其中c是一個常數。我找到一個例子here,它處理這種轉換。不幸的是,這個例子不適用於我(沒有錯誤消息,輸出只是沒有轉換)。

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

有誰知道一個方便的方式與matplotlib做到這一點?

編輯: 我發現計算器(https://stackoverflow.com/a/10517481/2586950)的答案,幫助我得到想要的情節。只要我可以發佈圖片(由於聲望限制),我會在這裏發佈答案,如果任何人有興趣。

回答

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.

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

我猜測這是你的

是什麼意思我有一個xy對,爲此我想在一個x軸上繪製y,並在一個x'軸下繪製不同的縮放圖。

但是,如果我錯了,我很抱歉。

+0

嘿,哇,快回答。原則上最終圖應該看起來像這樣,唯一的問題是:x'= c/x,它是一個反比關係 - 如果我通過在ax2.plot(x/c,y, 「--r」)這兩個函數不再一致。 –

+0

當然,他們不是在繪製相同的y數據,而是完全不同的規模。所以它仍然是一個sin函數,但是延伸爲x-> inf。你在x = 0時也會遇到問題。嘗試用鉛筆和紙畫出你正在尋找的東西。 – Greg

+1

我認爲可以安全地說,大多數在這裏發佈的人都知道函數如何依賴於其參數並將其繪製在軸上。我很難讓自己清楚,對不起。正如在編輯中提到的那樣,我找到了答案。我會盡快發佈,澄清問題。 –

相關問題