## Aesthetics of Matplotlib graphs

September 15, 2015 1 Comment

The graph shown in my earlier postis not clear and it looks wrong. I have improved it to some extent using this code. *Matplotlib* has many features more powerful than what I used earlier. I have commented the code used to annotate and display the actual points in the graph. I couldn’t properly draw the tick marks so that the red graph is clearly shown because the data range wasn’t easy to work with. There should be some feature that I still have not explored.

import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import numpy as np def main(): gclog = pd.DataFrame(columns=['SecondsSinceLaunch', 'BeforeSize', 'AfterSize', 'TotalSize', 'RealTime']) with open("D:\\performance\\data.txt", "r") as f: for line in f: strippeddata = line.split() gclog = gclog.append(pd.DataFrame( [dict(SecondsSinceLaunch=strippeddata[0], BeforeSize=strippeddata[1], AfterSize=strippeddata[2], TotalSize=strippeddata[3], RealTime=strippeddata[4])] ), ignore_index=True) print gclog #gclog.time = pd.to_datetime(gclog['SecondsSinceLaunch'], format='%Y-%m-%dT%H:%M:%S.%f') gclog = gclog.convert_objects(convert_numeric=True) fig, ax = plt.subplots(figsize=(17, 14), facecolor='white', edgecolor='white') ax.axes.tick_params(labelcolor='darkblue', labelsize='10') for axis, ticks in [(ax.get_xaxis(), np.arange(10, 8470, 100) ), (ax.get_yaxis(), np.arange(10, 9125, 300))]: axis.set_ticks_position('none') axis.set_ticks(ticks) axis.label.set_color('#999999') if False: axis.set_ticklabels([]) plt.grid(color='#999999', linewidth=1.0, linestyle='-') plt.xticks(rotation=70) plt.gcf().subplots_adjust(bottom=0.15) map(lambda position: ax.spines[position].set_visible(False), ['bottom', 'top', 'left', 'right']) ax.set_xlabel(r'AfterSize'), ax.set_ylabel(r'TotalSize') ax.set_xlim(10, 8470, 100), ax.set_ylim(10, 9125, 300) plt.plot(sorted(gclog.AfterSize),gclog.TotalSize,c="red") # for i,j in zip(sorted(gclog.AfterSize),gclog.TotalSize): # ax.annotate('(' + str(i) + ',' + str(j) + ')',xy=(i, j)) plt.show() if __name__=="__main__": main()

In fact after finishing the *Principal Component Analysis* section of a Machine Learning course I took recently I realized beautiful **3D** graphs can be drawn.