Tôi muốn tạo các ô có nhãn trục ở cả đỉnh và đáy (hoặc trái và phải) của các cấu hình con của tôi. Các bài đăng khác có chi tiết cách tôi có thể di chuyển các nhãn trục (ví dụ: here).Số mũ trục di chuyển trong matplotlib
Tuy nhiên, tôi đang gặp sự cố với số mũ từ ký hiệu khoa học. Một tối thiểu-ish dụ làm việc minh họa các vấn đề tốt nhất:
import numpy as np
import matplotlib.pyplot as plt
vars = 4
length = 10000
array = np.zeros((length, vars))
array[:,0] = np.random.normal(0.0, 1.0e6, (length))
array[:,1] = 1.0e6 * np.tanh(array[:,0]/1.0e6)
array[:,2] = 1.0e5 * np.random.random((length))
array[:,3] = array[:,1] * array[:,2]/1.0e5
labels = ["var1", "var2", "var3", "var4"]
plt.figure(figsize=(15, 15))
for i in range(vars):
for j in range(0, vars):
ax = plt.subplot(vars, vars, vars*i + j + 1)
ax.xaxis.get_major_formatter().set_powerlimits((-2, 3))
ax.yaxis.get_major_formatter().set_powerlimits((-2, 3))
ax.locator_params(nbins=5)
if (j == i):
weights = np.ones_like(array[:,i])/len(array[:,i])
ax.hist(array[:,i], 25, weights=weights)
else:
ax.plot(array[:,j], array[:,i], '.', markersize=0.5)
if ((j == 0) & (i % 2 == 0)):
ax.yaxis.tick_left()
ax.xaxis.set_ticks_position("both")
ax.yaxis.set_label_position("left")
ax.get_yaxis().get_offset_text().offset_text_position = "left"
ax.set_ylabel(labels[i])
elif ((j == vars - 1) & (i % 2 == 1)):
ax.yaxis.tick_right()
ax.xaxis.set_ticks_position("both")
ax.yaxis.set_label_position("right")
ax.get_yaxis().get_offset_text().offset_text_position = "right"
ax.set_ylabel(labels[i])
else:
ax.get_yaxis().set_ticklabels([])
if ((i == 0) & (j % 2 == 1)):
ax.xaxis.tick_top()
ax.xaxis.set_ticks_position("both")
ax.xaxis.set_label_position("top")
ax.get_xaxis().get_offset_text().offset_text_position = "top"
ax.set_xlabel(labels[j])
elif ((i == vars - 1) & (j % 2 == 0)):
ax.xaxis.tick_bottom()
ax.xaxis.set_ticks_position("both")
ax.xaxis.set_label_position("bottom")
ax.get_xaxis().get_offset_text().offset_text_position = "bottom"
ax.set_xlabel(labels[j])
else:
ax.get_xaxis().set_ticklabels([])
plt.savefig("test.png")
này tạo ra:
Như bạn có thể thấy, hàm mũ đã không di chuyển với phần còn lại của bọ ve. Tôi cố gắng
ax.get_yaxis().get_offset_text().offset_text_position = "right"
và
ax.get_xaxis().get_offset_text().offset_text_position = "top"
nhưng họ dường như không có hiệu lực.
Đối với giá trị của nó, "văn bản bù trừ" là giá trị bù trừ (ví dụ: '+ 1e3') không phải là số nhân (' 1e3'), đó là lý do tại sao 'get_offset_text(). Offset_text_position' không có hiệu lực. –
Ah, điều đó có ý nghĩa, thực sự! Tôi đã giả định rằng "bù đắp" được gọi là vị trí của văn bản, không phải là nội dung thực tế. Vậy bạn có biết tôi nên làm gì không? –
Bỏ qua những gì tôi đã nói về sự khác nhau giữa bù đắp và số nhân (mặc dù có một dấu hiệu chung với điều đó, quá, ví dụ: http://stackoverflow.com/questions/28371674/prevent-scientific-notation-in-matplotlib-pyplot/28373421 # 28373421) Gốc của vấn đề của bạn là bạn muốn 'ax.xaxis.offset_text_position =" top "' thay vì 'ax.xaxis.get_offset_text(). Offset_text_position() =" top "'. –