Python 指定Matplotlib栅格上轴的最大范围

Python 指定Matplotlib栅格上轴的最大范围,python,matplotlib,grid,Python,Matplotlib,Grid,我正在处理一些波形,需要一个网格。对于x范围[0,20.500]和y范围[01800]的数据,我尝试了以下代码: %pylab def grid(imgIn,bounds, axlabels): import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker dpi=100 size = (imgIn.size[0]/dpi,imgIn.size[1]/dpi) print(f'siz

我正在处理一些波形,需要一个网格。对于x范围
[0,20.500]
和y范围
[01800]
的数据,我尝试了以下代码:

%pylab
def grid(imgIn,bounds, axlabels):
  import numpy as np
  import matplotlib.pyplot as plt
  import matplotlib.ticker
  dpi=100
  size = (imgIn.size[0]/dpi,imgIn.size[1]/dpi)
  print(f'size={size}')
  plt.figure(figsize=size)
  plt.imshow(imgIn,'gray') # ,vmin=-1,vmax=1)

  plt.minorticks_on()
  from matplotlib.ticker import StrMethodFormatter
  plt.gca().xaxis.set_major_formatter(StrMethodFormatter('{x:,.0f}'))
  plt.gca().yaxis.set_major_formatter(StrMethodFormatter('{x:,.2f}'))
  import matplotlib.ticker as plticker
  plt.gca().xaxis.set_minor_locator\
     (matplotlib.ticker.MultipleLocator(bounds[0][1]))
  plt.gca().yaxis.set_minor_locator\
    (matplotlib.ticker.MultipleLocator(bounds[1][1]))
  plt.grid(which="both", linewidth=0.72,color="k")
  plt.tick_params(which="minor", length=0)
  plt.xlabel(axlabels[0])
  plt.ylabel(axlabels[1])
  import io
  buf = io.BytesIO()
  plt.savefig(buf, format='png', dpi=dpi,bbox_inches='tight')
  buf.seek(0)
  plt.close()
  bytes = buf.getvalue()
  return bytes

from PIL import Image as PImage
import requests
from io import BytesIO
response = requests.get('https://i.pinimg.com/564x/d2/cf/81/d2cf8152167a978747d15f3ce3bd6835.jpg')
imgaa = PImage.open(BytesIO(response.content))
T = 20.5
yMax = 1800
imgBytes = grid(imgaa,[(0,T),(0,yMax)],('Elapsed Time','Frequency'))
import io
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('off')
im = PImage.open(io.BytesIO(imgBytes))
ax.imshow(im,aspect='auto')    

因此,从积极的一面来看,这确实创建了一个网格。不利方面:

  • 不考虑网格范围
  • y轴从顶部开始计数并向下递增

  • 我不确定如何解决这两个问题。感谢指导员

    我已经清理了很多代码,以便在更简单的基础上工作。我只剩下以下几点:

    from io import BytesIO
    import matplotlib.pyplot as plt
    from PIL import Image as PImage
    import requests
    
    response = requests.get(
        'https://i.pinimg.com/564x/d2/cf/81/d2cf8152167a978747d15f3ce3bd6835.jpg')
    image = PImage.open(BytesIO(response.content))
    dpi = 100
    size = (image.size[0] / dpi, image.size[1] / dpi)
    fig, ax = plt.subplots(figsize=size)
    ax.imshow(image, extent=[0, 20.5, 0, 1800], aspect='auto')
    ax.grid(which='both', color='black', linewidth=2)
    ax.minorticks_on()
    ax.tick_params(which='minor', length=0)
    ax.set_xlabel('Elapsed Time')
    ax.set_ylabel('Frequency')
    plt.show()
    
    哪个显示


    是您所追求的吗?

    符合上述第2条:关于网格范围的任何想法都没有得到尊重?@javadba我根据您提供的范围修复了范围。注意:正是
    ax.imshow()
    的范围参数修复了此问题。这真的很难排除故障