Python How to plot a function with multiple parameters on the same set of axes

AI Thread Summary
The discussion revolves around troubleshooting a Python code snippet that uses SciPy and Matplotlib to compute and plot the photoionization cross-section based on various parameters. The user is seeking help to identify issues in the code, particularly regarding the labeling of plot lines for different values of gamma. Suggestions include modifying the label in the plotting function to ensure each gamma value is distinctly represented in the legend. Despite attempts to implement these changes, the user reports no improvement in the output. The conversation emphasizes the importance of unique labels for clarity in data visualization and hints at the possibility of other underlying issues affecting the plot. The exchange concludes with a reminder to keep exploring solutions even when initial attempts do not yield results.
Daniel Lima
Messages
3
Reaction score
2
TL;DR Summary
I'm currently trying to plot a graph wich describes a photoionization cross section as a function of incident photon energy for optical transition in a semiconductor for different values of the γ factor. But the the outcome is pretty different of what it should be, as one can see in the attachments
I attached a file with some explanations of the variables in the code and the plot that I should get. I don't know what is wrong. Any help will appreciated.
Python:
from scipy.integrate import quad
import numpy as np
from scipy.special import gamma as gamma_function
from scipy.constants import  e
import matplotlib.pyplot as plt

#Constants
epsilon = 13.1          # dielectric constant of the material
gamma_C = 0.5           # donor impurity linewidth
nr = 3.2                # refractive index of semiconductor
flux = 0.0              # Phi in eqn 8 magnetic flux
R = 5.0                 # radius of the quantum ring in nm
hbar = 1.0        # reduced Planck constant in eV
h = 2*np.pi*hbar          # Planck constant in eV
c = 1.0
alpha = e**2/hbar*c
R = 5  # nm
r = np.linspace(0, 6 * R,100)
nu = np.linspace(0,100, 100)
# Function that calculates the integrand
def func(rho):
    betai = gamma**2 / 2.0
    betaf = np.sqrt(1.0 + gamma**4 / 4.0)
    return (gamma * rho)**(betai + betaf) * np.exp(-0.5 * (gamma * rho)**2) * rho**2

def compute_matrix_element(gamma):  
    betai = gamma**2 / 2.0
    betaf = np.sqrt(1.0 + gamma**4 / 4.0)
    integral = quad(func, 0, np.infty)[0]
    first_sqrt  = (1.0 / (2.0**betai * gamma_function(betai + 1)))**0.5
    second_sqrt = (1.0 / (2.0**betaf * gamma_function(betaf + 1)))**0.5
    return gamma**2 / 2.0 / np.pi * R * first_sqrt * second_sqrt * integral

def compute_cross_section(hnu, gamma):
    # function that calculates the photoionisation cross section
    betai = gamma**2 / 2.0
    betaf = np.sqrt(1.0 + gamma**4 / 2.0)
    Ei = gamma**2 * (1.0 + betai) - gamma**4 / 2.0
    Ef = gamma**2 * (1.0 + betaf) - gamma**4 / 2.0
    delta = hbar / np.pi * gamma_C / ( nu - (Ef - Ei )**2 + (hbar * gamma_C)**2)
    matrix_element = compute_matrix_element(gamma)
    return nr / epsilon * 4.0 * np.pi / 3.0 * alpha * h*nu * (abs(matrix_element))**2 * delta

#Plot
plt.figure()
for gamma in [1.0, 1.5, 2.0]:
    plt.plot(h*nu, (compute_cross_section(h*nu, gamma)))
  
plt.legend(['$\gamma = 1.0$', '$\gamma = 1.5$', '$\gamma = 2.0$'] )
plt.ylabel('$\\times$-section $\sigma$ (cm$^{2}$)')
plt.xlabel('Photon energy $h\\nu$ (meV)')
plt.xlim(0,100)
plt.show()
 

Attachments

Last edited by a moderator:
Technology news on Phys.org
Here's an example:

https://www.w3resource.com/graphics/matplotlib/basic/matplotlib-basic-exercise-5.php

It looks like the label setting defines a new plot line within plot so try adding a label option using the gamma value of the loop.

Python:
plt.figure()
for gamma in [1.0, 1.5, 2.0]:
    plt.plot(h*nu, (compute_cross_section(h*nu, gamma)), label="Gamma: "+str(gamma))

or alternatively:

Python:
plt.figure()
for gamma in [1.0, 1.5, 2.0]:
    plt.plot(h*nu, (compute_cross_section(h*nu, gamma)), label="Gamma: %3.1f"%gamma)
 
Not quite sure if I understood what you're saying. Should I change the label to put the gama variable on it?
 
Did you try it?

Yes, the label must be different between plots. I guess you could say its a key, a means to label the plot data as different from other plot dat being plotted. It also likely is used in making the legends box for the chart.
 
I tried but nothing has changed. Could it be something else?
 
Daniel Lima said:
I tried but nothing has changed. Could it be something else?
Uh ... you think ?
 
Daniel Lima said:
I tried but nothing has changed. Could it be something else?
Just remember, Sir:
“When you have exhausted all possibilities, remember this - you haven't.”[/size]

― Thomas Edison
 
  • Like
Likes phinds
Back
Top