2013-07-16 4 views
3

두 개의 x 축과 하나의 y 축을 사용하여 특수한 플롯을 생성하려고합니다. 하단 X 축의 값이 증가하고 상단 X 축의 값이 감소합니다. x-y 쌍을 가지고 있는데 하나의 x 축 위에 y 축을 그리고 다른 축척의 축은 x' 개의 축을 표시하고자합니다 : (x' = f(x)).Matplotlib : 역 스케일링을 사용하는 두 개의 x 축으로 플롯 x/y 좌표

필자의 경우 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' 축 아래에 y를 그려 넣고 싶습니다. 만약 내가 잘못

는하지만 죄송합니다.

+0

이봐, 와우, 빠른 응답. 원칙적으로 최종 그래프는 이렇게 보일 것입니다. 유일한 문제는 다음과 같습니다 : x '= c/x, 반대의 관계 - 만약 x와 x를 라인 x2.cot (x/c, y, "--r") 두 함수가 더 이상 일치하지 않습니다. –

+0

물론 그들은 여전히 ​​동일한 y 데이터를 계획하고 있지만 완전히 다른 규모는 아닙니다. 따라서 그것은 여전히 ​​죄 기능이지만 x-> inf로 확장됩니다. x = 0에서도 문제가 발생합니다. 당신이 찾고있는 연필과 종이로 그려보십시오. – Greg

+1

나는 여기에 게시 된 대부분의 사람들이 함수가 그것의 매개 변수와 축에 의존하여 어떻게 작동 하는지를 알 수 있다고 생각한다. 나는 나 자신을 분명히하는 데 어려움을 겪고있다. 미안하다. 문제의 편집에서 언급했듯이, 나는 답을 발견했다. 가능한 한 빨리 게시하고 질문 내용을 설명합니다. –

관련 문제