2012-02-04 16 views
6

In generale, sto cercando di capire se lo matplotlib abbia effettivamente questa capacità.Plottaggio di un grafico x-y con assi "quattro"

Ho una velocità (su asse x) in mph vs potenza (sull'asse y) nel grafico kW, per cui ho bisogno di aggiungere rotazioni (in seconda asse y, a destra) e un altro velocità (sul secondo asse x, sulla cima) in km/h.

La potenza in kW è in correlazione con la velocità in mph, mentre le rotazioni sono in correlazione con Potenza e la seconda velocità (sul secondo asse x) è solo la prima velocità moltiplicata con un coefficiente di conversione.

Quindi, la mia domanda è: come è possibile tracciare un grafico x-y in matplotlib con due assi xe due y?

+0

@DNA - Beh, se si vuole si * potrebbe * fare rotazioni in correlazione con la velocità, ma non di solito è fatto. Le rotazioni sono sempre presentate in correlazione al potere. È la convenzione del settore, è così da decenni ormai. Quindi non è tecnicamente, indipendente, come dici tu, ma praticamente sì. – Rook

+0

Se ho capito bene, vuoi due assi X in modo da poter mostrare la velocità in unità diverse - OK. Volete due assi Y, in modo che possiate mostrare sia le rotazioni che la potenza - ma state assumendo che la potenza sia linearmente proporzionale alla velocità di rotazione? Questo non è vero in nessun sistema reale. – DNA

+0

Oh, immagino tu intenda potenza di uscita (di qualcosa?). OK, questo ha senso ora! – DNA

risposta

7

Cerchi twinx e twiny?

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

Le mie scuse, ho capito male.

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

Si potrebbe anche aver usato 'fig, (ax1, ax2) = plt.subplots (2)' invece di costruire 'fig',' ax1', 'ax2' separatamente. –

Problemi correlati