2012-02-04 182 views
6

一般情況下,我想了解matplotlib是否真的有這個能力。Ploting與X-Y圖「四個一」軸

我有一個速度(上x軸)以mph與功率(Y軸)的曲線圖千瓦,向其中我需要添加旋轉(上第二y軸向右)和另一速度(上第二x軸,單位:公里向上頂部)/小時。以kW

功率與在英里每小時的速度的相關性,而旋轉與功率的相關性,和第二速度(上第二x軸)只是第一速度乘以皈依係數。

所以,我的問題是 - 我該如何在matplotlib中繪製兩個x和兩個y軸的x-y圖?

+0

@DNA - 嗯,如果你願意,你可以* *做旋轉與速度的相關性,但很少有人會這麼做。旋轉總是與功率相關聯。這是行業慣例,幾十年來一直如此。所以它在技術上並不是獨立的,就像你說的那樣,但實際上,是的。 – Rook 2012-02-04 12:09:44

+0

如果我理解正確,您需要兩個X軸,以便以不同的單位顯示速度 - 好的。您需要兩個Y軸,因此您可以顯示旋轉和功率 - 但是您是否假設功率與旋轉速度成線性比例?這在任何實際的系統中都是不正確的。 – DNA 2012-02-04 12:10:59

+0

哦,我想你是指輸出功率(某種東西?)。好吧,那現在確實有道理! – DNA 2012-02-04 12:12:08

回答

7

尋找twinxtwiny

import matplotlib.pyplot as plt 
x = range(1,21) 
plt.xlabel('1st X') 
plt.ylabel('1st Y') 
plt.plot(x,x,'r') # against 1st x, 1st y 
plt.axis([0,50,0,25]) 
plt.twinx() 
plt.ylabel('2nd Y') 
plt.plot(x,x,'g') # against 1st x, 2nd y 
plt.axis([0,50,0,20]) 
plt.twiny() 
plt.xlabel('2nd X') 
plt.plot(x,x,'b') # against 2nd x, 2nd y 
plt.axis([0,10,0,20]) 
plt.show() 

enter image description here

4

我的道歉,我誤會了。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.axes import Axes 

rect = 0.1, 0.1, 0.8, 0.8 

fig = plt.figure() 
ax1 = fig.add_axes(rect) 

t = np.arange(0.01, 10.0, 0.01) 

ax1.plot(t, np.exp(t), 'b-') # Put your speed/power plot here 
ax1.set_xlabel('Speed (mph)', color='b') 
ax1.set_ylabel('Power', color='b') 

ax2 = fig.add_axes(rect, frameon=False) 
ax2.yaxis.tick_right() 
ax2.yaxis.set_label_position('right') 
ax2.xaxis.tick_top() 
ax2.xaxis.set_label_position('top') 

ax2.plot(t, np.sin(2*np.pi*t), 'r-') # Put your speed/rotation plot here 
ax2.set_xlabel('Speed (kmph)', color='r') 
ax2.set_ylabel('Rotations', color='r') 

plt.show() 

enter image description here

+0

還也可以使用'無花果,(AX1,AX2)= plt.subplots(2)'的代替分別構建'fig','ax1','ax2'。 – 2012-02-07 04:35:59