Chỉ cần chỉ định basex=2
hoặc basey=2
.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.set_xscale('log', basex=2)
ax.set_yscale('log', basey=2)
ax.plot(range(1024))
plt.show()
Đối với hành vi zero-crossing, những gì bạn đang đề cập đến là một "Symmetric Log" cốt truyện (còn gọi là "symlog"). Đối với bất cứ điều gì nó có giá trị, dữ liệu không được lọc ra, nó chỉ là một âm mưu tuyến tính gần 0 và một lô đăng nhập ở khắp mọi nơi khác. Đó là quy mô thay đổi, không phải dữ liệu.
Thông thường bạn chỉ cần thực hiện ax.set_xscale('symlog', basex=2)
nhưng sử dụng cơ sở không phải 10 dường như lỗi tại thời điểm này cho các ô giao diện.
Chỉnh sửa: Heh! Lỗi này có vẻ là do lỗi cổ điển: sử dụng đối số mặc định có thể thay đổi.
Tôi đã gửi báo cáo lỗi, nhưng nếu bạn muốn sửa lỗi, bạn cần chỉnh sửa nhỏ thành lib/matplotlib/ticker.py
, quanh dòng 1376, theo phương thức __init__
của SymmetricalLogLocator
.
Thay vì
def __init__(self, transform, subs=[1.0]):
self._transform = transform
self._subs = subs
...
Thay đổi nó một cái gì đó tương tự như:
def __init__(self, transform, subs=None):
self._transform = transform
if subs is None:
self._subs = [1.0]
else:
self._subs = subs
....
Với sự thay đổi được thực hiện, nó cư xử như mong đợi ...
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.set_xscale('symlog', basex=2)
ax.set_yscale('symlog', basey=2)
x = np.arange(-1024, 1024)
ax.plot(x, x)
plt.show()
Logs được chỉ định cho các đối số tích cực. Điều này giữ không phụ thuộc vào cơ sở, nghĩa là nó giữ cho các log tự nhiên, log base 10, log base 2 vv Do đó bạn không thể vẽ một cái gì đó có số không trong một logscale, trừ khi bạn làm điều gì đó với các giá trị zero này. –
Sử dụng câu trả lời từ câu hỏi đó nhưng lọc ra các giá trị y bằng 0 và các giá trị x tương ứng của chúng trước tiên (đó là cách chúng ta bỏ qua chúng). –
Một cách thanh lịch để làm điều đó trong numpy là gì? Bộ lọc làm phức tạp mã kể từ bây giờ tôi phải có một bản sao của mảng chưa lọc, và một bản sao được lọc ... – user248237dfsf