回答
您可以使用次要記號來產生額外的記號。他們的位置可以使用FixedLocator
來指定。然後您可以通過獲取相應的rcParams來調整自己的風格以匹配主要的剔號。
import matplotlib.pyplot as plt
import matplotlib.ticker
plt.plot([0,5],[1,1])
locs= [3.95,4.05] + [4.9,4.95,5.05,5.1]
plt.gca().xaxis.set_minor_locator(matplotlib.ticker.FixedLocator(locs))
plt.gca().tick_params('x', length=plt.rcParams["xtick.major.size"],
width=plt.rcParams["xtick.major.width"], which='minor')
plt.show()
與上述的問題是,它是規模相關的,即,對於不同的比例例如從4.8到5.2,蜱會比預期的要遠得多。
爲了克服這個問題,我們可以對
FixedLocator
進行子類化並使其返回位置,這些位置通過某些單位(而不是數據座標)偏離所需位置。
import matplotlib.pyplot as plt
import matplotlib.ticker
import matplotlib.transforms
import numpy as np
class MultiTicks(matplotlib.ticker.FixedLocator):
def __init__(self, locs, nticks, space=3, ax=None):
"""
@locs: list of locations where multiple ticks should be shown
@nticks: list of number of ticks per location specified in locs
@space: space between ticks in pixels
"""
if not ax:
self.ax = plt.gca()
else:
self.ax = ax
self.locs = np.asarray(locs)
self.nticks = np.asarray(nticks).astype(int)
self.nbins = None
self.space = space
def tick_values(self, vmin, vmax):
t = self.ax.transData.transform
it = self.ax.transData.inverted().transform
pos = []
for i,l in enumerate(self.locs):
x = t((l,0))[0]
p = np.arange(0,self.nticks[i])//2+1
for k,j in enumerate(p):
f = (k%2)+((k+1)%2)*(-1)
pos.append(it((x + f*j*self.space, 0))[0])
return np.array(pos)
# test it:
plt.plot([0,5],[1,1])
plt.gca().xaxis.set_minor_locator(MultiTicks(locs=[4,5],nticks=[2,4]))
plt.gca().tick_params('x', length=plt.rcParams["xtick.major.size"],
width=plt.rcParams["xtick.major.width"], which='minor')
plt.show()
在自定義定位器,MultiTicks(locs=[4,5],nticks=[2,4])
,我們指定一些額外的蜱應出現的位置初始化(在圖4和5)和扁蝨的相應數量(2個蜱在4,4蜱在5) 。我們還可以使用參數space
來指定這些刻度應該相互隔開的像素數。
+1,謝謝,我能以某種方式在屏幕空間中做到這一點嗎?因爲酗酒我會有縮放問題嗎? – Yola
我擔心你會問這個問題。 :-)這真的不容易。我會盡力找到一個解決方案。 – ImportanceOfBeingErnest
很好,那確實工作得很好。它可能只比預期的多一點。 – ImportanceOfBeingErnest
- 1. 在一個地方的幾個對象
- 2. Python Tkinter - 將幾個條目放在一個內
- 3. Jqplot只顯示幾個x軸刻度
- 4. 將傳說放在一個地方的一個小區
- 5. 最好的地方,放一個xml與幾個項目的解決方案
- 6. 如何將兩個組件放在同一個地方
- 7. 將兩個div放在一個下方
- 8. 把.lower()放在一個地方還是另一個地方有區別嗎?
- 9. 試圖實現一個Python裝飾器,被困在幾個地方
- 10. 的Python在同一地塊的幾個地塊
- 11. 將幾個div放在一個父div中
- 12. 將兩個y軸刻度添加到同一個圖表
- 13. 將兩個nparray放在一起python
- 14. 把幾個小的剛度矩陣放在一起
- 15. AngularJS。在幾個地方使用模板
- 16. 同一軸上的兩個刻度
- 17. 訪問計數器一個刻度
- 18. 更新變量爲下一個刻度
- 19. 將DIV放在同一個地方,切換它們
- 20. CSS - 將div始終放在同一個地方
- 21. 如何讓WPF Canvas將TextBlock和Polygon放在同一個地方?
- 22. 將一個div放置在左下方
- 23. 用Python刻錄幾個獨特站點的聯繫信息
- 24. 使用相同的角度控制器在同一頁上的幾個地方
- 25. 將值從一個地方傳遞到另一個地方
- 26. 如何在Python中隱藏刻度標籤但保留刻度?
- 27. 定義幾個class @Deprecated立刻
- 28. 如何將文件一個接一個地放在flume spooldir中?
- 29. Python:如何在一個時刻製作多個HTTP POST查詢?
- 30. 將一個字符串從一個地方複製到另一個地方
@ImportanceOfBeingErnest我的意思是不是一個小的垂直段,但兩個或三個或更多。 – Yola