* auto-labeling the percentage * offsetting a slice with "explode" * drop-shadow * custom start angle Note about the custom start angle: The default ``startangle`` is 0, which would start the "Frogs" slice on the positive x-axis. This example sets ``startangle = 90`` such that everything is rotated counter-clockwise by 90 degrees, and the frog slice starts on the positive y-axis. """ import matplotlib.pyplot as plt # Pie chart, where the slices will be ordered and plotted counter-clockwise: labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' sizes = [15, 30, 45, 10] explode = (0, 0.1, 0, 0) # only "explode" the 2nd slice (i.e. 'Hogs') fig1, ax1 = plt.subplots() ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle. import save_fig as sf sf.save_to_file('pie')
* Varying the color along a streamline. * Varying the density of streamlines. * Varying the line width along a stream line. """ import numpy as np import matplotlib.pyplot as plt X, Y = (np.linspace(-3, 3, 100), np.linspace(-3, 3, 100)) U, V = np.mgrid[-3:3:100j, 0:0:100j] seed_points = np.array([[-2, 0, 1], [-2, 0, 1]]) fig0, ax0 = plt.subplots() strm = ax0.streamplot(X, Y, U, V, color=U, linewidth=2, cmap=plt.cm.autumn, start_points=seed_points.T) fig0.colorbar(strm.lines) ax0.plot(seed_points[0], seed_points[1], 'bo') ax0.axis((-3, 3, -3, 3)) import save_fig as sf sf.save_to_file('streamplot')
import matplotlib.pyplot as plt import numpy as np def f(t): 'A damped exponential' s1 = np.cos(2 * np.pi * t) e1 = np.exp(-t) return s1 * e1 t1 = np.arange(0.0, 5.0, .2) l = plt.plot(t1, f(t1), 'ro') plt.setp(l) plt.setp(l, markersize=30) plt.setp(l, markerfacecolor='C2') import save_fig as sf sf.save_to_file('arctest')
plot_scatter(axes[0], prng) plot_image_and_patch(axes[1], prng) plot_bar_graphs(axes[2], prng) plot_colored_circles(axes[3], prng) plot_colored_sinusoidal_lines(axes[4]) plot_histograms(axes[5], prng) fig.tight_layout() return fig if __name__ == "__main__": # Setup a list of all available styles, in alphabetical order but # the `default` and `classic` ones, which will be forced resp. in # first and second position. style_list = ['default', 'classic'] + sorted( style for style in plt.style.available if style != 'classic') print(style_list) # Plot a demonstration figure for every available style sheet. for style_label in style_list: with plt.style.context(style_label): fig = plot_figure(style_label=style_label) import save_fig as sf sf.save_to_file('style-sheets')
import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter def to_percent(y, position): # Ignore the passed in position. This has the effect of scaling the default # tick locations. s = str(100 * y) # The percent symbol needs escaping in latex if matplotlib.rcParams['text.usetex'] is True: return s + r'$\%$' else: return s + '%' x = randn(5000) # Make a normed histogram. It'll be multiplied by 100 later. plt.hist(x, bins=50, normed=True) # Create the formatter using the function to_percent. This multiplies all the # default labels by 100, making them all percentages formatter = FuncFormatter(to_percent) # Set the formatter plt.gca().yaxis.set_major_formatter(formatter) import save_fig as sf sf.save_to_file('histgram.svg')
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5')) ax.legend() def autolabel(rects, xpos='center'): """ Attach a text label above each bar in *rects*, displaying its height. *xpos* indicates which side to place the text w.r.t. the center of the bar. It can be one of the following {'center', 'right', 'left'}. """ xpos = xpos.lower() # normalize the case of the parameter ha = {'center': 'center', 'right': 'left', 'left': 'right'} offset = {'center': 0.5, 'right': 0.57, 'left': 0.43} # x_txt = x + w*off for rect in rects: height = rect.get_height() ax.text(rect.get_x() + rect.get_width() * offset[xpos], 1.01 * height, '{}'.format(height), ha=ha[xpos], va='bottom') autolabel(rects1, "left") autolabel(rects2, "right") import save_fig as sf sf.save_to_file('barchart')
url = 'https://fred.stlouisfed.org/graph/fredgraph.csv?id=VIXCLS' vix = pd.read_csv(url, index_col=0, parse_dates=True, na_values='.', infer_datetime_format=True, squeeze=True).dropna() # `ma` is a 90-day moving average of the VIX Index, a measure of market expectations of near-term stock volatility. # `state` is a binning of the moving average into different regime states. ma = vix.rolling('90d').mean() state = pd.cut(ma, bins=[-np.inf, 14, 18, 24, np.inf], labels=range(4)) # `cmap` is a ColorMap - a matplotlib object that is essentially a mapping of floats to RGBA colors. Any colormap can be reversed by appending '_r' cmap = plt.get_cmap('RdYlGn_r') ma.plot(color='black', linewidth=1.5, marker='', figsize=(8, 4), label='VIX 90d MA') ax = plt.gca() ax.set_xlabel('') ax.set_ylabel('90d moving average: CBOE VIX') ax.set_title('Volatility Regime State') ax.grid(False) ax.legend(loc='upper center') ax.set_xlim(left=ma.index[0], right=ma.index[-1]) # Creates color-filled blocks that correspond to each bin of state.cmap([...]) # Get us an RGBA sequence for the colors at the 20th, 40th, 60th, and 80th ‘percentile’ along the ColorMaps’ spectrum. trans = mtransforms.blended_transform_factory(ax.transData, ax.transAxes) for i, color in enumerate(cmap([0.2, 0.4, 0.6, 0.8])): ax.fill_between(ma.index, 0, 1, where=state==i, facecolor=color, transform=trans) # horizontal line ax.axhline(vix.mean(), linestyle='dashed', color='xkcd:dark grey', alpha=0.6, label='Full-period mean', marker='') # plt.show() sf.save_to_file('pandas')
import matplotlib.pyplot as plt np.random.seed(0) n_bins = 10 x = np.random.randn(1000, 3) fig, axes = plt.subplots(nrows=2, ncols=2) ax0, ax1, ax2, ax3 = axes.flatten() colors = ['red', 'tan', 'lime'] ax0.hist(x, n_bins, normed=1, histtype='bar', color=colors, label=colors) ax0.legend(prop={'size': 10}) ax0.set_title('bars with legend') ax1.hist(x, n_bins, normed=1, histtype='bar', stacked=True) ax1.set_title('stacked bar') ax2.hist(x, n_bins, histtype='step', stacked=True, fill=False) ax2.set_title('stack step (unfilled)') # Make a multiple-histogram of data-sets with different length. x_multi = [np.random.randn(n) for n in [10000, 5000, 2000]] ax3.hist(x_multi, n_bins, histtype='bar') ax3.set_title('different sample sizes') fig.tight_layout() import save_fig as sf sf.save_to_file('multihist')
import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 2 * np.pi, 0.02) y = np.sin(x) y1 = np.sin(2 * x) y2 = np.sin(3 * x) ym1 = np.ma.masked_where(y1 > 0.5, y1) ym2 = np.ma.masked_where(y2 < -0.5, y2) lines = plt.plot(x, y, x, ym1, x, ym2, 'o') plt.setp(lines[0], linewidth=4) plt.setp(lines[1], linewidth=2) plt.setp(lines[2], markersize=10) plt.legend(('No mask', 'Masked if > 0.5', 'Masked if < -0.5'), loc='upper right') plt.title('Masked line demo') import save_fig as sf sf.save_to_file('masked')
import numpy as np import matplotlib.pyplot as plt N = 5 menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) menStd = (2, 3, 4, 1, 2) womenStd = (3, 5, 2, 3, 3) # The x location for the groups ind = np.arange(N) # The width of the bars: can also be len(x) sequence width = 0.35 p1 = plt.bar(ind, menMeans, width, yerr=menStd) p2 = plt.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd) plt.ylabel('Scores') plt.title('Scores by group and gender') plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5')) plt.yticks(np.arange(0, 81, 10)) plt.legend((p1[0], p2[0]), ('Men', 'Women')) import save_fig as sf sf.save_to_file('stacked-bar')
[0, -1], slice(100, 200, 3), 0.1, 0.3, 1.5, (0.0, 0.1), (0.45, 0.1) ] # define the figure size and grid layout properties figsize = (10, 8) cols = 3 gs = gridspec.GridSpec(len(cases) // cols + 1, cols) gs.update(hspace=0.4) # define the data for cartesian plots delta = 0.11 x = np.linspace(0, 10 - 2 * delta, 200) + delta y = np.sin(x) + 1.0 + delta fig1 = plt.figure(num=1, figsize=figsize) ax = [] for i, case in enumerate(cases): row = (i // cols) col = i % cols ax.append(fig1.add_subplot(gs[row, col])) ax[-1].set_title('markevery=%s' % str(case)) ax[-1].plot(x, y, 'o', ls='-', ms=4, markevery=case) import save_fig as sf sf.save_to_file('markevery')