Python 如何更改Minortick的数量?

Python 如何更改Minortick的数量?,python,matplotlib,Python,Matplotlib,我想使用PLT.MATSHOW创建这样的图(),它带有标记的majorticks(范围为0到20,步长=1)、未标记的minorticks(范围为0.5到18.5,步长=1)和minorgrids 这是我的代码,但有点问题(它画的线比我需要的多,我不知道如何更改minortick的数量): 我应该如何重写它来解决我的问题? 谢谢你的帮助!(:我相信这解决了你的问题 import numpy as np import numpy.random as random import matplotlib

我想使用PLT.MATSHOW创建这样的图(),它带有标记的majorticks(范围为0到20,步长=1)、未标记的minorticks(范围为0.5到18.5,步长=1)和minorgrids

这是我的代码,但有点问题(它画的线比我需要的多,我不知道如何更改minortick的数量):

我应该如何重写它来解决我的问题?
谢谢你的帮助!(:

我相信这解决了你的问题

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt

S0 = np.ones([20,20], int)
S = np.copy(S0)
Mx = np.shape(S)[0]
My = np.shape(S)[1]

for x in range(Mx):
    for y in range(My):
            S[x,y]=2*random.randint(2)-1

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

ax.matshow(S,alpha=0.75, cmap="summer", interpolation="none")

ax.set_xticks([i+0.5 for i in range(Mx)])
ax.set_yticks([i+0.5 for i in range(My)])

ax.set_xticklabels(range(Mx))
ax.set_yticklabels(range(My))

#plt.grid(which = 'minor', ls = '-')
plt.grid(which = 'major', ls = '-')

plt.minorticks_on()
plt.show()
我所做的更改有三个方面:第一个是用主网格线替换网格,第二个是将记号和相应的标签移动了0.5,以便它们与边界匹配。第三个是删除
matshow
命令中的插值。这都给出了以下内容:


我终于找到了解决问题的方法,得到了我想要的。谢谢你,威尔,谢谢你的帮助! 如果其他人知道如何使用不同的方法获得最终结果,如果您让我知道,我将不胜感激

以下是新代码:

import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, AutoMinorLocator

S0 = np.ones([20,20], int)
S = np.copy(S0)
Mx = np.shape(S)[0]
My = np.shape(S)[1]

for x in range(Mx):
    for y in range(My):
            S[x,y]=2*random.randint(2)-1

fig = plt.figure()
ax = fig.add_subplot(111)
ax.matshow(S, alpha = .75, cmap = "summer")

ax.set_xticklabels(range(-1,Mx))
ax.set_yticklabels(range(-1,My))

ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.yaxis.set_minor_locator(AutoMinorLocator(2))
ax.xaxis.grid(True,'minor', lw = 1.5, ls = '-')
ax.yaxis.grid(True,'minor', lw = 1.5, ls = '-')

plt.show()

需要比“有问题”更具体一些-到底发生了什么?这是问题所在?我相信他希望代码绘制一个黑色网格,它创建的正方形随机填充绿色或黄色。问题是,它反而绘制了其他几行。这似乎是因为误解了什么是主刻度线和次刻度线。问题是它绘制了一个黑色网格使用步骤0.2而不是步骤1的其他几行(minorlines或minortricks)。感谢您的帮助。现在好多了。(:但是为什么两种颜色之间的线条和边框不一致(有时)?你的意思是什么?你的意思是这条线在页面下方看起来不一致吗?我猜这是一种亚像素效果;像素不是一般的RGB;绿色是(关-开-关),黄色是(开-关),黑色是(关-关)。因此,当黑色与绿色相邻时,它看起来会更黑。或者它可能只是对角色感知的一种错觉。或者它可能是一种抗锯齿的东西。有些方块内部是完全黄色的,有些-是完全绿色的,但也有一些方块底部包含大约5%的oposite颜色(例如,绿色正方形底部有黄色条纹)。我的版本中没有这个问题;我给出的第一个答案有这个问题,随后我通过在
matshow()中添加
interpolation=“none”
对其进行了更新
。这很奇怪,我完全尝试了你在这里提到的解决方案,但它对我不起作用,但我的解决方案对我有效,而对你无效。你使用的是matplotlib的哪个版本?我安装了matplotlib-1.4.2.win32-py2.7版本!而且它确实很奇怪,因为我最近才开始学习Python。主要问题是我知道我想要什么,但我不知道怎么做,甚至不知道怎么解释
import numpy as np
import numpy.random as random
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator, AutoMinorLocator

S0 = np.ones([20,20], int)
S = np.copy(S0)
Mx = np.shape(S)[0]
My = np.shape(S)[1]

for x in range(Mx):
    for y in range(My):
            S[x,y]=2*random.randint(2)-1

fig = plt.figure()
ax = fig.add_subplot(111)
ax.matshow(S, alpha = .75, cmap = "summer")

ax.set_xticklabels(range(-1,Mx))
ax.set_yticklabels(range(-1,My))

ax.xaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.yaxis.set_minor_locator(AutoMinorLocator(2))
ax.xaxis.grid(True,'minor', lw = 1.5, ls = '-')
ax.yaxis.grid(True,'minor', lw = 1.5, ls = '-')

plt.show()