# How to Plot a Chi-Square Distribution in Python

The Chi-square distribution is widely used in statistics and data analysis, especially in hypothesis testing and in the areas of statistical inference.

In this tutorial, we will go through how to plot a Chi-square distribution using Python. We’ll use two popular Python libraries: numpy for numerical computation and matplotlib for plotting. We’ll also use the scipy library, which contains a variety of high-level science and engineering modules, including the stats module, which we will use to create our Chi-square distribution.

First, let’s import the necessary libraries:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import chi2

### Step 1: Understanding the Chi-Square Distribution

Before we dive into the coding part, let’s first understand what a Chi-square distribution is. The Chi-square distribution is a special case of the Gamma distribution and is one of the most commonly used probability distributions in inferential statistics, notably in hypothesis testing or in constructing confidence intervals.

In the Chi-square distribution, there is only one parameter, ‘k’, which is called the degree of freedom. The degree of freedom of a Chi-square distribution is usually the number of independent variables involved.

### Step 2: Generate Data for Chi-Square Distribution

We will generate data for a Chi-square distribution using numpy and scipy.

The numpy.linspace function generates evenly spaced numbers over a specified range. The scipy.stats.chi2.pdf function gives the probability density function for the chi-square distribution.

Here is how we can generate a Chi-square distribution with 4 degrees of freedom:

df = 4  # degrees of freedom
x = np.linspace(chi2.ppf(0.01, df), chi2.ppf(0.99, df), 100)
y = chi2.pdf(x, df)

In this example, we are generating 100 points between the 1st percentile and the 99th percentile of the Chi-square distribution.

### Step 3: Plotting the Chi-Square Distribution

Now that we have our data, we can plot it using the matplotlib library. The matplotlib.pyplot.plot function is used to draw a line from one point to other points.

plt.figure(figsize=(10,6))
plt.plot(x, y, 'b-', lw=5, alpha=0.6, label='chi2 pdf')
plt.title('Chi-Square Distribution')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend(loc='best')
plt.grid(True)
plt.show() 

This code will produce a plot of a Chi-square distribution with 4 degrees of freedom. The x-axis represents the value of the variable and the y-axis represents the frequency of each value.

### Step 4: Adjusting the Degree of Freedom

The shape of the Chi-square distribution depends on the degree of freedom. You can experiment with different degrees of freedom to see how the shape of the distribution changes.

# List of degrees of freedom to try
dfs = [2, 4, 6, 9]

# Create a new figure
plt.figure(figsize=(10,6))

# Generate and plot a Chi-square distribution for each degree of freedom
for df in dfs:
x = np.linspace(chi2.ppf(0.01, df), chi2.ppf(0.99, df), 100)
y = chi2.pdf(x, df)
plt.plot(x, y, lw=5, alpha=0.6, label=f'df={df}')

# Set the title and labels
plt.title('Chi-Square Distributions with Different Degrees of Freedom')
plt.xlabel('Value')
plt.ylabel('Frequency')

# Add a legend and grid
plt.legend(loc='best')
plt.grid(True)

# Display the plot
plt.show()

This code will produce a plot of four Chi-square distributions, each with a different degree of freedom. You can see how the distribution becomes more symmetric as the degree of freedom increases.

In conclusion, Python, with libraries such as numpy, scipy, and matplotlib, provides a powerful environment for statistical analysis and visualization. The Chi-square distribution is just one of many distributions that you can explore and visualize using these tools.