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

Click For Summary

Discussion Overview

The discussion revolves around plotting a function with multiple parameters using Matplotlib in Python. Participants are addressing issues related to labeling different plot lines for varying parameters, specifically the gamma variable, and troubleshooting why the expected changes in the plot are not occurring.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant shares a code snippet and requests help with plotting issues, specifically regarding the labels for different gamma values.
  • Another participant suggests adding a label option in the plot function to differentiate between the gamma values.
  • There is a question about whether changing the label to include the gamma variable is necessary for clarity.
  • Some participants emphasize the importance of unique labels for each plot line to facilitate legend creation.
  • Multiple participants express frustration that their attempts to resolve the issue have not led to any changes in the plot.
  • A quote from Thomas Edison is shared, suggesting perseverance in troubleshooting.

Areas of Agreement / Disagreement

Participants generally agree on the need for unique labels for each plot line, but there is disagreement or uncertainty regarding whether this change resolves the underlying plotting issue, as some report no changes after implementing suggestions.

Contextual Notes

There may be missing assumptions regarding the setup of the plotting environment or other aspects of the code that could affect the output, which have not been fully explored in the discussion.

Daniel Lima
Messages
3
Reaction score
2
TL;DR
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   Reactions: phinds

Similar threads

  • · Replies 7 ·
Replies
7
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
0
Views
2K
  • · Replies 41 ·
2
Replies
41
Views
6K
  • · Replies 6 ·
Replies
6
Views
4K
  • · Replies 2 ·
Replies
2
Views
17K
Replies
7
Views
2K
Replies
1
Views
877