53 lines
1.5 KiB
Python
Executable File
53 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import matplotlib
|
|
matplotlib.use('SVG')
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.gridspec as gridspec
|
|
import numpy as np
|
|
|
|
matplotlib.rc('font', family='sans-serif', size=11)
|
|
matplotlib.rc('axes', titlesize='medium', labelsize='medium')
|
|
matplotlib.rc('xtick', labelsize='small')
|
|
matplotlib.rc('ytick', labelsize='small')
|
|
|
|
np.random.seed(map(ord, "hello"))
|
|
|
|
gs = gridspec.GridSpec(nrows=2, ncols=2, height_ratios=[1, 2],
|
|
wspace=0.25, hspace=0.25)
|
|
|
|
fig = plt.figure(figsize=(7, 5.5))
|
|
ax1 = fig.add_subplot(gs[0, 0])
|
|
ax2 = fig.add_subplot(gs[0, 1], sharex=ax1, sharey=ax1)
|
|
ax3 = fig.add_subplot(gs[1, :])
|
|
|
|
# Convolution (I think?) of two types of uniform distributions under modulo
|
|
w1 = np.random.randint(0, 100, 30)
|
|
w2 = np.arange(0, 30, 1)
|
|
w3 = np.array([w2 + i for i in w1]).flatten() % 100
|
|
|
|
ax1.hist(w1, bins=100, range=(0,100), histtype='stepfilled')
|
|
ax2.hist(w2, bins=100, range=(0,100), histtype='stepfilled')
|
|
ax3.hist(w3, bins=100, range=(0,100), histtype='stepfilled')
|
|
|
|
ax1.set_title('Random offset')
|
|
ax2.set_title('Linear allocation')
|
|
ax3.set_title('Cumulative allocation')
|
|
|
|
ax1.set_ylabel('wear')
|
|
ax1.set_yticks(np.arange(0, 3))
|
|
ax3.set_ylabel('wear')
|
|
ax3.set_xlabel('block address')
|
|
|
|
for ax in [ax1,ax2,ax3]:
|
|
ax.set_xlim(0, 100)
|
|
ax.set_xticklabels([])
|
|
ax.set_yticklabels([])
|
|
ax.spines['right'].set_visible(False)
|
|
ax.spines['top'].set_visible(False)
|
|
|
|
ax1.text(109.25, 1, '$\\ast$')
|
|
|
|
fig.tight_layout()
|
|
plt.savefig('wear-distribution.svg', bbox_inches="tight")
|