如何在Matplotlib中禁用对数图的次刻度?

32

这是一个简单的图表:

输入图片描述

1) 如何禁用刻度标记? 2) 如何减少刻度标记数量?

以下是示例代码:

from pylab import *
import numpy as np

x = [5e-05, 5e-06, 5e-07, 5e-08, 5e-09, 5e-10]
y = [-13, 14, 100, 120, 105, 93]

def myfunc(x,p):
    sl,yt,yb,ec=p    
    y = yb + (yt-yb)/(1+np.power(10, sl*(np.log10(x)-np.log10(ec))))
    return y

xp = np.power(10, np.linspace(np.log10(min(x)/10), np.log10(max(x)*10), 100))

pxp=myfunc(xp, [1,100,0,1e-6])
subplot(111,axisbg="#dfdfdf")
plt.plot(x, y, '.', xp, pxp, 'g-', linewidth=1)   
plt.xscale('log')

plt.grid(True,ls="-", linewidth=0.4, color="#ffffff", alpha=0.5)


plt.draw()
plt.show()

这将生成: 在此输入图像描述


更多控制:如何在 matplotlib 上仅打开 y 轴上的次刻度 - Herpes Free Engineer
3个回答

53
plt.minorticks_off()

关闭它们!

要更改它们的数量/位置,您可以使用 subsx 参数。像这样:

plt.xscale('log', subsx=[2, 3, 4, 5, 6, 7, 8, 9])

文档中得知:

subsx/subsy:在每个主要刻度之间放置子刻度的位置。应该是一个整数序列。例如,在log10缩放中:[2,3,4,5,6,7,8,9]

将在每个主要刻度之间放置8个对数间隔的小刻度。


2
这就是我无法很好地使用matplotlib文档的原因之一。一个没有分隔的巨大帮助文件。我仍然找不到这个函数的文档。非常感谢! - Danial Tz
@Danial Tz - 是啊,文档的数量太多了! - fraxel

34

调用plt.minorticks_off()将应用于当前坐标轴。(这个函数实际上是对gca().minorticks_off()的包装。)

您也可以以相同方式将其应用于单个轴:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()

ax.minorticks_off()

7
这个答案是唯一提到面向对象方法的。 - Mad Physicist

1
from pylab import *
import numpy as np


x = [5e-05, 5e-06, 5e-07, 5e-08, 5e-09, 5e-10]
y = [-13, 14, 100, 120, 105, 93]

def myfunc(x,p):
    sl,yt,yb,ec=p    
    y = yb + (yt-yb)/(1+np.power(10, sl*(np.log10(x)-np.log10(ec))))
    return y

xp = np.power(10, np.linspace(np.log10(min(x)/10), np.log10(max(x)*10), 100))

pxp=myfunc(xp, [1,100,0,1e-6])
ax=subplot(111,axisbg="#dfdfdf")
plt.plot(x, y, '.', xp, pxp, 'g-', linewidth=1)   
plt.xscale('log')
plt.grid(True,ls="-", linewidth=0.4, color="#ffffff", alpha=0.5)
plt.minorticks_off() # turns off minor ticks

plt.draw()
plt.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接