2009-03-15 34 views
8

'da bağımsız ölçekleme ile birden fazla örtüşen parsel var Şu anda aynı ekranda birden çok veri kümesini görüntülemek için matplotlib.pylab.plot'u birçok kez çağıran bir kod var ve Matplotlib, tüm grafikleri göz önünde bulundurarak her birini küresel min ve maks. Her arsa bağımsız olarak, belirli bir arsa min ve max için sormak için bir yol var mı?Matplotlib

cevap

3

Bunun için bir direkt destek, ama burada iki bağımsız dikey eksenleri illlustrates bir mailing list posting bazı kod: Bu, tek bir arsa oluşturmak nasıl

x=arange(10) 
y1=sin(x) 
y2=10*cos(x) 

rect=[0.1,0.1,0.8,0.8] 
a1=axes(rect) 
a1.yaxis.tick_left() 
plot(x,y1) 
ylabel('axis 1') 
xlabel('x') 

a2=axes(rect,frameon=False) 
a2.yaxis.tick_right() 
plot(x,y2) 
a2.yaxis.set_label_position('right') 
ylabel('axis 2') 
a2.set_xticks([]) 
+0

Özgün sorunun kapsamı 2'den çok ölçeklendirilmiş çizim yerine N için yapılmış gibi görünüyor - 3 veya daha fazla ile bunu denediğimde (ek eksen örnekleri için a2, a3 vb. Kullanarak) ölüyor. Bir kerede doğru şekilde ölçeklendirilmiş bir dizi veri kümesi – tehwalrus

0

(add_subplot (1,1,1)) ve y eksenlerindeki skalayı sınırlandırın.

myFig = figure() 
myPlot = self.figure.add_subplot(1,1,1) 
myPlot.plot([1,2,3,4,5], [5,4,3,2,1], '+r') 
myPlot.set_ylim(1,5) # Limit y-axes min 1, max 5 
0

Böyle bir şey gerek ama kopyalayıp etkileşimli kabuk içine yapıştırın ve ona bir göz alabilir bir örnek yaratmak istedik.

from numpy import arange 
from math import sin, cos 
import matplotlib.pyplot as plt 

x = arange(10) 
y1 = [sin(i) for i in x] 
y2 = [10*cos(i) for i in x] 

rect = [0.1, 0.1, 0.8, 0.8] 
a1 = plt.axes(rect) # Create subplot, rect = [left, bottom, width, height] in normalized (0, 1) units 
a1.yaxis.tick_left() # Use ticks only on left side of plot 
plt.plot(x, y1) 
plt.ylabel('axis 1') 
plt.xlabel('x') 

a2 = plt.axes(rect, frameon=False) # frameon, if False, suppress drawing the figure frame 
a2.yaxis.tick_right() 
plt.plot(x, y2) 
a2.yaxis.set_label_position('right') 
plt.ylabel('axis 2') 
a2.set_xticks([]) 

plt.show() 

Test ve piton 2.7.6, Numpy 1.8.1, matpotlib 1.3.1 çalışmaktadır: Burada çalışan bir çözüm gerektiren o sizin içindir. Onunla oynamaya devam edeceğim, üzerinde yer alan tarih parselleri ile çalışmak için düzgün bir yol arıyorum. Bulgularımı geri göndereceğim.

0

Tarih grafiklerini kullanarak bir çözüm, ve ikinci bir y ekseni eklemek için kısa bir el ile twinx() kullanarak en uygun çözüm olduğunu düşünüyorum. Dokümanlar

import matplotlib.pyplot as plt 
import matplotlib.dates as md 
import datetime 
import numpy 
numpy.random.seed(0) 
t = md.drange(datetime.datetime(2012, 11, 1), 
      datetime.datetime(2014, 4, 01), 
      datetime.timedelta(hours=1)) # takes start, end, delta 
x1 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 40000 
x2 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 0.002 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
fig.suptitle('a title', fontsize=14) 
fig.autofmt_xdate() 
plt.ylabel('axis 1') 
plt.xlabel('dates') 
ax2 = ax1.twinx() 
ax1.plot_date(t, x1, 'b-', alpha=.65) 
ax2.plot_date(t, x2, 'r-', alpha=.65) 
plt.ylabel('axis 2') 
plt.show() 

, matplotlib.pyplot.twinx (ax = Yok) x eksenini paylaşan bir ikinci eksenleri olun. Yeni eksenler balta bindirecektir (veya eksen Yok ise mevcut eksenler). Ax2 için keneler sağa yerleştirilecek ve ax2 örneği geri dönecektir. Diğer here.