2

I'm trying to draw clean graphs using matplotlib. Here is my code:

fig = plt.figure(figsize = (6,6))
plt.grid(True)
plt.xlabel('time (s)',fontweight='bold')
plt.ylabel('density',fontweight='bold')
plt.plot(data1, data2, color = 'y', linewidth = 2)
plt.show()

the floats in data2 lies between 0.0001 and 0.001, so When I do this, the y axis has ticks like '0.0001' '0.0002' etc. How can I force the ticks to be in scientific notation ('1e-3', '1e-4' etc. ) ? thx :)

rudy
  • 176
  • 3
  • 14

1 Answers1

7

This sets it like 1e-04:

import matplotlib.pyplot as plt
import matplotlib.ticker as mtick

data1 = [1,2,3,4,5]
data2 = [1e4,3e4,4e4,2e4,5e4]
fig = plt.figure(figsize = (6,6))
plt.grid(True)
plt.xlabel('time (s)',fontweight='bold')
plt.ylabel('density',fontweight='bold')
plt.plot(data1, data2, color = 'y', linewidth = 2)
plt.gca().yaxis.set_major_formatter(mtick.FormatStrFormatter('%.0e')) 
plt.show()

enter image description here

Brian
  • 1,988
  • 1
  • 14
  • 29
  • Went through about 8 useless versions of this question until happening across the all-crucial plt.gca() part of your answer. This is a much more elegant solution than others I have seen. – Bryson S. Mar 05 '18 at 01:16