Tôi có mã rất đơn giản này để vẽ danh sách 100 điểm (10,10) tất cả đều giống hệt nhau. Thật không may, tôi nhận được cảnh báo và một biểu đồ trống.
Mã của tôi:
nhập matplotlib.pyplot dưới dạng plt
danh sách của tôi = danh sách()
cho tôi trong phạm vi (100):
mylist.append(10)
cốt truyện chắc chắn():
plt.subplot(111)
plt.hexbin(mylist,mylist,bins='log', cmap=plt.cm.YlOrRd_r)
plt.axis([0,50,0,50])
plt.show()
kịch bản()
cảnh báo:
- Có phải là không thể vào được không?
thùng lục giác
Vẽ cùng một dữ liệu trong ?
- Tôi đã làm gì sai à?
Tình huống cụ thể của tôi:
Tôi biết đây có thể là một câu hỏi lạ, nhưng chương trình của tôi đang vẽ một số lượng lớn các điểm (x,y) (trong thùng lục giác
), đôi khi những điểm này có thể giống nhau.
Nếu tôi thay đổi đoạn mã trên một chút và đặt vào danh sách[i]
Đặt các điểm khác nhau vào (x, y) (i là bất kỳ chỉ mục nào), mã sẽ chạy tốt và vẽ dữ liệu.
Vấn đề là nó cố gắng thực hiện điều này bằng cách xem xét mức tối đa và tối thiểu x
Và y
giá trị để đoán giới hạn của lưới và tạo kích thước bước sx = (x_max - x_min)/num_x_bins
Trong trường hợp đầu vào này, nó hoàn toàn bằng 0. Giải pháp là sử dụng phạm vi
Từ khóa cho mã biết mảng lớn như thế nào.
danh sách của tôi = danh sách()
cho tôi trong phạm vi (100):
mylist.append(10)
cốt truyện chắc chắn():
plt.subplot(111)
plt.hexbin(mylist,mylist,bins='log', cmap=plt.cm.YlOrRd_r, Range=[0, 50, 0, 50])
plt.axis([0,50,0,50])
plt.show()
kịch bản()
Có một PR có thể giải quyết vấn đề này (nên ở mức 1.4 https://github.com/matplotlib/matplotlib/pull/3038 ở giữa)
Trong lúc chờ đợi, tôi sẽ sử dụng một cái gì đó như thế này (chưa được kiểm tra, có thể có một số lỗi nhỏ ở đây):
nhập matplotlib.transfroms dưới dạng mtrans
def safe_hexbin(ax, x, y, *args, **kwargs):
nếu 'mức độ' không tính bằng kwargs:
xmin = np.amin(x)
xmax = np.amax(x)
ymin = np.amin(y)
ymax = np.amax(y)
# để tránh các vấn đề với dữ liệu số ít, hãy mở rộng các cặp tối thiểu/tối đa
xmin, xmax = mtrans.nonsingular(xmin, xmax, Expander=0.1)
ymin, ymax = mtrans.nonsingular(ymin, ymax, Expander=0.1)
kwargs['extent'] = (xmin, xmax, ymin, ymax)
trả về ax.hexbin(x, y, *args, **kwargs)
safe_hexbin(plt.gca(), x, y, ...)
Tôi là một lập trình viên xuất sắc, rất giỏi!