使用matplotlib绘制时格式化轴

时间:2014-11-11 17:02:35

标签: python matplotlib plot

我正在尝试格式化由以下示例代码生成的绘图的x轴。 x轴以对数刻度绘制。目前,该图显示[1000,2000,3000,4000,5000]次要抽搐= 100.我希望每{100}作为[0,1000]标记的主要抽搐,然后每隔1000 [1000,5000]

基本上,我希望x轴具有以下标签:[100,200,300,400,500,600,700,800,900,1000,2000,3000,4000,5000]。这可能是使用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()

enter image description here

1 个答案:

答案 0 :(得分:1)

@Thibaut帮我解决了这个问题(稍作调整):

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()

enter image description here