'position', 'value' 1.00000000,19.0612177051 6.21052632,100.657317014 11.42105263,111.081064358 16.63157895,232.929497684 21.84210526,224.490699818 27.05263158,279.538416476 32.26315789,377.203193621 37.47368421,443.521259213 42.68421053,444.889816318 47.89473684,527.26112329 53.10526316,569.99383123 58.31578947,635.948010167 63.52631579,667.667229067 68.73684211,734.623416964 73.94736842,754.704089053 79.15789474,834.453817955 84.36842105,828.770429695 89.57894737,884.032674467 94.78947368,925.518393595 100.0,978.592947013
And you want to plot the data and do a linear fitting (polynomial fit of degree one). Matplotlib does it like this:
import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab # read CSV as a numpy array data = mlab.csv2rec('data.csv') # print CSV file headers print data.dtype.names # load collumns as vectors data_x = data['position'] data_y = data['value'] # plot raw data plt.plot(data_x,data_y,'o') # fit data with a polynomial of degree 1: ax+b=0 a,b = np.polyfit(data_x, data_y, 1) data_y_fitted = np.polyval([a, b], data_x) #plot fitted data plt.plot(data_x,data_y_fitted,'-') plt.show()
Here the resulting Plot:
import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab # read CSV as a numpy array filePath = 'data.csv' data = mlab.csv2rec(filePath) # print CSV file headers print data.dtype.names # load collumns as vectors data_x = data['position'] data_y = data['value'] # figure fig = plt.figure('.: MatPlotLib Example :.') fig.suptitle('Plot for file '+filePath, fontsize=12, fontweight='bold') # Add my axis (I only have one, but I could have two, e.g., mirrored Y) ax = fig.add_subplot(111) # plot raw data # I'm going to add some labels to add a legend after ax.plot(data_x,data_y,'o', label='Raw data') ax.set_xlabel(data.dtype.names[0]) # Now I want to have X axis with some Latex: from matplotlib import rc rc('text', usetex=True) ax.set_ylabel(data.dtype.names[1]+' ($\\AA^{-1}$)') rc('text', usetex=False) # fit data with a polynomial of degree 1: ax+b=0 a,b = np.polyfit(data_x, data_y, 1) data_y_fitted = np.polyval([a, b], data_x) #plot fitted data ax.plot(data_x,data_y_fitted,'-', label='Fitted data') # Let's add the legend to the lower right corner ax.legend(loc= 'lower right') plt.show()
Et voilĂ the result:
No comments:
Post a Comment