2010-09-05 34 views
23

Tôi có hai vị trí con trong một hình. Tôi muốn thiết lập các trục của subplot thứ hai sao cho nó có cùng giới hạn như subplot đầu tiên (thay đổi tùy thuộc vào giá trị được vẽ). Ai đó có thể vui lòng giúp tôi? Đây là mã:đặt giới hạn trục trong matplotlib pyplot

import matplotlib.pyplot as plt 

plt.figure(1, figsize = (10, 20)) 
## First subplot: Mean value in each period (mean over replications) 
plt.subplot(211, axisbg = 'w') 
plt.plot(time,meanVector[0:xMax], color = '#340B8C', 
     marker = 'x', ms = 4, mec = '#87051B', markevery = (asp, 
                  2*asp)) 
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45) 
plt.axhline(y = Results[0], color = '#299967', ls = '--') 
plt.ylabel('Mean Value') 
plt.xlabel('Time') 
plt.grid(True) 


## Second subplot: moving average for determining warm-up period 
## (Welch method) 
plt.subplot(212)  
plt.plot(time[0:len(yBarWvector)],yBarWvector, color = '#340B8C') 
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45) 
plt.ylabel('yBarW') 
plt.xlabel('Time') 
plt.xlim((0, T)) 
plt.grid(True) 

Trong phụ đề thứ hai, đối số cho hàm plt.ylim() là gì? Tôi cố gắng xác định

ymin, ymax = plt.ylim() 

trong âm mưu phụ đầu tiên và sau đó thiết lập

plt.ylim((ymin,ymax)) 

trong âm mưu phụ thứ hai. Nhưng điều đó không hiệu quả, bởi vì giá trị trả về ymax là giá trị lớn nhất được thực hiện bởi biến số y (giá trị trung bình) trong subplot đầu tiên chứ không phải giới hạn trên của trục y.

Xin cảm ơn trước.

Trả lời

12

Tôi đã tìm kiếm thêm một số thông tin trên trang web matplotlib và tìm cách để thực hiện. Nếu có ai có cách tốt hơn, hãy cho tôi biết.

Trong subplot đầu tiên thay thế plt.subplot(211, axisbg = 'w') bởi ax1 = plt.subplot(211, axisbg = 'w') . Sau đó, trong subplot thứ hai, thêm các đối số sharex = ax1sharey = ax1 vào lệnh subplot. Tức là, lệnh subplot thứ hai giờ sẽ trông:

plt.subplot(212, sharex = ax1, sharey = ax1) 

Điều này giải quyết được vấn đề. Nhưng nếu có những lựa chọn thay thế tốt hơn, xin vui lòng cho tôi biết.

13

Giải pháp được đề xuất của bạn sẽ hoạt động, đặc biệt nếu các ô tương tác (chúng sẽ được đồng bộ hóa nếu có thay đổi).

Thay vào đó, bạn có thể đặt thủ công giới hạn y của trục thứ hai để khớp với giới hạn y của trục thứ nhất. Ví dụ:

from pylab import * 

x = arange(0.0, 2.0, 0.01) 
y1 = 3*sin(2*pi*x) 
y2 = sin(2*pi*x) 

figure() 
ax1 = subplot(211) 
plot(x, y1, 'b') 

subplot(212) 
plot(x, y2, 'g') 
ylim(ax1.get_ylim())  # set y-limit to match first axis 

show() 

alt text

Các vấn đề liên quan