[SciPy-User] Matplotlib axis label spacing
Oleksandr Huziy
guziy.sasha at gmail.com
Thu Jul 31 17:38:42 EDT 2014
Hi Barrett:
If I understood correctly (I really do not want to read the code), but
you are not using pcolormesh correctly.
You have to specify coordinates of the corners of the cells and not
the centers. This way the sizes of your x and y coordinate
arrays will be (Nx+1)*(Ny+1) while the size of your data array should be Nx*Ny.
Here I was showing an example of basemap.pcolormesh and how I
constructed the coordinates of the corners from the coordinates of the
centers of the cells:
http://nbviewer.ipython.org/github/guziy/PyNotebooks/blob/master/pcolormesh_example.ipynb
Cheers
2014-07-31 17:22 GMT-04:00 Barrett B <barrett.n.b at gmail.com>:
> (Not sure if seeking help for matplotlib is appropriate here but I thought I
> would give it a try; if not, please direct me to somewhere I can get that
> assistance. Anyway...)
>
> Alright, I'm trying to run the code listed below. It results in the
> following color plot:
>
> http://s14.postimg.org/m16s2mmox/figure_1.png
>
> I need help resolving the x-axis labels, which are the right number but in
> the wrong location. I need them to align evenly with the columns, not be
> scaled proportionally to their actual value. I.e., if I were to plot 0.5,
> 0.6, 0.9, and 2.0 on a real number line from 0 to 4, that is exactly where
> they would land, but I don't want that. How do I get them to space evenly?
>
> Also, once I scale this up to a much, much finer resolution (i.e., many more
> rows and columns), which I will do once I've debugged this, it's not going
> to try to plot every single value on the x-axis, will it? If so, how would I
> fix that to print, say, every 10th value, or a total of only 5 values?
>
> Here is the code. Portions of this simulator not used for this run have been
> removed for brevity:
>
> ##SIMULATOR
>
> import numpy as np
> import matplotlib as mpl
> import matplotlib.pyplot as plt
> from scipy.integrate import odeint
>
> #Network constants
> tau = 20; tau_S = 10000
> g_Ca = 3.6; g_K = 10; g_S = 4 #Siemens
> E_Ca = 25; E_K = -75; E_S = -75 #mV
> E_half_m = -20; E_half_n = -16; E_half_S = -35.245 #mV
> E_exc = 0; E_inh = -75 #mV
> k_m = 12; k_n = 5.6; k_S = 10 #(unitless)
> Theta_syn = -40 #mV
>
> #Initial conditions
> V0_0 = -60
> n0 = np.array([0.6, 0.6])
> S0 = np.array([0.1, 0.1])
>
> #Simulation constants
> stopTime = 30000/100; timeStep = 4 #ms
> tStartTrack = 2000/100 #Time when Lyapunov exponent calculation begins.
> nStartTrack = int(tStartTrack/timeStep) #init step for Lyap expo
>
> #Plotting constants
> doNorm = True; V1VsV2 = False; nVsV = False; timeSeries = True
> pigments = ['r', 'g', 'b'] #Plotting colors.
> toPlot = [0, 1] #Indeces of the neurons to plot, starting at 0.
>
> #Heaviside function. Currently approximated; can be optimised.
> #Continuous equation: Gamma(x) = 1.0/(1 + np.exp(-100*(x - Theta_syn)))
> def Heaviside(x):
> mult = -100.0; diff = mult*(x - Theta_syn);
> output = np.ones_like(x) #Initialized to 1's.
> output[x < Theta_syn] = 0 #0 <= x < Theta_syn.
> output[abs(diff) < 50] = 1.0/(1 + np.exp(diff[abs(diff) < 50]))
> return output
>
> #ODE for Sherman model (Belykh and Reimbayev)
> def f(X, t, params):
> N = len(X)/3
> V = X[:N]; n = X[N:2*N]; S = X[2*N:3*N]
>
> m_inf_E = 1/(1 + np.exp((E_half_m - V)/k_m))
> n_inf_E = 1/(1 + np.exp((E_half_n - V)/k_n))
> S_inf_E = 1/(1 + np.exp((E_half_S - V)/k_S))
>
> I_Ca = g_Ca * m_inf_E * (V - E_Ca)
> I_K = g_K * n * (V - E_K)
> I_S = g_S * S * (V - E_S)
>
> dV = (-I_Ca - I_K - I_S)/tau +\
> g_inh*(E_inh - V)*Heaviside(np.dot(V, connex))/tau
> dn = (n_inf_E - n)/tau
> dS = (S_inf_E - S)/tau_S
> return np.concatenate((dV, dn, dS))
> # else: #if not useForLoops
> # g_inhibitory = params[0]; V1 = params[1]
>
> #Connection matrix. Simulator starts here.
> connex = np.array([[-1,1],
> [1,-1]])
>
> inhibID = 7 #Used for below to avoid commenting out code.
> #List of the inhibitory conductivities (g_inh) to track:
> if inhibID == 7:
> inhibConductivity = np.array([0.5, 0.6, 0.9, 2.0])
>
> voltageID = 5 #Used for below to avoid commenting out code.
> #Starting V1:
> if voltageID == 5:
> startingVoltage1 = np.arange(V0_0 + 10, V0_0 + 30, 5)
> Vsize = startingVoltage1.size
>
> #Whether the g_inh and V1 arrays have just one element:
> justOneRun = (Vsize == 1 and inhibConductivity.size == 1)
> t = np.arange(0, stopTime, timeStep)
>
> #useForLoops = True
> #if useForLoops:
> normVsVSpread = np.zeros((Vsize, inhibConductivity.size))
> for i in range(inhibConductivity.size):
> g_inh = inhibConductivity[i]
> for j in range(Vsize):
> pctComplete = 100*((1.*i + j/Vsize)/inhibConductivity.size)
> #Integration and initial conditions
> V0 = np.array([V0_0, startingVoltage1[j]]); N = len(V0)
>
> #Solver
> soln = odeint(f, np.concatenate((V0, n0, S0)), t, args=(None,))
> E = np.transpose(soln[:, :N])
> n = np.transpose(soln[:, N:N*2])
>
> VArray = E[:2, nStartTrack:]
> maxVSpread = np.amax(VArray) - np.amin(VArray)
> maxNorm = np.amax(abs(VArray[1] - VArray[0]))
> normVsVSpread[j, i] = maxNorm/maxVSpread
> #else: #DO NOT USE YET
> # gInhVsV1 = np.meshgrid(inhibConductivity, startingVoltage1)
> # V0 = np.array([V0_0, None]) #V1 will be dealt with inside the ODE
> # soln = odeint(f, np.concatenate((V0, n0, S0)), t, args=(gInhVsV1,))
>
> #Single-run plotting
> strParameters = 'V0_0 = ' + str(V0[0]) + ' mV; n0 = ' + str(n0) +\
> '; S0 = ' + str(S0)
> mpl.rcParams['image.cmap'] = 'gist_heat'
> fig = plt.subplots()
> plt.title('|V1 - V0|/(Vmax - Vmin).\n' + strParameters)
> plt.xlabel('g_inh (Siemens)')
> plt.ylabel('V1 (mV)')
> # xticks = np.linspace(np.amin(inhibConductivity),\
> # np.amax(inhibConductivity), num = 4)
> # plt.xticks(xticks)
> plt.xticks(inhibConductivity)
> # plt.yticks(startingVoltage1)
> plt.pcolormesh(normVsVSpread)
> plt.colorbar(shrink=0.8)
> plt.show()
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User at scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
--
Sasha
More information about the SciPy-User
mailing list