Brocolli Rob Brocolli Rob - 3 months ago 17
Python Question

Axis numerical offset in matplotlib

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

enter image description here

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

Answer

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)