updated plots of the data analysis chapters
This commit is contained in:
parent
75aa46d71c
commit
9769d5e94f
@ -1,8 +1,7 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
from plotstyle import *
|
||||||
|
|
||||||
plt.xkcd()
|
|
||||||
fig = plt.figure( figsize=(6,3.5) )
|
|
||||||
rng = np.random.RandomState(637281)
|
rng = np.random.RandomState(637281)
|
||||||
|
|
||||||
nsamples = 100
|
nsamples = 100
|
||||||
@ -25,11 +24,8 @@ for i in range(nresamples) :
|
|||||||
musrs.append(np.mean(rng.randn(nsamples)))
|
musrs.append(np.mean(rng.randn(nsamples)))
|
||||||
hmusrs, _ = np.histogram(musrs, bins, density=True)
|
hmusrs, _ = np.histogram(musrs, bins, density=True)
|
||||||
|
|
||||||
ax = fig.add_subplot(1, 1, 1)
|
fig, ax = plt.subplots(figsize=cm_size(figure_width, 1.2*figure_height))
|
||||||
ax.spines['right'].set_visible(False)
|
fig.subplots_adjust(**adjust_fs(left=4.0, bottom=2.7, right=1.5))
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.set_xlabel('Mean')
|
ax.set_xlabel('Mean')
|
||||||
ax.set_xlim(-0.4, 0.4)
|
ax.set_xlim(-0.4, 0.4)
|
||||||
ax.set_ylabel('Probability density')
|
ax.set_ylabel('Probability density')
|
||||||
@ -45,9 +41,7 @@ ax.annotate('bootstrap\ndistribution',
|
|||||||
xytext=(0.25, 4), textcoords='data',
|
xytext=(0.25, 4), textcoords='data',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
|
||||||
connectionstyle="angle3,angleA=20,angleB=60") )
|
connectionstyle="angle3,angleA=20,angleB=60") )
|
||||||
ax.bar(bins[:-1]-0.25*db, hmusrs, 0.5*db, color='r')
|
ax.bar(bins[:-1]-0.25*db, hmusrs, 0.5*db, **fsB)
|
||||||
ax.bar(bins[:-1]+0.25*db, hmus, 0.5*db, color='b')
|
ax.bar(bins[:-1]+0.25*db, hmus, 0.5*db, **fsA)
|
||||||
|
|
||||||
plt.tight_layout()
|
|
||||||
plt.savefig('bootstrapsem.pdf')
|
plt.savefig('bootstrapsem.pdf')
|
||||||
#plt.show();
|
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import scipy.stats as st
|
import scipy.stats as st
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
from plotstyle import *
|
||||||
|
|
||||||
plt.xkcd()
|
|
||||||
fig = plt.figure( figsize=(6,3.5) )
|
|
||||||
rng = np.random.RandomState(637281)
|
rng = np.random.RandomState(637281)
|
||||||
|
|
||||||
# generate correlated data:
|
# generate correlated data:
|
||||||
@ -36,33 +35,28 @@ print('Measured correlation coefficient %.2f is at %.4f percentile of bootstrap'
|
|||||||
rp, ra = st.pearsonr(x, y)
|
rp, ra = st.pearsonr(x, y)
|
||||||
print('Measured correlation coefficient %.2f is at %.4f percentile of test' % (rp, ra))
|
print('Measured correlation coefficient %.2f is at %.4f percentile of test' % (rp, ra))
|
||||||
|
|
||||||
ax = fig.add_subplot(1, 1, 1)
|
fig, ax = plt.subplots(figsize=cm_size(figure_width, 1.2*figure_height))
|
||||||
ax.spines['right'].set_visible(False)
|
fig.subplots_adjust(**adjust_fs(left=4.0, bottom=2.7, right=0.5, top=1.0))
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.annotate('Measured\ncorrelation\nis significant!',
|
ax.annotate('Measured\ncorrelation\nis significant!',
|
||||||
xy=(rd, 1.1), xycoords='data',
|
xy=(rd, 1.1), xycoords='data',
|
||||||
xytext=(rd, 2.2), textcoords='data', ha='left',
|
xytext=(rd, 2.2), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.2,0.0),
|
arrowprops=dict(arrowstyle="->", relpos=(0.2,0.0),
|
||||||
connectionstyle="angle3,angleA=10,angleB=80") )
|
connectionstyle="angle3,angleA=10,angleB=80") )
|
||||||
ax.annotate('95% percentile',
|
ax.annotate('95% percentile',
|
||||||
xy=(0.14, 0.9), xycoords='data',
|
xy=(0.14, 0.9), xycoords='data',
|
||||||
xytext=(0.2, 4.0), textcoords='data', ha='left',
|
xytext=(0.2, 4.0), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.1,0.0),
|
arrowprops=dict(arrowstyle="->", relpos=(0.1,0.0),
|
||||||
connectionstyle="angle3,angleA=30,angleB=70") )
|
connectionstyle="angle3,angleA=30,angleB=70") )
|
||||||
ax.annotate('Distribution of\nuncorrelated\nsamples',
|
ax.annotate('Distribution of\nuncorrelated\nsamples',
|
||||||
xy=(-0.08, 3.6), xycoords='data',
|
xy=(-0.08, 3.6), xycoords='data',
|
||||||
xytext=(-0.22, 5.0), textcoords='data', ha='left',
|
xytext=(-0.22, 5.0), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.0),
|
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.0),
|
||||||
connectionstyle="angle3,angleA=150,angleB=100") )
|
connectionstyle="angle3,angleA=150,angleB=100") )
|
||||||
ax.bar(b[:-1], h, width=b[1]-b[0], color='#ffff66')
|
ax.bar(b[:-1], h, width=b[1]-b[0], **fsC)
|
||||||
ax.bar(b[:-1][b[:-1]>=rq], h[b[:-1]>=rq], width=b[1]-b[0], color='#ff9900')
|
ax.bar(b[:-1][b[:-1]>=rq], h[b[:-1]>=rq], width=b[1]-b[0], **fsB)
|
||||||
ax.plot( [rd, rd], [0, 1], 'b', linewidth=4 )
|
ax.plot( [rd, rd], [0, 1], **lsA)
|
||||||
ax.set_xlim(-0.25, 0.35)
|
ax.set_xlim(-0.25, 0.35)
|
||||||
ax.set_xlabel('Correlation coefficient')
|
ax.set_xlabel('Correlation coefficient')
|
||||||
ax.set_ylabel('Probability density of H0')
|
ax.set_ylabel('Probability density of H0')
|
||||||
|
|
||||||
plt.tight_layout()
|
|
||||||
plt.savefig('permutecorrelation.pdf')
|
plt.savefig('permutecorrelation.pdf')
|
||||||
#plt.show();
|
|
||||||
|
@ -1,24 +1,22 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import matplotlib.cm as cm
|
import matplotlib.cm as cm
|
||||||
|
import matplotlib.gridspec as gridspec
|
||||||
|
from plotstyle import *
|
||||||
|
|
||||||
plt.xkcd()
|
|
||||||
fig = plt.figure( figsize=(6,6.8) )
|
|
||||||
rng = np.random.RandomState(4637281)
|
rng = np.random.RandomState(4637281)
|
||||||
lmarg=0.1
|
lmarg=0.1
|
||||||
rmarg=0.1
|
rmarg=0.1
|
||||||
|
|
||||||
ax = fig.add_axes([lmarg, 0.75, 1.0-rmarg, 0.25])
|
fig = plt.figure(figsize=cm_size(figure_width, 2.8*figure_height))
|
||||||
ax.spines['bottom'].set_position('zero')
|
spec = gridspec.GridSpec(nrows=4, ncols=1, height_ratios=[4, 4, 1, 3], hspace=0.2,
|
||||||
ax.spines['left'].set_visible(False)
|
**adjust_fs(fig, left=4.0))
|
||||||
ax.spines['right'].set_visible(False)
|
ax = fig.add_subplot(spec[0, 0])
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.get_yaxis().set_visible(False)
|
|
||||||
ax.set_xlim(0.0, np.pi)
|
ax.set_xlim(0.0, np.pi)
|
||||||
ax.set_xticks(np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi))
|
ax.set_xticks(np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi))
|
||||||
ax.set_xticklabels([])
|
ax.set_xticklabels([])
|
||||||
ax.set_ylim(0.0, 3.5)
|
ax.set_ylim(0.0, 3.5)
|
||||||
|
ax.yaxis.set_major_locator(plt.NullLocator())
|
||||||
ax.text(-0.2, 0.5*3.5, 'Activity', rotation='vertical', va='center')
|
ax.text(-0.2, 0.5*3.5, 'Activity', rotation='vertical', va='center')
|
||||||
ax.annotate('Tuning curve',
|
ax.annotate('Tuning curve',
|
||||||
xy=(0.42*np.pi, 2.5), xycoords='data',
|
xy=(0.42*np.pi, 2.5), xycoords='data',
|
||||||
@ -31,55 +29,49 @@ ax.annotate('',
|
|||||||
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
||||||
connectionstyle="angle3,angleA=80,angleB=90") )
|
connectionstyle="angle3,angleA=80,angleB=90") )
|
||||||
ax.text(0.52*np.pi, 0.7, 'preferred\norientation')
|
ax.text(0.52*np.pi, 0.7, 'preferred\norientation')
|
||||||
ax.plot([0, 0], [0.0, 3.5], 'k', zorder=10, clip_on=False)
|
|
||||||
xx = np.arange(0.0, 2.0*np.pi, 0.01)
|
xx = np.arange(0.0, 2.0*np.pi, 0.01)
|
||||||
pp = 0.5*np.pi
|
pp = 0.5*np.pi
|
||||||
yy = np.exp(np.cos(2.0*(xx+pp)))
|
yy = np.exp(np.cos(2.0*(xx+pp)))
|
||||||
ax.fill_between(xx, yy+0.25*yy, yy-0.25*yy, color=cm.autumn(0.3, 1), alpha=0.5)
|
ax.fill_between(xx, yy+0.25*yy, yy-0.25*yy, **fsBa)
|
||||||
ax.plot(xx, yy, color=cm.autumn(0.0, 1))
|
ax.plot(xx, yy, **lsB)
|
||||||
|
|
||||||
ax = fig.add_axes([lmarg, 0.34, 1.0-rmarg, 0.38])
|
ax = fig.add_subplot(spec[1, 0])
|
||||||
ax.spines['bottom'].set_position('zero')
|
|
||||||
ax.spines['left'].set_visible(False)
|
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.get_yaxis().set_visible(False)
|
|
||||||
ax.set_xlim(0.0, np.pi)
|
ax.set_xlim(0.0, np.pi)
|
||||||
ax.set_xticks(np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi))
|
ax.set_xticks(np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi))
|
||||||
ax.set_xticklabels([])
|
ax.set_xticklabels([])
|
||||||
ax.set_ylim(-1.5, 3.0)
|
ax.set_ylim(0.0, 3.0)
|
||||||
ax.text(0.5*np.pi, -1.8, 'Orientation', ha='center')
|
ax.yaxis.set_major_locator(plt.NullLocator())
|
||||||
ax.text(-0.2, 0.5*3.5, 'Activity', rotation='vertical', va='center')
|
ax.text(-0.2, 0.5*3.5, 'Activity', rotation='vertical', va='center')
|
||||||
ax.plot([0, 0], [0.0, 3.0], 'k', zorder=10, clip_on=False)
|
|
||||||
xx = np.arange(0.0, 1.0*np.pi, 0.01)
|
xx = np.arange(0.0, 1.0*np.pi, 0.01)
|
||||||
prefphases = np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi)
|
prefphases = np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi)
|
||||||
responses = []
|
responses = []
|
||||||
xresponse = 0.475*np.pi
|
xresponse = 0.475*np.pi
|
||||||
for pp in prefphases :
|
for pp, ls, ps in zip(prefphases, [lsE, lsC, lsD, lsB, lsD, lsC, lsE],
|
||||||
|
[psE, psC, psD, psB, psD, psC, psE]) :
|
||||||
yy = np.exp(np.cos(2.0*(xx+pp)))
|
yy = np.exp(np.cos(2.0*(xx+pp)))
|
||||||
ax.plot(xx, yy, color=cm.autumn(2.0*np.abs(pp/np.pi-0.5), 1))
|
#ax.plot(xx, yy, color=cm.autumn(2.0*np.abs(pp/np.pi-0.5), 1))
|
||||||
|
ax.plot(xx, yy, **ls)
|
||||||
y = np.exp(np.cos(2.0*(xresponse+pp)))
|
y = np.exp(np.cos(2.0*(xresponse+pp)))
|
||||||
responses.append(y + rng.randn()*0.25*y)
|
responses.append(y + rng.randn()*0.25*y)
|
||||||
ax.plot(xresponse, y, '.', markersize=20, color=cm.autumn(2.0*np.abs(pp/np.pi-0.5), 1))
|
ax.plot(xresponse, y, **ps)
|
||||||
r=0.3
|
|
||||||
y=-0.8
|
|
||||||
ax.plot([pp-0.5*r*np.cos(pp), pp+0.5*r*np.cos(pp)], [y-r*np.sin(pp), y+r*np.sin(pp)], 'k', lw=6)
|
|
||||||
responses = np.array(responses)
|
responses = np.array(responses)
|
||||||
|
|
||||||
ax = fig.add_axes([lmarg, 0.05, 1.0-rmarg, 0.22])
|
ax = fig.add_subplot(spec[2, 0])
|
||||||
ax.spines['left'].set_visible(False)
|
ax.show_spines('')
|
||||||
ax.spines['right'].set_visible(False)
|
r = 0.3
|
||||||
ax.spines['top'].set_visible(False)
|
ax.set_ylim(-1.1*r, 1.1*r)
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
for pp in prefphases:
|
||||||
ax.get_yaxis().set_visible(False)
|
ax.plot([pp-0.5*r*np.cos(pp), pp+0.5*r*np.cos(pp)], [-r*np.sin(pp), r*np.sin(pp)],
|
||||||
|
colors['black'], lw=6, clip_on=False)
|
||||||
|
|
||||||
|
ax = fig.add_subplot(spec[3, 0])
|
||||||
ax.set_xlim(0.0, np.pi)
|
ax.set_xlim(0.0, np.pi)
|
||||||
ax.set_xticks(np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi))
|
ax.set_xticks(np.arange(0.125*np.pi, 1.*np.pi, 0.125*np.pi))
|
||||||
ax.set_xticklabels([])
|
ax.set_xticklabels([])
|
||||||
ax.set_ylim(-1600, 0)
|
ax.set_ylim(-1600, 0)
|
||||||
|
ax.yaxis.set_major_locator(plt.NullLocator())
|
||||||
ax.set_xlabel('Orientation')
|
ax.set_xlabel('Orientation')
|
||||||
ax.text(-0.2, -800, 'Log-Likelihood', rotation='vertical', va='center')
|
ax.text(-0.2, -800, 'Log-Likelihood', rotation='vertical', va='center')
|
||||||
ax.plot([0, 0], [-1600, 0], 'k', zorder=10, clip_on=False)
|
|
||||||
phases = np.linspace(0.0, 1.1*np.pi, 100)
|
phases = np.linspace(0.0, 1.1*np.pi, 100)
|
||||||
probs = np.zeros((len(responses), len(phases)))
|
probs = np.zeros((len(responses), len(phases)))
|
||||||
for k, (pp, r) in enumerate(zip(prefphases, responses)) :
|
for k, (pp, r) in enumerate(zip(prefphases, responses)) :
|
||||||
@ -95,7 +87,6 @@ ax.annotate('',
|
|||||||
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
||||||
connectionstyle="angle3,angleA=80,angleB=90") )
|
connectionstyle="angle3,angleA=80,angleB=90") )
|
||||||
ax.text(maxp+0.05, -1100, 'most likely\norientation\ngiven the responses')
|
ax.text(maxp+0.05, -1100, 'most likely\norientation\ngiven the responses')
|
||||||
ax.plot(phases, loglikelihood, '-b')
|
ax.plot(phases, loglikelihood, **lsA)
|
||||||
|
|
||||||
plt.savefig('mlecoding.pdf')
|
plt.savefig('mlecoding.pdf')
|
||||||
#plt.show();
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.gridspec as gridspec
|
||||||
|
from plotstyle import *
|
||||||
|
|
||||||
plt.xkcd()
|
fig = plt.figure(figsize=cm_size(figure_width, 1.8*figure_height))
|
||||||
fig = plt.figure( figsize=(6,5) )
|
spec = gridspec.GridSpec(nrows=2, ncols=2, hspace=0.6,
|
||||||
|
**adjust_fs(fig, left=5.5))
|
||||||
|
|
||||||
# the data:
|
# the data:
|
||||||
n = 40
|
n = 40
|
||||||
@ -11,21 +14,17 @@ sigma = 0.5
|
|||||||
rmu = 2.0
|
rmu = 2.0
|
||||||
xd = rng.randn(n)*sigma+rmu
|
xd = rng.randn(n)*sigma+rmu
|
||||||
# and possible pdfs:
|
# and possible pdfs:
|
||||||
x = np.arange( 0.0, 4.0, 0.01 )
|
x = np.arange(0.0, 4.0, 0.01)
|
||||||
mus = [1.5, 2.0, 2.5]
|
mus = [1.5, 2.0, 2.5]
|
||||||
g=np.zeros((len(x), len(mus)))
|
g=np.zeros((len(x), len(mus)))
|
||||||
for k, mu in enumerate(mus) :
|
for k, mu in enumerate(mus) :
|
||||||
g[:,k] = np.exp(-0.5*((x-mu)/sigma)**2.0)/np.sqrt(2.0*np.pi)/sigma
|
g[:,k] = np.exp(-0.5*((x-mu)/sigma)**2.0)/np.sqrt(2.0*np.pi)/sigma
|
||||||
# plot it:
|
# plot it:
|
||||||
ax = fig.add_subplot( 2, 1, 1 )
|
ax = fig.add_subplot(spec[0, :])
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.set_xlim(0.5, 3.5)
|
ax.set_xlim(0.5, 3.5)
|
||||||
ax.set_ylim(-0.02, 0.85)
|
ax.set_ylim(-0.02, 0.85)
|
||||||
ax.set_xticks( np.arange(0, 5))
|
ax.set_xticks(np.arange(0, 5))
|
||||||
ax.set_yticks( np.arange(0, 0.9, 0.2))
|
ax.set_yticks(np.arange(0, 0.9, 0.2))
|
||||||
ax.set_xlabel('x')
|
ax.set_xlabel('x')
|
||||||
ax.set_ylabel('Probability density')
|
ax.set_ylabel('Probability density')
|
||||||
s = 1
|
s = 1
|
||||||
@ -36,14 +35,14 @@ for mu in mus :
|
|||||||
ax.annotate('', xy=(mu, 0.02), xycoords='data',
|
ax.annotate('', xy=(mu, 0.02), xycoords='data',
|
||||||
xytext=(mu, 0.75), textcoords='data',
|
xytext=(mu, 0.75), textcoords='data',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
||||||
connectionstyle=cs), zorder=1 )
|
connectionstyle=cs), zorder=1)
|
||||||
if mu > rmu :
|
if mu > rmu :
|
||||||
ax.text(mu-0.1, 0.04, '?', zorder=1, ha='right')
|
ax.text(mu-0.1, 0.04, '?', zorder=1, ha='right')
|
||||||
else :
|
else :
|
||||||
ax.text(mu+0.1, 0.04, '?', zorder=1)
|
ax.text(mu+0.1, 0.04, '?', zorder=1)
|
||||||
for k in range(len(mus)) :
|
for k, ls in enumerate([lsCm, lsBm, lsDm]) :
|
||||||
ax.plot(x, g[:,k], zorder=5)
|
ax.plot(x, g[:,k], zorder=5, **ls)
|
||||||
ax.scatter(xd, 0.05*rng.rand(len(xd))+0.2, s=30, zorder=10)
|
ax.plot(xd, 0.05*rng.rand(len(xd))+0.2, zorder=10, **psAm)
|
||||||
|
|
||||||
# likelihood:
|
# likelihood:
|
||||||
thetas=np.arange(1.5, 2.6, 0.01)
|
thetas=np.arange(1.5, 2.6, 0.01)
|
||||||
@ -52,48 +51,38 @@ for i, theta in enumerate(thetas) :
|
|||||||
ps[:,i]=np.exp(-0.5*((xd-theta)/sigma)**2.0)/np.sqrt(2.0*np.pi)/sigma
|
ps[:,i]=np.exp(-0.5*((xd-theta)/sigma)**2.0)/np.sqrt(2.0*np.pi)/sigma
|
||||||
p=np.prod(ps,axis=0)
|
p=np.prod(ps,axis=0)
|
||||||
# plot it:
|
# plot it:
|
||||||
ax = fig.add_subplot( 2, 2, 3 )
|
ax = fig.add_subplot(spec[1, 0])
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.set_xlabel(r'Parameter $\theta$')
|
ax.set_xlabel(r'Parameter $\theta$')
|
||||||
ax.set_ylabel('Likelihood')
|
ax.set_ylabel('Likelihood')
|
||||||
ax.set_xticks( np.arange(1.6, 2.5, 0.4))
|
ax.set_xticks(np.arange(1.6, 2.5, 0.4))
|
||||||
ax.annotate('Maximum',
|
ax.annotate('Maximum',
|
||||||
xy=(2.0, 5.5e-11), xycoords='data',
|
xy=(2.0, 5.5e-11), xycoords='data',
|
||||||
xytext=(1.0, 1.1), textcoords='axes fraction', ha='right',
|
xytext=(1.0, 1.1), textcoords='axes fraction', ha='right',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
|
||||||
connectionstyle="angle3,angleA=10,angleB=70") )
|
connectionstyle="angle3,angleA=10,angleB=70"))
|
||||||
ax.annotate('',
|
ax.annotate('',
|
||||||
xy=(2.0, 0), xycoords='data',
|
xy=(2.0, 0), xycoords='data',
|
||||||
xytext=(2.0, 5e-11), textcoords='data',
|
xytext=(2.0, 5e-11), textcoords='data',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
||||||
connectionstyle="angle3,angleA=90,angleB=80") )
|
connectionstyle="angle3,angleA=90,angleB=80"))
|
||||||
ax.plot(thetas,p)
|
ax.plot(thetas, p, **lsAm)
|
||||||
|
|
||||||
ax = fig.add_subplot( 2, 2, 4 )
|
ax = fig.add_subplot(spec[1, 1])
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.set_xlabel(r'Parameter $\theta$')
|
ax.set_xlabel(r'Parameter $\theta$')
|
||||||
ax.set_ylabel('Log-Likelihood')
|
ax.set_ylabel('Log-Likelihood')
|
||||||
ax.set_ylim(-50,-20)
|
ax.set_ylim(-50,-20)
|
||||||
ax.set_xticks( np.arange(1.6, 2.5, 0.4))
|
ax.set_xticks(np.arange(1.6, 2.5, 0.4))
|
||||||
ax.set_yticks( np.arange(-50, -19, 10.0))
|
ax.set_yticks(np.arange(-50, -19, 10.0))
|
||||||
ax.annotate('Maximum',
|
ax.annotate('Maximum',
|
||||||
xy=(2.0, -23), xycoords='data',
|
xy=(2.0, -23), xycoords='data',
|
||||||
xytext=(1.0, 1.1), textcoords='axes fraction', ha='right',
|
xytext=(1.0, 1.1), textcoords='axes fraction', ha='right',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5),
|
||||||
connectionstyle="angle3,angleA=10,angleB=70") )
|
connectionstyle="angle3,angleA=10,angleB=70"))
|
||||||
ax.annotate('',
|
ax.annotate('',
|
||||||
xy=(2.0, -50), xycoords='data',
|
xy=(2.0, -50), xycoords='data',
|
||||||
xytext=(2.0, -26), textcoords='data',
|
xytext=(2.0, -26), textcoords='data',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
arrowprops=dict(arrowstyle="->", relpos=(0.5,0.5),
|
||||||
connectionstyle="angle3,angleA=80,angleB=100") )
|
connectionstyle="angle3,angleA=80,angleB=100"))
|
||||||
ax.plot(thetas,np.log(p))
|
ax.plot(thetas,np.log(p), **lsAm)
|
||||||
|
|
||||||
plt.tight_layout();
|
|
||||||
plt.savefig('mlemean.pdf')
|
plt.savefig('mlemean.pdf')
|
||||||
#plt.show();
|
|
||||||
|
@ -2,9 +2,10 @@ import numpy as np
|
|||||||
import scipy.stats as st
|
import scipy.stats as st
|
||||||
import scipy.optimize as opt
|
import scipy.optimize as opt
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
from plotstyle import *
|
||||||
|
|
||||||
plt.xkcd()
|
fig, (ax1, ax2) = plt.subplots(1, 2)
|
||||||
fig = plt.figure( figsize=(6,3) )
|
fig.subplots_adjust(**adjust_fs(fig, right=1.0))
|
||||||
|
|
||||||
# the data:
|
# the data:
|
||||||
n = 100
|
n = 100
|
||||||
@ -23,27 +24,23 @@ a = st.gamma.fit(xd, 5.0)
|
|||||||
yf = st.gamma.pdf(xx, *a)
|
yf = st.gamma.pdf(xx, *a)
|
||||||
|
|
||||||
# plot it:
|
# plot it:
|
||||||
ax = fig.add_subplot( 1, 2, 1 )
|
ax1.set_xlim(0, 10.0)
|
||||||
ax.spines['right'].set_visible(False)
|
ax1.set_ylim(0.0, 0.42)
|
||||||
ax.spines['top'].set_visible(False)
|
ax1.set_xticks(np.arange(0, 11, 2))
|
||||||
ax.yaxis.set_ticks_position('left')
|
ax1.set_yticks(np.arange(0, 0.42, 0.1))
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
ax1.set_xlabel('x')
|
||||||
ax.set_xlim(0, 10.0)
|
ax1.set_ylabel('Probability density')
|
||||||
ax.set_ylim(0.0, 0.42)
|
ax1.plot(xx, yy, label='pdf', **lsB)
|
||||||
ax.set_xticks( np.arange(0, 11, 2))
|
ax1.plot(xx, yf, label='mle', **lsCm)
|
||||||
ax.set_yticks( np.arange(0, 0.42, 0.1))
|
|
||||||
ax.set_xlabel('x')
|
|
||||||
ax.set_ylabel('Probability density')
|
|
||||||
ax.plot(xx, yy, '-', lw=5, color='#ff0000', label='pdf')
|
|
||||||
ax.plot(xx, yf, '-', lw=2, color='#ffcc00', label='mle')
|
|
||||||
kernel = st.gaussian_kde(xd)
|
kernel = st.gaussian_kde(xd)
|
||||||
x = kernel(xd)
|
x = kernel(xd)
|
||||||
x /= np.max(x)
|
x /= np.max(x)
|
||||||
ax.scatter(xd, 0.05*x*(rng.rand(len(xd))-0.5)+0.05, s=30, zorder=10)
|
sigma = 0.07
|
||||||
ax.legend(loc='upper right', frameon=False)
|
ax1.plot(xd, sigma*x*(rng.rand(len(xd))-0.5)+sigma, zorder=10, **psAm)
|
||||||
|
ax1.legend(loc='upper right')
|
||||||
|
|
||||||
# histogram:
|
# histogram:
|
||||||
h,b = np.histogram(xd, np.arange(0, 8.5, 1), density=True)
|
h,b = np.histogram(xd, np.arange(0, 8.4, 0.5), density=True)
|
||||||
|
|
||||||
# fit histogram:
|
# fit histogram:
|
||||||
def gammapdf(x, n, l, s) :
|
def gammapdf(x, n, l, s) :
|
||||||
@ -52,22 +49,15 @@ popt, pcov = opt.curve_fit(gammapdf, b[:-1]+0.5*(b[1]-b[0]), h)
|
|||||||
yc = st.gamma.pdf(xx, *popt)
|
yc = st.gamma.pdf(xx, *popt)
|
||||||
|
|
||||||
# plot it:
|
# plot it:
|
||||||
ax = fig.add_subplot( 1, 2, 2 )
|
ax2.set_xlim(0, 10.0)
|
||||||
ax.spines['right'].set_visible(False)
|
ax2.set_xticks(np.arange(0, 11, 2))
|
||||||
ax.spines['top'].set_visible(False)
|
ax2.set_xlabel('x')
|
||||||
ax.yaxis.set_ticks_position('left')
|
ax2.set_ylim(0.0, 0.42)
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
ax2.set_yticks(np.arange(0, 0.42, 0.1))
|
||||||
ax.set_xlim(0, 10.0)
|
ax2.set_ylabel('Probability density')
|
||||||
ax.set_xticks( np.arange(0, 11, 2))
|
ax2.plot(xx, yy, label='pdf', **lsB)
|
||||||
ax.set_xlabel('x')
|
ax2.plot(xx, yc, label='fit', **lsCm)
|
||||||
ax.set_ylim(0.0, 0.42)
|
ax2.bar(b[:-1], h, np.diff(b), **fsA)
|
||||||
ax.set_yticks( np.arange(0, 0.42, 0.1))
|
ax2.legend(loc='upper right')
|
||||||
ax.set_ylabel('Probability density')
|
|
||||||
ax.plot(xx, yy, '-', lw=5, color='#ff0000', label='pdf')
|
|
||||||
ax.plot(xx, yc, '-', lw=2, color='#ffcc00', label='fit')
|
|
||||||
ax.bar(b[:-1], h, np.diff(b))
|
|
||||||
ax.legend(loc='upper right', frameon=False)
|
|
||||||
|
|
||||||
plt.tight_layout();
|
|
||||||
plt.savefig('mlepdf.pdf')
|
plt.savefig('mlepdf.pdf')
|
||||||
#plt.show();
|
|
||||||
|
@ -1,9 +1,14 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import scipy.stats as st
|
import scipy.stats as st
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.gridspec as gridspec
|
||||||
|
from plotstyle import *
|
||||||
|
|
||||||
plt.xkcd()
|
fig = plt.figure()
|
||||||
fig = plt.figure(figsize=(6, 3))
|
spec = gridspec.GridSpec(nrows=1, ncols=2, wspace=0.3,
|
||||||
|
**adjust_fs(fig, left=5.5))
|
||||||
|
spec1 = gridspec.GridSpecFromSubplotSpec(1, 2, spec[0, 0], width_ratios=[3, 1], wspace=0.0)
|
||||||
|
spec2 = gridspec.GridSpecFromSubplotSpec(1, 2, spec[0, 1], width_ratios=[3, 1], wspace=0.0)
|
||||||
|
|
||||||
# the line:
|
# the line:
|
||||||
slope = 2.0
|
slope = 2.0
|
||||||
@ -20,71 +25,44 @@ slopef = np.sum(x*y)/np.sum(x*x)
|
|||||||
yf = slopef*xx
|
yf = slopef*xx
|
||||||
|
|
||||||
# plot it:
|
# plot it:
|
||||||
ax = fig.add_axes([0.09, 0.02, 0.33, 0.9])
|
ax = fig.add_subplot(spec1[0, 0])
|
||||||
ax.spines['left'].set_position('zero')
|
|
||||||
ax.spines['bottom'].set_position('zero')
|
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.get_xaxis().set_tick_params(direction='inout', length=10, width=2)
|
|
||||||
ax.get_yaxis().set_tick_params(direction='inout', length=10, width=2)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.set_xticks(np.arange(0.0, 4.1))
|
ax.set_xticks(np.arange(0.0, 4.1))
|
||||||
ax.set_xlim(0.0, 4.2)
|
ax.set_xlim(0.0, 4.2)
|
||||||
ax.set_ylim(-4.0, 12.0)
|
ax.set_ylim(-4.0, 12.0)
|
||||||
ax.set_xlabel('x')
|
ax.set_xlabel('x')
|
||||||
ax.set_ylabel('y')
|
ax.set_ylabel('y')
|
||||||
ax.scatter(x, y, label='data', s=40, zorder=10)
|
ax.plot(x, y, label='data', zorder=10, **psAm)
|
||||||
ax.plot(xx, yy, 'r', lw=5.0, color='#ff0000', label='original', zorder=5)
|
ax.plot(xx, yy, label='original', zorder=5, **lsB)
|
||||||
ax.plot(xx, yf, '--', lw=1.0, color='#ffcc00', label='fit', zorder=7)
|
ax.plot(xx, yf, label='fit', zorder=7, **lsCm)
|
||||||
ax.legend(loc='upper left', bbox_to_anchor=(0.0, 1.15), frameon=False)
|
ax.legend(loc='upper left', bbox_to_anchor=(0.0, 1.15))
|
||||||
|
|
||||||
ax = fig.add_axes([0.42, 0.02, 0.07, 0.9])
|
ax = fig.add_subplot(spec1[0, 1])
|
||||||
ax.spines['left'].set_position('zero')
|
ax.show_spines('l')
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.spines['bottom'].set_visible(False)
|
|
||||||
ax.get_yaxis().set_tick_params(direction='inout', length=10, width=2)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.set_xticks([])
|
ax.set_xticks([])
|
||||||
ax.set_ylim(-4.0, 12.0)
|
ax.set_ylim(-4.0, 12.0)
|
||||||
ax.set_yticks([])
|
ax.set_yticks([])
|
||||||
bins = np.arange(-4.0, 12.1, 0.75)
|
bins = np.arange(-4.0, 12.1, 0.75)
|
||||||
ax.hist(y, bins, orientation='horizontal', zorder=10)
|
ax.hist(y, bins, orientation='horizontal', zorder=10, **fsA)
|
||||||
|
|
||||||
ax = fig.add_axes([0.6, 0.02, 0.33, 0.9])
|
ax = fig.add_subplot(spec2[0, 0])
|
||||||
ax.spines['left'].set_position('zero')
|
|
||||||
ax.spines['bottom'].set_position('zero')
|
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.get_xaxis().set_tick_params(direction='inout', length=10, width=2)
|
|
||||||
ax.get_yaxis().set_tick_params(direction='inout', length=10, width=2)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.xaxis.set_ticks_position('bottom')
|
|
||||||
ax.set_xticks(np.arange(0.0, 4.1))
|
ax.set_xticks(np.arange(0.0, 4.1))
|
||||||
ax.set_xlim(0.0, 4.2)
|
ax.set_xlim(0.0, 4.2)
|
||||||
ax.set_ylim(-4.0, 12.0)
|
ax.set_ylim(-4.0, 12.0)
|
||||||
ax.set_xlabel('x')
|
ax.set_xlabel('x')
|
||||||
ax.set_ylabel('y - mx')
|
ax.set_ylabel('y - mx')
|
||||||
ax.scatter(x, y - slopef*x, label='residuals', s=40, zorder=10)
|
ax.plot(x, y - slopef*x, label='residuals', zorder=10, **psAm)
|
||||||
#ax.legend(loc='upper left', bbox_to_anchor=(0.0, 1.0), frameon=False)
|
#ax.legend(loc='upper left', bbox_to_anchor=(0.0, 1.0))
|
||||||
|
|
||||||
ax = fig.add_axes([0.93, 0.02, 0.07, 0.9])
|
ax = fig.add_subplot(spec2[0, 1])
|
||||||
ax.spines['left'].set_position('zero')
|
ax.show_spines('l')
|
||||||
ax.spines['right'].set_visible(False)
|
|
||||||
ax.spines['top'].set_visible(False)
|
|
||||||
ax.spines['bottom'].set_visible(False)
|
|
||||||
ax.get_yaxis().set_tick_params(direction='inout', length=10, width=2)
|
|
||||||
ax.yaxis.set_ticks_position('left')
|
|
||||||
ax.set_xlim(0.0, 11.0)
|
ax.set_xlim(0.0, 11.0)
|
||||||
ax.set_xticks([])
|
ax.set_xticks([])
|
||||||
ax.set_ylim(-4.0, 12.0)
|
ax.set_ylim(-4.0, 12.0)
|
||||||
ax.set_yticks([])
|
ax.set_yticks([])
|
||||||
r = y - slopef*x
|
r = y - slopef*x
|
||||||
ax.hist(r, bins, orientation='horizontal', zorder=10)
|
ax.hist(r, bins, orientation='horizontal', zorder=10, **fsA)
|
||||||
gx = np.arange(-4.0, 12.1, 0.1)
|
gx = np.arange(-4.0, 12.1, 0.1)
|
||||||
gy = st.norm.pdf(gx, np.mean(r), np.std(r))
|
gy = st.norm.pdf(gx, np.mean(r), np.std(r))
|
||||||
ax.plot(1.0+gy*29.0, gx, 'r', lw=2, zorder=5)
|
ax.plot(1.0+gy*29.0, gx, zorder=5, **lsBm)
|
||||||
|
|
||||||
plt.savefig('mlepropline.pdf')
|
plt.savefig('mlepropline.pdf')
|
||||||
#plt.show();
|
|
||||||
|
51
plotstyle.py
51
plotstyle.py
@ -13,19 +13,16 @@ ppi = 72.0
|
|||||||
|
|
||||||
# colors:
|
# colors:
|
||||||
colors = {}
|
colors = {}
|
||||||
colors['red'] = '#CC0000'
|
colors['red'] = '#DD1000'
|
||||||
colors['orange'] = '#FF9900'
|
colors['orange'] = '#FF9900'
|
||||||
colors['lightorange'] = '#FFCC00'
|
colors['lightorange'] = '#FFCC00'
|
||||||
colors['yellow'] = '#FFFF66'
|
colors['yellow'] = '#FFF720'
|
||||||
colors['green'] = '#99FF00'
|
colors['green'] = '#99FF00'
|
||||||
colors['blue'] = '#0010CC'
|
colors['blue'] = '#0010CC'
|
||||||
colors['gray'] = '#A7A7A7'
|
colors['gray'] = '#A7A7A7'
|
||||||
colors['black'] = '#000000'
|
colors['black'] = '#000000'
|
||||||
colors['white'] = '#FFFFFF'
|
colors['white'] = '#FFFFFF'
|
||||||
|
|
||||||
#colors_bendalab_vivid['red'] = '#D71000'
|
|
||||||
#colors_bendalab_vivid['orange'] = '#FF9000'
|
|
||||||
#colors_bendalab_vivid['yellow'] = '#FFF700'
|
|
||||||
#colors_bendalab_vivid['green'] = '#30D700'
|
#colors_bendalab_vivid['green'] = '#30D700'
|
||||||
#colors_bendalab_vivid['blue'] = '#0020C0'
|
#colors_bendalab_vivid['blue'] = '#0020C0'
|
||||||
|
|
||||||
@ -36,11 +33,14 @@ mainline = {'linestyle': '-', 'linewidth': lwthick}
|
|||||||
minorline = {'linestyle': '-', 'linewidth': lwthin}
|
minorline = {'linestyle': '-', 'linewidth': lwthin}
|
||||||
largemarker = {'marker': 'o', 'markersize': 9, 'markeredgecolor': colors['white'], 'markeredgewidth': 1}
|
largemarker = {'marker': 'o', 'markersize': 9, 'markeredgecolor': colors['white'], 'markeredgewidth': 1}
|
||||||
smallmarker = {'marker': 'o', 'markersize': 6, 'markeredgecolor': colors['white'], 'markeredgewidth': 1}
|
smallmarker = {'marker': 'o', 'markersize': 6, 'markeredgecolor': colors['white'], 'markeredgewidth': 1}
|
||||||
filllw = 1.0
|
largelinepoints = {'linestyle': '-', 'linewidth': lwthick, 'marker': 'o', 'markersize': 10, 'markeredgecolor': colors['white'], 'markeredgewidth': 1}
|
||||||
fillalpha = 0.5
|
smalllinepoints = {'linestyle': '-', 'linewidth': lwthin, 'marker': 'o', 'markersize': 7, 'markeredgecolor': colors['white'], 'markeredgewidth': 1}
|
||||||
|
filllw = 1
|
||||||
|
fillec = colors['white']
|
||||||
|
fillalpha = 0.4
|
||||||
|
|
||||||
# helper lines:
|
# helper lines:
|
||||||
lsSpine = {'c': colors['black'], 'linestyle': '-', 'linewidth': 1}
|
lsSpine = {'c': colors['black'], 'linestyle': '-', 'linewidth': 1, 'clip_on': False}
|
||||||
lsGrid = {'c': colors['gray'], 'linestyle': '--', 'linewidth': 1}
|
lsGrid = {'c': colors['gray'], 'linestyle': '--', 'linewidth': 1}
|
||||||
lsMarker = {'c': colors['black'], 'linestyle': '-', 'linewidth': 2}
|
lsMarker = {'c': colors['black'], 'linestyle': '-', 'linewidth': 2}
|
||||||
|
|
||||||
@ -52,9 +52,13 @@ lsMarker = {'c': colors['black'], 'linestyle': '-', 'linewidth': 2}
|
|||||||
# - plain style with a thick/solid line (e.g. lsA), and
|
# - plain style with a thick/solid line (e.g. lsA), and
|
||||||
# - minor style with a thinner or dashed line (e.g. lsAm).
|
# - minor style with a thinner or dashed line (e.g. lsAm).
|
||||||
|
|
||||||
# Point styles come in two variants:
|
# Point (marker) styles come in two variants:
|
||||||
# - plain style with large solid markers (e.g. psA), and
|
# - plain style with large solid markers (e.g. psB), and
|
||||||
# - minor style with smaller markers (e.g. lsBm).
|
# - minor style with smaller markers (e.g. psBm).
|
||||||
|
|
||||||
|
# Linepoint styles (markers connected by lines) come in two variants:
|
||||||
|
# - plain style with large solid markers (e.g. lpsA), and
|
||||||
|
# - minor style with smaller markers (e.g. lpsAm).
|
||||||
|
|
||||||
# Fill styles come in three variants:
|
# Fill styles come in three variants:
|
||||||
# - plain (e.g. fsB) for a solid fill color and a darker edge color,
|
# - plain (e.g. fsB) for a solid fill color and a darker edge color,
|
||||||
@ -65,13 +69,19 @@ lsA = dict({'color': colors['blue']}, **mainline)
|
|||||||
lsAm = dict({'color': colors['blue']}, **minorline)
|
lsAm = dict({'color': colors['blue']}, **minorline)
|
||||||
psA = dict({'color': colors['blue'], 'linestyle': 'none'}, **largemarker)
|
psA = dict({'color': colors['blue'], 'linestyle': 'none'}, **largemarker)
|
||||||
psAm = dict({'color': colors['blue'], 'linestyle': 'none'}, **smallmarker)
|
psAm = dict({'color': colors['blue'], 'linestyle': 'none'}, **smallmarker)
|
||||||
|
lpsA = dict({'color': colors['blue']}, **largelinepoints)
|
||||||
|
lpsAm = dict({'color': colors['blue']}, **smalllinepoints)
|
||||||
|
fsA = {'facecolor': colors['blue'], 'edgecolor': fillec, 'linewidth': filllw}
|
||||||
|
fsAs = {'facecolor': colors['blue'], 'edgecolor': 'none'}
|
||||||
fsAa = {'facecolor': colors['blue'], 'edgecolor': 'none', 'alpha': fillalpha}
|
fsAa = {'facecolor': colors['blue'], 'edgecolor': 'none', 'alpha': fillalpha}
|
||||||
|
|
||||||
lsB = dict({'color': colors['red']}, **mainline)
|
lsB = dict({'color': colors['red']}, **mainline)
|
||||||
lsBm = dict({'color': colors['red']}, **minorline)
|
lsBm = dict({'color': colors['red']}, **minorline)
|
||||||
psB = dict({'color': colors['red'], 'linestyle': 'none'}, **largemarker)
|
psB = dict({'color': colors['red'], 'linestyle': 'none'}, **largemarker)
|
||||||
psBm = dict({'color': colors['red'], 'linestyle': 'none'}, **smallmarker)
|
psBm = dict({'color': colors['red'], 'linestyle': 'none'}, **smallmarker)
|
||||||
fsB = {'facecolor': colors['red'], 'edgecolor': colors['black'], 'linewidth': filllw}
|
lpsB = dict({'color': colors['red']}, **largelinepoints)
|
||||||
|
lpsBm = dict({'color': colors['red']}, **smalllinepoints)
|
||||||
|
fsB = {'facecolor': colors['red'], 'edgecolor': fillec, 'linewidth': filllw}
|
||||||
fsBs = {'facecolor': colors['red'], 'edgecolor': 'none'}
|
fsBs = {'facecolor': colors['red'], 'edgecolor': 'none'}
|
||||||
fsBa = {'facecolor': colors['red'], 'edgecolor': 'none', 'alpha': fillalpha}
|
fsBa = {'facecolor': colors['red'], 'edgecolor': 'none', 'alpha': fillalpha}
|
||||||
|
|
||||||
@ -79,17 +89,25 @@ lsC = dict({'color': colors['lightorange']}, **mainline)
|
|||||||
lsCm = dict({'color': colors['lightorange']}, **minorline)
|
lsCm = dict({'color': colors['lightorange']}, **minorline)
|
||||||
psC = dict({'color': colors['lightorange'], 'linestyle': 'none'}, **largemarker)
|
psC = dict({'color': colors['lightorange'], 'linestyle': 'none'}, **largemarker)
|
||||||
psCm = dict({'color': colors['lightorange'], 'linestyle': 'none'}, **smallmarker)
|
psCm = dict({'color': colors['lightorange'], 'linestyle': 'none'}, **smallmarker)
|
||||||
fsC = {'facecolor': colors['lightorange'], 'edgecolor': colors['black'], 'linewidth': filllw}
|
fsC = {'facecolor': colors['lightorange'], 'edgecolor': fillec, 'linewidth': filllw}
|
||||||
fsCs = {'facecolor': colors['lightorange'], 'edgecolor': 'none'}
|
fsCs = {'facecolor': colors['lightorange'], 'edgecolor': 'none'}
|
||||||
fsCa = {'facecolor': colors['lightorange'], 'edgecolor': 'none', 'alpha': fillalpha}
|
fsCa = {'facecolor': colors['lightorange'], 'edgecolor': 'none', 'alpha': fillalpha}
|
||||||
|
|
||||||
fsD = {'facecolor': colors['orange'], 'edgecolor': colors['black'], 'linewidth': filllw}
|
lsD = dict({'color': colors['orange']}, **mainline)
|
||||||
|
lsDm = dict({'color': colors['orange']}, **minorline)
|
||||||
|
psD = dict({'color': colors['orange'], 'linestyle': 'none'}, **largemarker)
|
||||||
|
psDm = dict({'color': colors['orange'], 'linestyle': 'none'}, **smallmarker)
|
||||||
|
fsD = {'facecolor': colors['orange'], 'edgecolor': fillec, 'linewidth': filllw}
|
||||||
fsDs = {'facecolor': colors['orange'], 'edgecolor': 'none'}
|
fsDs = {'facecolor': colors['orange'], 'edgecolor': 'none'}
|
||||||
|
|
||||||
fsE = {'facecolor': colors['yellow'], 'edgecolor': colors['black'], 'linewidth': filllw}
|
lsE = dict({'color': colors['yellow']}, **mainline)
|
||||||
|
lsEm = dict({'color': colors['yellow']}, **minorline)
|
||||||
|
psE = dict({'color': colors['yellow'], 'linestyle': 'none'}, **largemarker)
|
||||||
|
psEm = dict({'color': colors['yellow'], 'linestyle': 'none'}, **smallmarker)
|
||||||
|
fsE = {'facecolor': colors['yellow'], 'edgecolor': fillec, 'linewidth': filllw}
|
||||||
fsEs = {'facecolor': colors['yellow'], 'edgecolor': 'none'}
|
fsEs = {'facecolor': colors['yellow'], 'edgecolor': 'none'}
|
||||||
|
|
||||||
fsF = {'facecolor': colors['green'], 'edgecolor': colors['black'], 'linewidth': filllw}
|
fsF = {'facecolor': colors['green'], 'edgecolor': fillec, 'linewidth': filllw}
|
||||||
fsFs = {'facecolor': colors['green'], 'edgecolor': 'none'}
|
fsFs = {'facecolor': colors['green'], 'edgecolor': 'none'}
|
||||||
|
|
||||||
# factor for scaling widths of bars in a bar plot:
|
# factor for scaling widths of bars in a bar plot:
|
||||||
@ -323,6 +341,7 @@ def common_format():
|
|||||||
mpl.rcParams['grid.color'] = lsGrid['c']
|
mpl.rcParams['grid.color'] = lsGrid['c']
|
||||||
mpl.rcParams['grid.linestyle'] = lsGrid['linestyle']
|
mpl.rcParams['grid.linestyle'] = lsGrid['linestyle']
|
||||||
mpl.rcParams['grid.linewidth'] = lsGrid['linewidth']
|
mpl.rcParams['grid.linewidth'] = lsGrid['linewidth']
|
||||||
|
mpl.rcParams['legend.frameon'] = False
|
||||||
mpl.rcParams['axes.facecolor'] = 'none'
|
mpl.rcParams['axes.facecolor'] = 'none'
|
||||||
mpl.rcParams['axes.edgecolor'] = lsSpine['c']
|
mpl.rcParams['axes.edgecolor'] = lsSpine['c']
|
||||||
mpl.rcParams['axes.linewidth'] = lsSpine['linewidth']
|
mpl.rcParams['axes.linewidth'] = lsSpine['linewidth']
|
||||||
|
@ -16,11 +16,11 @@ def create_data():
|
|||||||
|
|
||||||
|
|
||||||
def plot_data(ax, x, y, c):
|
def plot_data(ax, x, y, c):
|
||||||
ax.scatter(x, y, marker='o', color=colors['blue'], s=40, zorder=10)
|
ax.plot(x, y, zorder=10, **psAm)
|
||||||
xx = np.linspace(2.1, 3.9, 100)
|
xx = np.linspace(2.1, 3.9, 100)
|
||||||
ax.plot(xx, c*xx**3.0, color=colors['red'], lw=2, zorder=5)
|
ax.plot(xx, c*xx**3.0, zorder=5, **lsBm)
|
||||||
for cc in [0.25*c, 0.5*c, 2.0*c, 4.0*c]:
|
for cc in [0.25*c, 0.5*c, 2.0*c, 4.0*c]:
|
||||||
ax.plot(xx, cc*xx**3.0, color=colors['orange'], lw=1.5, zorder=5)
|
ax.plot(xx, cc*xx**3.0, zorder=5, **lsDm)
|
||||||
ax.set_xlabel('Size x', 'm')
|
ax.set_xlabel('Size x', 'm')
|
||||||
ax.set_ylabel('Weight y', 'kg')
|
ax.set_ylabel('Weight y', 'kg')
|
||||||
ax.set_xlim(2, 4)
|
ax.set_xlim(2, 4)
|
||||||
@ -42,15 +42,15 @@ def plot_data_errors(ax, x, y, c):
|
|||||||
xytext=(3.4, 70), textcoords='data', ha='left',
|
xytext=(3.4, 70), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.9,1.0),
|
arrowprops=dict(arrowstyle="->", relpos=(0.9,1.0),
|
||||||
connectionstyle="angle3,angleA=50,angleB=-30") )
|
connectionstyle="angle3,angleA=50,angleB=-30") )
|
||||||
ax.scatter(x[:40], y[:40], color=colors['blue'], s=10, zorder=0)
|
ax.plot(x[:40], y[:40], zorder=0, **psAm)
|
||||||
inxs = [3, 10, 11, 17, 18, 21, 28, 30, 33]
|
inxs = [3, 10, 11, 17, 18, 21, 28, 30, 33]
|
||||||
ax.scatter(x[inxs], y[inxs], color=colors['blue'], s=40, zorder=10)
|
ax.plot(x[inxs], y[inxs], zorder=10, **psA)
|
||||||
xx = np.linspace(2.1, 3.9, 100)
|
xx = np.linspace(2.1, 3.9, 100)
|
||||||
ax.plot(xx, c*xx**3.0, color=colors['red'], lw=2)
|
ax.plot(xx, c*xx**3.0, **lsBm)
|
||||||
for i in inxs :
|
for i in inxs :
|
||||||
xx = [x[i], x[i]]
|
xx = [x[i], x[i]]
|
||||||
yy = [c*x[i]**3.0, y[i]]
|
yy = [c*x[i]**3.0, y[i]]
|
||||||
ax.plot(xx, yy, color=colors['orange'], lw=2, zorder=5)
|
ax.plot(xx, yy, zorder=5, **lsDm)
|
||||||
|
|
||||||
def plot_error_hist(ax, x, y, c):
|
def plot_error_hist(ax, x, y, c):
|
||||||
ax.set_xlabel('Squared error')
|
ax.set_xlabel('Squared error')
|
||||||
@ -67,7 +67,7 @@ def plot_error_hist(ax, x, y, c):
|
|||||||
xytext=(800, 3), textcoords='data', ha='left',
|
xytext=(800, 3), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.2),
|
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.2),
|
||||||
connectionstyle="angle3,angleA=10,angleB=90") )
|
connectionstyle="angle3,angleA=10,angleB=90") )
|
||||||
ax.hist(errors, bins, color=colors['orange'])
|
ax.hist(errors, bins, **fsC)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,11 +16,11 @@ if __name__ == "__main__":
|
|||||||
fig, ax = plt.subplots(figsize=cm_size(figure_width, 1.4*figure_height))
|
fig, ax = plt.subplots(figsize=cm_size(figure_width, 1.4*figure_height))
|
||||||
fig.subplots_adjust(**adjust_fs(left=6.0, right=1.2))
|
fig.subplots_adjust(**adjust_fs(left=6.0, right=1.2))
|
||||||
|
|
||||||
ax.scatter(x, y, marker='o', color=colors['blue'], s=40, zorder=10)
|
ax.plot(x, y, zorder=10, **psA)
|
||||||
xx = np.linspace(2.1, 3.9, 100)
|
xx = np.linspace(2.1, 3.9, 100)
|
||||||
ax.plot(xx, c*xx**3.0, color=colors['red'], lw=3, zorder=5)
|
ax.plot(xx, c*xx**3.0, zorder=5, **lsB)
|
||||||
for cc in [0.25*c, 0.5*c, 2.0*c, 4.0*c]:
|
for cc in [0.25*c, 0.5*c, 2.0*c, 4.0*c]:
|
||||||
ax.plot(xx, cc*xx**3.0, color=colors['orange'], lw=2, zorder=5)
|
ax.plot(xx, cc*xx**3.0, zorder=5, **lsDm)
|
||||||
ax.set_xlabel('Size x', 'm')
|
ax.set_xlabel('Size x', 'm')
|
||||||
ax.set_ylabel('Weight y', 'kg')
|
ax.set_ylabel('Weight y', 'kg')
|
||||||
ax.set_xlim(2, 4)
|
ax.set_xlim(2, 4)
|
||||||
|
@ -39,9 +39,9 @@ def plot_mse(ax, x, y, c, cs):
|
|||||||
for i, cc in enumerate(ccs):
|
for i, cc in enumerate(ccs):
|
||||||
mses[i] = np.mean((y-(cc*x**3.0))**2.0)
|
mses[i] = np.mean((y-(cc*x**3.0))**2.0)
|
||||||
|
|
||||||
ax.plot(ccs, mses, colors['blue'], lw=2, zorder=10)
|
ax.plot(ccs, mses, zorder=10, **lsAm)
|
||||||
ax.scatter(cs, ms, color=colors['red'], s=40, zorder=20)
|
ax.plot(cs[:12], ms[:12], zorder=20, **psB)
|
||||||
ax.scatter(cs[-1], ms[-1], color=colors['orange'], s=60, zorder=30)
|
ax.plot(cs[-1], ms[-1], zorder=30, **psC)
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
ax.annotate('',
|
ax.annotate('',
|
||||||
xy=(cs[i+1]+0.2, ms[i+1]), xycoords='data',
|
xy=(cs[i+1]+0.2, ms[i+1]), xycoords='data',
|
||||||
@ -56,12 +56,12 @@ def plot_mse(ax, x, y, c, cs):
|
|||||||
ax.set_yticks(np.arange(0, 30001, 10000))
|
ax.set_yticks(np.arange(0, 30001, 10000))
|
||||||
|
|
||||||
def plot_descent(ax, cs, mses):
|
def plot_descent(ax, cs, mses):
|
||||||
ax.plot(np.arange(len(mses))+1, mses, '-o', c=colors['red'], mew=0, ms=8)
|
ax.plot(np.arange(len(mses))+1, mses, **lpsBm)
|
||||||
ax.set_xlabel('Iteration')
|
ax.set_xlabel('Iteration')
|
||||||
#ax.set_ylabel('Mean squared error')
|
#ax.set_ylabel('Mean squared error')
|
||||||
ax.set_xlim(0, 10.5)
|
ax.set_xlim(0, 12.5)
|
||||||
ax.set_ylim(0, 25000)
|
ax.set_ylim(0, 25000)
|
||||||
ax.set_xticks(np.arange(0.0, 10.1, 2.0))
|
ax.set_xticks(np.arange(0.0, 12.1, 2.0))
|
||||||
ax.set_yticks(np.arange(0, 30001, 10000))
|
ax.set_yticks(np.arange(0, 30001, 10000))
|
||||||
ax.set_yticklabels([])
|
ax.set_yticklabels([])
|
||||||
|
|
||||||
|
@ -4,8 +4,7 @@ from plotstyle import *
|
|||||||
|
|
||||||
plain_style()
|
plain_style()
|
||||||
|
|
||||||
fig = plt.figure( figsize=(2.5,3.4) )
|
fig, ax = plt.subplots(figsize=(2.5,3.4))
|
||||||
ax = fig.add_subplot(1, 1, 1)
|
|
||||||
|
|
||||||
# parabula:
|
# parabula:
|
||||||
x1 = -0.2
|
x1 = -0.2
|
||||||
@ -14,7 +13,7 @@ x = np.linspace(x1, x2, 200)
|
|||||||
y = x*x
|
y = x*x
|
||||||
ax.set_xlim(x1, x2)
|
ax.set_xlim(x1, x2)
|
||||||
ax.set_ylim(-0.2, 0.7)
|
ax.set_ylim(-0.2, 0.7)
|
||||||
ax.plot(x, y, c=colors['blue'], lw=4, zorder=0)
|
ax.plot(x, y, zorder=0, **lsA)
|
||||||
# secant:
|
# secant:
|
||||||
x = np.asarray([0.1, 0.7])
|
x = np.asarray([0.1, 0.7])
|
||||||
y = x*x
|
y = x*x
|
||||||
@ -22,33 +21,33 @@ ax.set_xticks(x)
|
|||||||
ax.set_yticks(y)
|
ax.set_yticks(y)
|
||||||
ax.set_xticklabels(['$x$','$x+\Delta x$'])
|
ax.set_xticklabels(['$x$','$x+\Delta x$'])
|
||||||
ax.set_yticklabels(['',''])
|
ax.set_yticklabels(['',''])
|
||||||
ax.scatter(x, y, c=colors['red'], edgecolor='none', s=150, zorder=10)
|
ax.plot(x, y, zorder=10, **psB)
|
||||||
# function values:
|
# function values:
|
||||||
ax.plot([x[0], x[0], x1],[-0.2, y[0], y[0]], '--k', lw=1, zorder=6)
|
ax.plot([x[0], x[0], x1],[-0.2, y[0], y[0]], zorder=6, **lsGrid)
|
||||||
ax.plot([x[1], x[1], x1],[-0.2, y[1], y[1]], '--k', lw=1, zorder=6)
|
ax.plot([x[1], x[1], x1],[-0.2, y[1], y[1]], zorder=6, **lsGrid)
|
||||||
ax.text(x1+0.05, y[0]+0.05, '$f(x)$', zorder=6)
|
ax.text(x1+0.05, y[0]+0.05, '$f(x)$', zorder=6)
|
||||||
ax.text(x1+0.05, y[1]+0.05, '$f(x+\Delta x)$', zorder=6)
|
ax.text(x1+0.05, y[1]+0.05, '$f(x+\Delta x)$', zorder=6)
|
||||||
# slope triangle:
|
# slope triangle:
|
||||||
ax.plot([x[0], x[1], x[1]],[y[0], y[0], y[1]], '-k', lw=2, zorder=7)
|
ax.plot([x[0], x[1], x[1]],[y[0], y[0], y[1]], zorder=7, **lsMarker)
|
||||||
ax.text(np.mean(x), y[0]-0.08, '$\Delta x$', ha='center', zorder=7)
|
ax.text(np.mean(x), y[0]-0.07, '$\Delta x$', ha='center', zorder=7)
|
||||||
ax.text(x[1]+0.05, np.mean(y), '$f(x+\Delta x)-f(x)$', va='center', rotation='vertical', zorder=7)
|
ax.text(x[1]+0.05, np.mean(y), '$f(x+\Delta x)-f(x)$', va='center', rotation='vertical', zorder=7)
|
||||||
# secant line:
|
# secant line:
|
||||||
m = np.diff(y)/np.diff(x)
|
m = np.diff(y)/np.diff(x)
|
||||||
xl = [x1, x2]
|
xl = [x1, x2]
|
||||||
yl = m*(xl-x[0])+y[0]
|
yl = m*(xl-x[0])+y[0]
|
||||||
ax.plot(xl, yl, c=colors['red'], lw=3, zorder=7)
|
ax.plot(xl, yl, zorder=7, **lsBm)
|
||||||
|
|
||||||
# derivative:
|
# derivative:
|
||||||
md = 2.0*x[0]
|
md = 2.0*x[0]
|
||||||
yl = md*(xl-x[0])+y[0]
|
yl = md*(xl-x[0])+y[0]
|
||||||
ax.plot(xl, yl, c=colors['yellow'], lw=3, zorder=5)
|
ax.plot(xl, yl, zorder=5, **lsDm)
|
||||||
|
|
||||||
# limit:
|
# limit:
|
||||||
for ml in np.linspace(md, m, 5)[1:] :
|
for ml in np.linspace(md, m, 5)[1:] :
|
||||||
yl = ml*(xl-x[0])+y[0]
|
yl = ml*(xl-x[0])+y[0]
|
||||||
xs = 0.5*(ml+np.sqrt(ml*ml-4.0*(ml*x[0]-y[0])))
|
xs = 0.5*(ml+np.sqrt(ml*ml-4.0*(ml*x[0]-y[0])))
|
||||||
ax.scatter([xs], [xs*xs], c=colors['orange'], edgecolor='none', s=80, zorder=3)
|
ax.plot([xs], [xs*xs], zorder=3, **psC)
|
||||||
ax.plot(xl, yl, c=colors['orange'], lw=2, zorder=3)
|
ax.plot(xl, yl, zorder=3, **lsCm)
|
||||||
|
|
||||||
fig.subplots_adjust(**adjust_fs(fig, 0.5, 0.5, 1.4, 0.5))
|
fig.subplots_adjust(**adjust_fs(fig, 0.5, 0.5, 1.4, 0.5))
|
||||||
plt.savefig('derivative.pdf')
|
plt.savefig('derivative.pdf')
|
||||||
|
@ -14,7 +14,7 @@ def create_data():
|
|||||||
|
|
||||||
|
|
||||||
def plot_data(ax, x, y):
|
def plot_data(ax, x, y):
|
||||||
ax.scatter(x, y, marker='o', color=colors['blue'], s=40)
|
ax.plot(x, y, **psA)
|
||||||
ax.set_xlabel('Input x')
|
ax.set_xlabel('Input x')
|
||||||
ax.set_ylabel('Output y')
|
ax.set_ylabel('Output y')
|
||||||
ax.set_xlim(0, 120)
|
ax.set_xlim(0, 120)
|
||||||
@ -24,10 +24,10 @@ def plot_data(ax, x, y):
|
|||||||
|
|
||||||
|
|
||||||
def plot_data_slopes(ax, x, y, m, n):
|
def plot_data_slopes(ax, x, y, m, n):
|
||||||
ax.scatter(x, y, marker='o', color=colors['blue'], s=40)
|
ax.plot(x, y, **psA)
|
||||||
xx = np.asarray([2, 118])
|
xx = np.asarray([2, 118])
|
||||||
for i in np.linspace(0.3*m, 2.0*m, 5):
|
for i in np.linspace(0.3*m, 2.0*m, 5):
|
||||||
ax.plot(xx, i*xx+n, color=colors['red'], lw=2)
|
ax.plot(xx, i*xx+n, **lsBm)
|
||||||
ax.set_xlabel('Input x')
|
ax.set_xlabel('Input x')
|
||||||
#ax.set_ylabel('Output y')
|
#ax.set_ylabel('Output y')
|
||||||
ax.set_xlim(0, 120)
|
ax.set_xlim(0, 120)
|
||||||
@ -37,10 +37,10 @@ def plot_data_slopes(ax, x, y, m, n):
|
|||||||
|
|
||||||
|
|
||||||
def plot_data_intercepts(ax, x, y, m, n):
|
def plot_data_intercepts(ax, x, y, m, n):
|
||||||
ax.scatter(x, y, marker='o', color=colors['blue'], s=40)
|
ax.plot(x, y, **psA)
|
||||||
xx = np.asarray([2, 118])
|
xx = np.asarray([2, 118])
|
||||||
for i in np.linspace(n-1*n, n+1*n, 5):
|
for i in np.linspace(n-1*n, n+1*n, 5):
|
||||||
ax.plot(xx, m*xx + i, color=colors['red'], lw=2)
|
ax.plot(xx, m*xx + i, **lsBm)
|
||||||
ax.set_xlabel('Input x')
|
ax.set_xlabel('Input x')
|
||||||
#ax.set_ylabel('Output y')
|
#ax.set_ylabel('Output y')
|
||||||
ax.set_xlim(0, 120)
|
ax.set_xlim(0, 120)
|
||||||
|
@ -25,15 +25,15 @@ def plot_data(ax, x, y, m, n):
|
|||||||
xytext=(80, -50), textcoords='data', ha='left',
|
xytext=(80, -50), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.9,1.0),
|
arrowprops=dict(arrowstyle="->", relpos=(0.9,1.0),
|
||||||
connectionstyle="angle3,angleA=50,angleB=-30") )
|
connectionstyle="angle3,angleA=50,angleB=-30") )
|
||||||
ax.scatter(x[:40], y[:40], color=colors['blue'], s=10, zorder=0)
|
ax.plot(x[:40], y[:40], zorder=0, **psAm)
|
||||||
inxs = [3, 13, 16, 19, 25, 34, 36]
|
inxs = [3, 13, 16, 19, 25, 34, 36]
|
||||||
ax.scatter(x[inxs], y[inxs], color=colors['blue'], s=40, zorder=10)
|
ax.plot(x[inxs], y[inxs], zorder=10, **psA)
|
||||||
xx = np.asarray([2, 118])
|
xx = np.asarray([2, 118])
|
||||||
ax.plot(xx, m*xx+n, color=colors['red'], lw=2)
|
ax.plot(xx, m*xx+n, **lsBm)
|
||||||
for i in inxs :
|
for i in inxs :
|
||||||
xx = [x[i], x[i]]
|
xx = [x[i], x[i]]
|
||||||
yy = [m*x[i]+n, y[i]]
|
yy = [m*x[i]+n, y[i]]
|
||||||
ax.plot(xx, yy, color=colors['orange'], lw=2, zorder=5)
|
ax.plot(xx, yy, zorder=5, **lsDm)
|
||||||
|
|
||||||
|
|
||||||
def plot_error_hist(ax, x, y, m, n):
|
def plot_error_hist(ax, x, y, m, n):
|
||||||
@ -51,7 +51,7 @@ def plot_error_hist(ax, x, y, m, n):
|
|||||||
xytext=(350, 20), textcoords='data', ha='left',
|
xytext=(350, 20), textcoords='data', ha='left',
|
||||||
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.2),
|
arrowprops=dict(arrowstyle="->", relpos=(0.0,0.2),
|
||||||
connectionstyle="angle3,angleA=10,angleB=90") )
|
connectionstyle="angle3,angleA=10,angleB=90") )
|
||||||
ax.hist(errors, bins, color=colors['orange'])
|
ax.hist(errors, bins, **fsD)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,17 +24,17 @@ ax.set_ylim(-0.05, 1.05)
|
|||||||
ax.set_yticks(np.arange(0.0, 1.1, 0.2))
|
ax.set_yticks(np.arange(0.0, 1.1, 0.2))
|
||||||
|
|
||||||
med = xs[cdf>=0.5][0]
|
med = xs[cdf>=0.5][0]
|
||||||
ax.plot([-3.2, med, med], [0.5, 0.5, 0.0], zorder=-5, **lsMarker)
|
ax.plot([-3.2, med, med], [0.5, 0.5, 0.0], zorder=-5, **lsSpine)
|
||||||
ax.text(-2.8, 0.55, 'F=0.5')
|
ax.text(-2.8, 0.55, 'F=0.5')
|
||||||
ax.text(0.15, 0.25, 'median at %.2f' % med)
|
ax.text(0.15, 0.25, 'median at %.2f' % med)
|
||||||
|
|
||||||
q3 = xs[cdf>=0.75][0]
|
q3 = xs[cdf>=0.75][0]
|
||||||
ax.plot([-3.2, q3, q3], [0.75, 0.75, 0.0], zorder=-5, **lsMarker)
|
ax.plot([-3.2, q3, q3], [0.75, 0.75, 0.0], zorder=-5, **lsSpine)
|
||||||
ax.text(-2.8, 0.8, 'F=0.75')
|
ax.text(-2.8, 0.8, 'F=0.75')
|
||||||
ax.text(0.8, 0.5, '3. quartile at %.2f' % q3)
|
ax.text(0.8, 0.5, '3. quartile at %.2f' % q3)
|
||||||
|
|
||||||
p = cdf[xs>=-1.0][0]
|
p = cdf[xs>=-1.0][0]
|
||||||
ax.plot([-3.2, -1.0, -1.0], [p, p, 0.0], zorder=-5, **lsMarker)
|
ax.plot([-3.2, -1.0, -1.0], [p, p, 0.0], zorder=-5, **lsSpine)
|
||||||
ax.text(-2.8, 0.2, 'F=%.2f' % p)
|
ax.text(-2.8, 0.2, 'F=%.2f' % p)
|
||||||
ax.text(-0.9, 0.05, '-1')
|
ax.text(-0.9, 0.05, '-1')
|
||||||
|
|
||||||
|
@ -25,6 +25,6 @@ ax2.set_xticks(range(1, 7))
|
|||||||
ax2.set_xlabel('x')
|
ax2.set_xlabel('x')
|
||||||
ax2.set_ylim(0, 0.23)
|
ax2.set_ylim(0, 0.23)
|
||||||
ax2.set_ylabel('Probability')
|
ax2.set_ylabel('Probability')
|
||||||
ax2.plot([0.2, 6.8], [1.0/6.0, 1.0/6.0], zorder=1, **lsAm)
|
ax2.plot([0.2, 6.8], [1.0/6.0, 1.0/6.0], zorder=-10, **lsAm)
|
||||||
ax2.hist([x2, x1], bins, normed=True, zorder=10, **fs)
|
ax2.hist([x2, x1], bins, normed=True, zorder=-5, **fs)
|
||||||
fig.savefig('diehistograms.pdf')
|
fig.savefig('diehistograms.pdf')
|
||||||
|
@ -14,7 +14,7 @@ scatterpos = 1.0
|
|||||||
barpos = 2.5
|
barpos = 2.5
|
||||||
boxpos = 4.0
|
boxpos = 4.0
|
||||||
|
|
||||||
fig = plt.figure(figsize=cm_size(figure_width, 1.2*figure_height))
|
fig = plt.figure(figsize=cm_size(figure_width, 1.1*figure_height))
|
||||||
spec = gridspec.GridSpec(nrows=1, ncols=2, width_ratios=[3, 1], wspace=0.1,
|
spec = gridspec.GridSpec(nrows=1, ncols=2, width_ratios=[3, 1], wspace=0.1,
|
||||||
**adjust_fs(fig, left=4.0))
|
**adjust_fs(fig, left=4.0))
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ ax.set_xticklabels([])
|
|||||||
ax = fig.add_subplot(spec[0, 0])
|
ax = fig.add_subplot(spec[0, 0])
|
||||||
ax.set_xlim(0.0, 4.8)
|
ax.set_xlim(0.0, 4.8)
|
||||||
ax.set_xticks([scatterpos, barpos, boxpos])
|
ax.set_xticks([scatterpos, barpos, boxpos])
|
||||||
ax.set_xticklabels(['(1) data', '(2) bar\n plot', '(3) box-\nwhisker'])
|
ax.set_xticklabels(['(1) data', '(2) bar\n plot', '(3) box-\nwhisker'], fontsize='medium')
|
||||||
ax.set_ylabel('x')
|
ax.set_ylabel('x')
|
||||||
ax.set_ylim( 0.0, 8.0)
|
ax.set_ylim( 0.0, 8.0)
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ ax = fig.add_subplot(spec[0, 1])
|
|||||||
ax.set_yticklabels([])
|
ax.set_yticklabels([])
|
||||||
ax.set_ylim( 0.0, 8.0)
|
ax.set_ylim( 0.0, 8.0)
|
||||||
ax.set_xticks(np.arange(0.0, 0.4, 0.1))
|
ax.set_xticks(np.arange(0.0, 0.4, 0.1))
|
||||||
ax.set_xlabel('(4) p(x)')
|
ax.set_xlabel('(4) pdf')
|
||||||
bw = 0.75
|
bw = 0.75
|
||||||
bins = np.arange(0, 8.0+bw, bw)
|
bins = np.arange(0, 8.0+bw, bw)
|
||||||
h, b = np.histogram(data, bins)
|
h, b = np.histogram(data, bins)
|
||||||
|
@ -60,7 +60,7 @@ ax = fig.add_subplot(spec[:, 1])
|
|||||||
ax.set_xlabel('x')
|
ax.set_xlabel('x')
|
||||||
ax.set_xlim(-3.2, 3.2)
|
ax.set_xlim(-3.2, 3.2)
|
||||||
ax.set_xticks(np.arange(-3.0, 3.1, 1.0))
|
ax.set_xticks(np.arange(-3.0, 3.1, 1.0))
|
||||||
ax.set_ylabel('Probab. density p(x)')
|
ax.set_ylabel('Prob. density p(x)')
|
||||||
ax.set_ylim(0.0, 0.49)
|
ax.set_ylim(0.0, 0.49)
|
||||||
ax.set_yticks(np.arange(0.0, 0.41, 0.1))
|
ax.set_yticks(np.arange(0.0, 0.41, 0.1))
|
||||||
kd, xx = kerneldensity(r, -3.2, 3.2, 0.2)
|
kd, xx = kerneldensity(r, -3.2, 3.2, 0.2)
|
||||||
|
@ -115,17 +115,9 @@ function \mcode{median()} computes the median.
|
|||||||
writing reliable code!
|
writing reliable code!
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
\begin{figure}[t]
|
|
||||||
\includegraphics[width=1\textwidth]{quartile}
|
|
||||||
\titlecaption{\label{quartilefig} Median and quartiles of a normal
|
|
||||||
distribution.}{ The interquartile range between the first and the
|
|
||||||
third quartile contains 50\,\% of the data and contains the
|
|
||||||
median.}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
The distribution of data can be further characterized by the position
|
The distribution of data can be further characterized by the position
|
||||||
of its \entermde[quartile]{Quartil}{quartiles}. Neighboring quartiles are
|
of its \entermde[quartile]{Quartil}{quartiles}. Neighboring quartiles are
|
||||||
separated by 25\,\% of the data (\figref{quartilefig}).
|
separated by 25\,\% of the data.% (\figref{quartilefig}).
|
||||||
\entermde[percentile]{Perzentil}{Percentiles} allow to characterize the
|
\entermde[percentile]{Perzentil}{Percentiles} allow to characterize the
|
||||||
distribution of the data in more detail. The 3$^{\rm rd}$ quartile
|
distribution of the data in more detail. The 3$^{\rm rd}$ quartile
|
||||||
corresponds to the 75$^{\rm th}$ percentile, because 75\,\% of the
|
corresponds to the 75$^{\rm th}$ percentile, because 75\,\% of the
|
||||||
@ -156,15 +148,13 @@ median that extends from the 1$^{\rm st}$ to the 3$^{\rm rd}$
|
|||||||
quartile. The whiskers mark the minimum and maximum value of the data
|
quartile. The whiskers mark the minimum and maximum value of the data
|
||||||
set (\figref{displayunivariatedatafig} (3)).
|
set (\figref{displayunivariatedatafig} (3)).
|
||||||
|
|
||||||
\begin{exercise}{univariatedata.m}{}
|
% \begin{figure}[t]
|
||||||
Generate 40 normally distributed random numbers with a mean of 2 and
|
% \includegraphics[width=1\textwidth]{quartile}
|
||||||
illustrate their distribution in a box-whisker plot
|
% \titlecaption{\label{quartilefig} Median and quartiles of a normal
|
||||||
(\code{boxplot()} function), with a bar and errorbar illustrating
|
% distribution.}{ The interquartile range between the first and the
|
||||||
the mean and standard deviation (\code{bar()}, \code{errorbar()}),
|
% third quartile contains 50\,\% of the data and contains the
|
||||||
and the data themselves jittered randomly (as in
|
% median.}
|
||||||
\figref{displayunivariatedatafig}). How to interpret the different
|
% \end{figure}
|
||||||
plots?
|
|
||||||
\end{exercise}
|
|
||||||
|
|
||||||
% \begin{exercise}{boxwhisker.m}{}
|
% \begin{exercise}{boxwhisker.m}{}
|
||||||
% Generate a $40 \times 10$ matrix of random numbers and
|
% Generate a $40 \times 10$ matrix of random numbers and
|
||||||
@ -201,6 +191,16 @@ Histograms are often used to estimate the
|
|||||||
\enterm[probability!distribution]{probability distribution}
|
\enterm[probability!distribution]{probability distribution}
|
||||||
(\determ[Wahrscheinlichkeits!-verteilung]{Wahrscheinlichkeitsverteilung}) of the data values.
|
(\determ[Wahrscheinlichkeits!-verteilung]{Wahrscheinlichkeitsverteilung}) of the data values.
|
||||||
|
|
||||||
|
\begin{exercise}{univariatedata.m}{}
|
||||||
|
Generate 40 normally distributed random numbers with a mean of 2 and
|
||||||
|
illustrate their distribution in a box-whisker plot
|
||||||
|
(\code{boxplot()} function), with a bar and errorbar illustrating
|
||||||
|
the mean and standard deviation (\code{bar()}, \code{errorbar()}),
|
||||||
|
and the data themselves jittered randomly (as in
|
||||||
|
\figref{displayunivariatedatafig}). How to interpret the different
|
||||||
|
plots?
|
||||||
|
\end{exercise}
|
||||||
|
|
||||||
\subsection{Probabilities}
|
\subsection{Probabilities}
|
||||||
In the frequentist interpretation of probability, the
|
In the frequentist interpretation of probability, the
|
||||||
\enterm{probability} (\determ{Wahrscheinlichkeit}) of an event
|
\enterm{probability} (\determ{Wahrscheinlichkeit}) of an event
|
||||||
@ -252,7 +252,7 @@ real number like, e.g., 0.123456789 is zero, because there are
|
|||||||
uncountable many real numbers.
|
uncountable many real numbers.
|
||||||
|
|
||||||
We can only ask for the probability to get a measurement value in some
|
We can only ask for the probability to get a measurement value in some
|
||||||
range. For example, we can ask for the probability $P(1.2<x<1.3)$ to
|
range. For example, we can ask for the probability $P(0<x<1)$ to
|
||||||
get a measurement between 0 and 1 (\figref{pdfprobabilitiesfig}). More
|
get a measurement between 0 and 1 (\figref{pdfprobabilitiesfig}). More
|
||||||
generally, we want to know the probability $P(x_0<x<x_1)$ to obtain a
|
generally, we want to know the probability $P(x_0<x<x_1)$ to obtain a
|
||||||
measurement between $x_0$ and $x_1$. If we define the width of the
|
measurement between $x_0$ and $x_1$. If we define the width of the
|
||||||
@ -280,7 +280,7 @@ inverse of the unit of the data values --- hence the name ``density''.
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
The probability to get a value $x$ between $x_1$ and $x_2$ is
|
The probability to get a value $x$ between $x_1$ and $x_2$ is
|
||||||
given by the integral of the probability density:
|
given by an integral over the probability density:
|
||||||
\[ P(x_1 < x < x2) = \int\limits_{x_1}^{x_2} p(x) \, dx \; . \]
|
\[ P(x_1 < x < x2) = \int\limits_{x_1}^{x_2} p(x) \, dx \; . \]
|
||||||
Because the probability to get any value $x$ is one, the integral of
|
Because the probability to get any value $x$ is one, the integral of
|
||||||
the probability density over the whole real axis must be one:
|
the probability density over the whole real axis must be one:
|
||||||
@ -329,7 +329,7 @@ values fall within each bin (\figref{pdfhistogramfig} left).
|
|||||||
observe?
|
observe?
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
To turn such histograms to estimates of probability densities they
|
To turn such histograms into estimates of probability densities they
|
||||||
need to be normalized such that according to \eqnref{pdfnorm} their
|
need to be normalized such that according to \eqnref{pdfnorm} their
|
||||||
integral equals one. While histograms of categorical data are
|
integral equals one. While histograms of categorical data are
|
||||||
normalized such that their sum equals one, here we need to integrate
|
normalized such that their sum equals one, here we need to integrate
|
||||||
@ -343,7 +343,7 @@ and the
|
|||||||
\[ p(x_i) = \frac{n_i}{A} = \frac{n_i}{\Delta x \sum_{i=1}^N n_i} =
|
\[ p(x_i) = \frac{n_i}{A} = \frac{n_i}{\Delta x \sum_{i=1}^N n_i} =
|
||||||
\frac{n_i}{N \Delta x} \; .\]
|
\frac{n_i}{N \Delta x} \; .\]
|
||||||
A histogram needs to be divided by both the sum of the frequencies
|
A histogram needs to be divided by both the sum of the frequencies
|
||||||
$n_i$ and the bin width $\Delta x$ to results in an estimate of the
|
$n_i$ and the bin width $\Delta x$ to result in an estimate of the
|
||||||
corresponding probability density. Only then can the distribution be
|
corresponding probability density. Only then can the distribution be
|
||||||
compared with other distributions and in particular with theoretical
|
compared with other distributions and in particular with theoretical
|
||||||
probability density functions like the one of the normal distribution
|
probability density functions like the one of the normal distribution
|
||||||
@ -371,19 +371,20 @@ probability density functions like the one of the normal distribution
|
|||||||
A problem of using histograms for estimating probability densities is
|
A problem of using histograms for estimating probability densities is
|
||||||
that they have hard bin edges. Depending on where the bin edges are
|
that they have hard bin edges. Depending on where the bin edges are
|
||||||
placed a data value falls in one or the other bin. As a result the
|
placed a data value falls in one or the other bin. As a result the
|
||||||
shape histogram depends on the exact position of its bins
|
shape of the resulting histogram depends on the exact position of its
|
||||||
(\figref{kerneldensityfig} left).
|
bins (\figref{kerneldensityfig} left).
|
||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{kerneldensity}
|
\includegraphics[width=1\textwidth]{kerneldensity}
|
||||||
\titlecaption{\label{kerneldensityfig} Kernel densities.}{Left: The
|
\titlecaption{\label{kerneldensityfig} Kernel densities.}{The
|
||||||
histogram-based estimation of the probability density is dependent
|
histogram-based estimation of the probability density depends on
|
||||||
on the position of the bins. In the bottom plot the bins have
|
the position of the bins (left). In the bottom plot the bins have
|
||||||
been shifted by half a bin width (here $\Delta x=0.4$) and as a
|
been shifted by half a bin width (here $\Delta x=0.4$) and as a
|
||||||
result details of the probability density look different. Look,
|
result details of the probability density look different. Look,
|
||||||
for example, at the height of the largest bin. Right: In contrast,
|
for example, at the height of the largest bin. In contrast, a
|
||||||
a kernel density is uniquely defined for a given kernel width
|
kernel density is uniquely defined for a given kernel width
|
||||||
(here Gaussian kernels with standard deviation of $\sigma=0.2$).}
|
(right, Gaussian kernels with standard deviation of
|
||||||
|
$\sigma=0.2$).}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
To avoid this problem so called \entermde[kernel
|
To avoid this problem so called \entermde[kernel
|
||||||
@ -460,7 +461,6 @@ and percentiles can be determined from the inverse cumulative function.
|
|||||||
Use the estimate to compute the value of the 5\,\% percentile.
|
Use the estimate to compute the value of the 5\,\% percentile.
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
\newpage
|
|
||||||
\section{Correlations}
|
\section{Correlations}
|
||||||
|
|
||||||
Until now we described properties of univariate data sets. In
|
Until now we described properties of univariate data sets. In
|
||||||
|
Reference in New Issue
Block a user