我想繪制以下資料,但似乎無法讓 matplotlib 顯示更多軸標簽。
import matplotlib.pyplot as plt
from matplotlib.ticker import LogLocator, LogFormatterMathtext
fig, ax = plt.subplots()
ax.set_yscale("log")
ax.get_yaxis().set_major_locator(LogLocator(subs=(1,2,3,4,5,6,7,8,9,)))
ax.get_yaxis().set_major_formatter(LogFormatterMathtext(base=10))
ax.plot([1,2,3,4,5], [4500, 4000, 1000, 500, 450])
plt.show()
結果:

預期結果將具有諸如 2 × 103、3 × 103 等標簽而沒有偏移。
uj5u.com熱心網友回復:
所以首先,你顯然不想要LogFormatterMathtext. 如果您按照自己的方式使用“每個刻度一個標簽”,那將產生這種影像(我們稍后會談到)。

你想要的是LogFormatterSciNotation. (LogFormatter單獨標記“500”、“600”、“700”、“800”、“900”、“1000”、“2000”、“3000”等;LogFormatterExponent:2.7、2.78、2.85、2.9、2.95, 3, 3.3, 3.48, ... ; 你選擇的那個,同樣的東西,但是有 10? : 102·?, 102·??, 102·??, ... ;LogFormatterSciNotation是一個標記為 5×102, 6×102, 7×102,8×102,9×102, 103, 2×103, ...)
其次,您必須區分創建刻度(您使用 完成此LogLocator操作),并確定標簽在哪里。蜱蟲并非全部貼上標簽。甚至是主要的蜱蟲。這取決于格式化程式。大多數格式化程式都有默認設定,使它們為主要刻度顯示比次要刻度更多的標簽。然而,它不是“全部”和“無”。尤其是給LogFormatter*
所以, 的一個引數LogFormatter*是labelOnlyBase。你想要這個False。否則,僅標記 10 的冪。所以在你的情況下只有“103”。
這還不夠。因為即使 LogFormatter 不反對標記非 10 次方,它也有一些關于必須標記多少刻度的標準,以避免太多的標簽密度。因此,這不僅取決于格式化程式,還取決于 y 軸的范圍。這是minor_thresholds引數。你給它一對閾值。理解起來相當復雜。但是它們越高,標記的刻度越多(并非完全如此。為了更準確,但仍然粗略地說,閾值之一是標記所有內容的閾值:“如果您的刻度少于a那時,請標記它們全部。另一種是僅標記蜱的子集(由其他引數控制)的標記。在兩者上,僅標記堿基的功率)。
所以,大家一起
import matplotlib.pyplot as plt
from matplotlib.ticker import LogLocator, LogFormatterSciNotation
fig, ax = plt.subplots()
ax.set_yscale("log")
ax.get_yaxis().set_major_locator(LogLocator(subs=(1,2,3,4,5,6,7,8,9,)))
ax.get_yaxis().set_major_formatter(LogFormatterSciNotation(base=10, minor_thresholds=(1000,1000), labelOnlyBase=False))
ax.plot([1,2,3,4,5], [4500, 4000, 1000, 500, 450])
plt.show()
(1000,1000)這里是一個“不要試圖理解,只是輸入非常高的值”引數:D。(np.inf, np.inf)如果匯入了 numpy,我會使用。但這會多出 1 行。
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532767.html
