简体   繁体   中英

Axis numerical offset in matplotlib

I'm plotting something with matplotlib and it looks like this:

在此处输入图片说明

I can't seem to figure out why the x-axis is offset like it is...It looks like it's saying, 'whatever you read from me, add 2.398e9 to it for the actual x value'.

This is not quite what I want...Can I make it take only the first 4 digits, instead?

This is representing frequency, so I'd like to see something that reads:

2000 or 2400 or 2800....I can add the 'MHz' part in the axis title...But, this is unreadable at a glance.

Is this doing this because it's trying to make decisions on how to truncate long data?

Here's the code for the plotting:

plt.title(file_name +' at frequency '+ freq + 'MHz')
plt.xlabel('Frequency')
plt.ylabel('Conducted Power (dBm)')
plt.grid(True)
plt.plot(data['x'],data['y'])
#plt.axis([min(data['x']),max(data['x']),min(data['y'],max(data['y']))])
plt.savefig(file_name+'_'+freq)
print('plot written!')
#plt.show()
plt.close('all')

You need to import certain formatters from matplotlib.ticker . Here is the full documentation to ticker

from matplotlib.ticker import ScalarFormatter, FormatStrFormatter
ax.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))

Once you have set this to your plot likewise, you should be able to see the +2.398e9 disappear.

In general to avoid scientific notation, use the following:

ax.get_xaxis().get_major_formatter().set_scientific(False)

If you don't want to play the formatting game and would rather just display values directly in MHz, then you could simply rescale your data to be in MHz instead of Hz. Something like

data['x'] /= 1000

and then add the 'MHz' to your axis label.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM