Tôi cần một hình trong matplotlib trong đó cả hai trục đều có cùng chiều dài. Đối với điều này tôi đang sử dụng tùy chọn 'bình đẳng'. Trong hầu hết các trường hợp, nó hoạt động khá tốt và tôi nhận được kết quả mong đợi (xem hình 1), nhưng khi các giá trị của trục y cao hơn nhiều so với x, hình này cho thấy một hành vi không mong muốn (xem hình 2). Có ai biết hành vi này của matplotlib?matplotlib axes.set_aspect ('bằng') không hoạt động như mong đợi
Danke, Jörg
host = SubplotHost(fig, 111)
try:
min_x_val = min(x for x in self.x_values if x is not None)
max_x_val = max(self.x_values)
except ValueError:
return
max_y_val = list()
for n, evaluator in enumerate(self.cleaned_evaluators):
max_y_val.append(max(self.y_values[n]))
# axis settings
host.axis['left'].label.set_fontsize('small')
host.axis['left'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].label.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_fontsize('small')
host.axis['bottom'].major_ticklabels.set_rotation(0)
host.set_ylabel(y_label)
host.set_xlabel(x_label)
host.set_xlim(0, max_x_val)
host.set_ylim(0, max_y_val)
host.minorticks_on()
host.toggle_axisline(False)
host.axes.set_aspect('equal')
host.grid(True, alpha=0.4)
return fig
Hình 1:
Hình 2:
Thực tế nó hoạt động như mong đợi.'set_aspect ('bằng') 'có nghĩa là một đơn vị trên trục x có cùng độ dài với một đơn vị trên y-axis, như trong Hình 1. – hooy
Bạn có thể chuyển một giá trị số tới 'set_aspect', xem [documentation] (http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_aspect). Lấy thương của 'x' và' y' bạn sẽ có thể mở rộng các trục sao cho chúng có cùng chiều dài. – Bakuriu
Lưu ý rằng ví dụ đầu tiên của bạn (Hình 1) không thực sự là hình vuông; nó rộng khoảng 430 pixel, cao 400 điểm ảnh. Điều này phù hợp với các phạm vi dữ liệu hơi khác nhau cho hai trục (0 đến 3,5 đối với trục x, 0 đến 3,25 cho trục y), vì 'set_aspect ('bằng')' đang buộc cùng một tỷ lệ dữ liệu (dữ liệu giá trị cho mỗi pixel) cho cả hai trục. –