Python 使用matplotlib打印时格式化轴

Python 使用matplotlib打印时格式化轴,python,matplotlib,plot,Python,Matplotlib,Plot,我正在尝试格式化由以下示例代码生成的绘图的x轴。x轴以对数比例绘制。目前,该图显示[10002000300040005000],次要tics=100。我希望将[01000]中的每100个标记为主要tic,然后将[10005000]中的每1000个标记为主要tic 基本上,我希望x轴具有以下标签:[100200300400500600700800900200030040005000]。使用matplotlib可以吗 import numpy import math import random f

我正在尝试格式化由以下示例代码生成的绘图的x轴。x轴以对数比例绘制。目前,该图显示
[10002000300040005000]
,次要tics=100。我希望将
[01000]
中的每100个标记为主要tic,然后将
[10005000]
中的每1000个标记为主要tic

基本上,我希望x轴具有以下标签:
[100200300400500600700800900200030040005000]
。使用matplotlib可以吗

import numpy
import math
import random

from matplotlib import pyplot
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

### ----------------------------- ###

plot_aspect = 1.7
plot_height = 10.0
plot_width = int(plot_height*plot_aspect)

pyplot.figure(figsize=(plot_width, plot_height), dpi=100)
pyplot.subplots_adjust(left=0.10, right=0.90, top=0.90, bottom=0.10, hspace=0.30)

### ----------------------------- ###

title1 = 'Example Plot Title'
main_title = 'Example Main Title'
png_title = 'example_plot.png'

file1_data = []

for i in range(10,5100,10):
    b = (60-(2*math.log(i)))+random.uniform(-2.0,2.0)
    file1_data.append([i,b])

# ----------

subplot1 = pyplot.subplot(111)

majorLocator1   = MultipleLocator(1000)
majorFormatter1 = FormatStrFormatter('%d')
minorLocator1   = MultipleLocator(100)

pyplot.plot(numpy.array(file1_data)[:,0],numpy.array(file1_data)[:,1],'red',linewidth=1.0,label=title1)

pyplot.xscale('log',fontsize=10)

pyplot.xlim(0,5000)

pyplot.xticks(fontsize = 10)

subplot1.xaxis.set_major_locator(majorLocator1)
subplot1.xaxis.set_major_formatter(majorFormatter1)
subplot1.xaxis.set_minor_locator(minorLocator1)

subplot1.xaxis.grid()

pyplot.legend(loc=3,prop={'size':20})

pyplot.yticks(fontsize = 16)
pyplot.ylim(30,65)
pyplot.xlabel('Freq [Hz]', fontsize=16, weight="bold")
pyplot.ylabel('PSD [dB/Hz]', fontsize=16, weight="bold")

pyplot.suptitle(main_title, fontsize = 28, weight="bold")

### ----------------------------- ###

pyplot.savefig(png_title, dpi=100)
pyplot.show()

@Thibaut帮了我这个忙(做了一些小调整):


您是否尝试过这样的方法:
xticks=range(10010011000)+range(100150011000)
然后
pyplot.xticks(xticks,fontsize=10)
xticks=range(10010011000)+range(200060001000)
import numpy
import math
import random

from matplotlib import pyplot
from matplotlib.ticker import MultipleLocator, FormatStrFormatter

### ----------------------------- ###

plot_aspect = 1.7
plot_height = 10.0
plot_width = int(plot_height*plot_aspect)

pyplot.figure(figsize=(plot_width, plot_height), dpi=100)
pyplot.subplots_adjust(left=0.10, right=0.90, top=0.90, bottom=0.10, hspace=0.30)

### ----------------------------- ###

title1 = 'Example Plot Title'
main_title = 'Example Main Title'
png_title = 'example_plot.png'

file1_data = []

for i in range(10,5100,10):
    b = (60-(2*math.log(i)))+random.uniform(-2.0,2.0)
    file1_data.append([i,b])

# ----------

subplot1 = pyplot.subplot(111)

majorLocator1   = MultipleLocator(1000)
majorFormatter1 = FormatStrFormatter('%d')
minorLocator1   = MultipleLocator(100)

pyplot.plot(numpy.array(file1_data)[:,0],numpy.array(file1_data)[:,1],'red',linewidth=1.0,label=title1)

pyplot.xscale('log',fontsize=10)

pyplot.xlim(0,5000)

xticks = range(100, 1001, 100) + range(2000, 6000, 1000)

# pyplot.xticks(fontsize = 10)
pyplot.xticks(xticks, fontsize=10)

# subplot1.xaxis.set_major_locator(majorLocator1)
subplot1.xaxis.set_major_formatter(majorFormatter1)
# subplot1.xaxis.set_minor_locator(minorLocator1)

subplot1.xaxis.grid()

pyplot.legend(loc=3,prop={'size':20})

pyplot.yticks(fontsize = 16)
pyplot.ylim(30,65)
pyplot.xlabel('Freq [Hz]', fontsize=16, weight="bold")
pyplot.ylabel('PSD [dB/Hz]', fontsize=16, weight="bold")

pyplot.suptitle(main_title, fontsize = 28, weight="bold")

### ----------------------------- ###

pyplot.savefig(png_title, dpi=100)
pyplot.show()