1import matplotlib.pyplot as plt
2import numpy as np
We wanna generate a list of colors automatically based on the elements in some list (the idea from popai),
1def get_colors(list_vals, list_colors=["#fb4747", "#315ace", "#b5f6e5", "#FFB347"]):
2 dict_colors = polylinear_gradient(list_colors, n=len(list_vals))
3 dict_colors_ok = {}
4 for i, val in enumerate(list_vals):
5 dict_colors_ok[val] = dict_colors['hex'][i]
6
7 return dict_colors_ok
Axes' options,
1# Hide the axis
2plt.axis('off')
3# and 'on' to display it again
1# Set the limit
2plt.xlim(0, 3.5)
3plt.ylim(0, 3.5)
1# Axes' label
2plt.xlabel('students', fontsize=14)
3plt.ylabel('mark')
1# axes' tick size & rotation
2plt.xticks(fontsize=14, rotation=90)
3plt.yticks(fontsize=14, rotation=90)
1# range of ticks
2plt.xticks(np.arange(0., 1., step=0.01))
3plt.yticks(np.arange(0., 1., step=0.01))
Set equal 2 axes (ref),
1matplotlib.axes.Axes.set_aspect('equal')
2# get the current axes and apply the function
3plt.gca().set_aspect()
Check the official doc for more information.
1# default for all
2matplotlib.rcParams['figure.figsize'] = (20,5)
1plt.plot(X, y, 'ro') # red and 'o' points
1# set figure size
2plt.figure(figsize=(20, 5))
3plt.figure(figsize=(20, 5), dpi= 60)
1# rotate z label
2plt.xticks(rotation=90, fontsize=10)
1# linestyle and marker
2plt.plot(marker='.', ls='') # scatter plot
3plt.plot(X, '.', markersize=15, linewidth=2)
👉 Check more in official doc.
1df.plot(figsize=(20, 5))
2df.plot(fontsize=12)
1# different types
2df.plot(style='.')
3df.plot(style=['r.', 'bx']) # 2 features
1# add x,y labels
2df.plot(kind='bar)
3plt.xlabel('features', fontsize=14)
4plt.ylabel('% of nans', fontsize=14)
1# rotate x ticks
2df.plot(kind='bar', rot=90)
1# from the plots
2plt.plot(x, np.sin(x), '-b', label='Sine')
3plt.plot(x, np.cos(x), '--r', label='Cosine')
4plt.legend(fontsize=13)
1# custom: independent from the plots
2from matplotlib.lines import Line2D
3plt.legend([Line2D([0], [0], color='b'), Line2D([0], [0], color='r')], ['blue', 'red'])
Suppose we have a list of group with different colors. We wanna make legends for them,
1# generate auto the colors based on list lst_clusters (see previous section)
2dict_colors = get_colors(lst_clusters)
3
4plt.legend(
5 [Line2D([0], [0], color=dict_colors[key]) for key in dict_colors],
6 dict_colors.keys(),
7 loc='lower center',
8 ncol=6,
9 bbox_to_anchor=(.5, 1.),
10 prop={'size': 15}
11)
Plot from a list of true/false (ref to an example of Bernoulli distribution)
1image = # np.array(4, 4) of random True/False
2plt.imshow(image, cmap='gray') # plot
3plt.show()
For example, we wanna create a
4x4
plots (ref),1plt.figure(figsize=(12, 10), dpi= 60)
2for i in range(4):
3 pos = i+1
4 plt.subplot(2,2,pos)
5 plt.plot(X[i])
6 plt.title('title_'+str(pos), fontsize=18)
Using
ax
1size = len(list_features)
2f, axs = plt.subplots(int((size+1)/2), 2, figsize=(15,15/5*int(size/2 + 1/2)))
3for ax, feat in zip(axs.ravel(), list_features):
4 df_feat = df[feat]
5 for idt, df_id in df_feat.groupby('batch_id'):
6 ax.plot(x, y, color='royalblue', alpha=0.5)
7 ax.set_title('plot_'+feat)
8plt.show()
1plt.fill_between(df.index, df["yhat_lower"], df["yhat_upper"], color='#0072B2', alpha=0.2)
1from scipy import misc
2
3img = misc.face(gray=True)
4plt.imshow(img, cmap='gray', vmin=0, vmax=255)
5plt.show()
1import numpy as np
2import matplotlib.pyplot as plt
3from PIL import Image
4
5fname = 'image.png'
6image = Image.open(fname).convert("L")
7# If you have an L mode image, that means it is a single channel image - normally
8# interpreted as greyscale. The L means that is just stores the Luminance.
9# It is very compact, but only stores a greyscale, not colour.
10
11arr = np.asarray(image)
12plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
13plt.show()
14print(arr.shape)
1# ERR: Clipping input data to the valid range for
2# imshow with RGB data ([0..1] for floats or [0..255] for integers)
3plt.imshow(img.astype('uint8'))
To be sure that
plt.savefig()
(ref) comes before plt.show()
. In the case you wanna use any time you want, just call plt.gcf()
to "get current figure" first. For example, (ref)1fig1 = plt.gcf() # get the current figure
2plt.show() # show the plot
3fig1.savefig('test.png', dpi=100
Remark: There are the axes inside the exported photo (all are printed on notebook)!!
They export only the photo.
1import imageio
2# img = misc.face(gray=True)
3# or
4# img = np.asarray(Image.open('abc.jpg').convert("L"))
5imageio.imwrite('filename.jpg', img) # save the file
1# ERR: Lossy conversion from float64 to uint8. Range […,…].
2# Convert image to uint8 prior to saving to suppress this warning
3imageio.imwrite('filename.jpg', img.astype(np.uint8))