I'm trying to plot four figure labels with two decimal places - e.g '1475.88' onto my X-Axis. As you can see the label has been shorted by Matplotlib to the scientific format 1.478e3.
How do I display the full figure, and at a defined spacing.
Code below:
with plt.style.context('seaborn-whitegrid'):# Plot the SVP dataplt.figure(figsize=(8, 8))plt.plot(speed_x_clean, depth_y_clean)plt.plot(smoothed_speed, smoothed_depth)plt.scatter(float(speed_extrapolated), float(depth_extrapolated),marker='X', color='#ff007f')# Add a legend, labels and titlaplt.gca().invert_yaxis()plt.legend(('Raw SVP', 'Smoothed SVP'), loc='best')plt.title('SVP - ROV '+ '['+ time_now + ']')plt.xlabel('Sound Velocity [m/s]')plt.ylabel('Depth [m]')# plt.grid(color='grey', linestyle='--', linewidth=0.25, grid_animated=True)ax = plt.axes()plt.gca().xaxis.set_major_locator(plt.AutoLocator())plt.xticks(rotation=0)plt.show()
Best Answer
Labels with two Decimal Places
Using a ticker FuncFormatter any user defined format can be achieved.
@ticker.FuncFormatterdef major_formatter(val, pos):return "%.2f" % val
Labels at a Defined Spacing
With set_xticks and set_yticks the number of labels can be set at a defined spacing.
Self-Contained Example
A completely self-contained example could look like this (simple sine wave):
import matplotlib.pyplot as pltimport numpy as npimport matplotlib.ticker as ticker@ticker.FuncFormatterdef major_formatter(val, pos):return "%.2f" % valdef graph():x = np.arange(0.0, 1501, 50)y = np.sin(2 * np.pi * x / 1500)fig, ax = plt.subplots()ax.plot(x, y)ax.xaxis.set_major_formatter(major_formatter)ax.yaxis.set_major_formatter(major_formatter)x_ticks = np.arange(0, 1501, 500)y_ticks = np.arange(-1.0, +1.01, 0.5)ax.set_xticks(x_ticks)ax.set_yticks(y_ticks)ax.grid(which='both')plt.show()if __name__ == '__main__':graph()
Output
Here the output of the example program: it has four figure labels with two decimal places on the x-axis: