簡體   English   中英

使用matplotlib進行繪圖時格式化軸

[英]Formatting axes when plotting with matplotlib

我正在嘗試格式化以下示例代碼生成的繪圖的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()

在此處輸入圖片說明

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

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM