2012-02-04 139 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