创建 2 个图,但它们重叠成一个图如何使用 matplotlib 创建 2 个单独的图形?

问题描述

我正在使用 matplotlib 创建密度图和 blox 图,但是当我运行我的代码时,我得到一个图,其中两个图彼此重叠。如何重构我的代码输出两个单独的图形?

链接到图形图像: https://ibb.co/6bCK9MZ

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

def make_t_distribution(sample_size,mean,sd):
    t_sample = stats.t.rvs(sample_size - 1,sd,sample_size) # Random t-distribution sample
    sample_mean = np.mean(t_sample) # sample mean
    sample_std = np.std(t_sample) # sample standard deviation
    t_dist = stats.t(df = sample_size - 1,loc = sample_mean,scale = sample_std) # make a t-distribution based on the sample
    x_axis = np.linspace(t_dist.ppf(0.0001),t_dist.ppf(0.9999),500) # Generate an x-axis based on t-quantile values
    
    return t_dist,x_axis

def make_prob_plot():
    
    ax = plt.axes()
    tdist1,x1=make_t_distribution(10,2)
    tdist2,x2=make_t_distribution(100,2)
    tdist3,x3=make_t_distribution(1000,2)
    tdist4,x4=make_t_distribution(10000,2)
    tdist5,x5=make_t_distribution(500,2)
    
    # density plot
    plt.xlim(-7.5,7.5)
    y1=ax.plot(x1,tdist1.pdf(x1),'-',label="$df=9$")
    y2=ax.plot(x2,tdist2.pdf(x2),':',label="$df=99$")
    y3=ax.plot(x3,tdist3.pdf(x3),'--',label="$df=999$")
    y4=ax.plot(x4,tdist4.pdf(x4),'-.',label="$df=9999$")
    y5=ax.plot(x5,tdist5.pdf(x5),'.',label="$normal$")
    plt.xlabel("Value")
    plt.ylabel("Density")
    plt.title("PDF distribution Comparison $N(\mu=0$,$\sigma=2$)")
    plt.legend()
    
    # Boxplot
    dist1 = np.random.normal(0,2,10)
    dist2 = np.random.normal(0,100)
    dist3 = np.random.normal(0,1000)
    dist4 = np.random.normal(0,10000)
    
    distributions = (dist1,dist2,dist3,dist4)
    plt.Boxplot(distributions,labels = ("df=9","df=99","df=999","df=9999"));
    plt.Boxplot(distributions,widths= .7);
    green_diamond = dict(markerfacecolor='g',marker='D')
    plt.Boxplot(distributions,flierprops=green_diamond);
    
    
    return plt

make_prob_plot()

解决方法

最简洁的方法是使用 plt.subplot 并排使用数字。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import scipy.stats as stats


def make_t_distribution(sample_size,mean,sd):
    t_sample = stats.t.rvs(sample_size - 1,sd,sample_size)  # Random t-distribution sample
    sample_mean = np.mean(t_sample)  # sample mean
    sample_std = np.std(t_sample)  # sample standard deviation
    t_dist = stats.t(df=sample_size - 1,loc=sample_mean,scale=sample_std)  # make a t-distribution based on the sample
    x_axis = np.linspace(t_dist.ppf(0.0001),t_dist.ppf(0.9999),500)  # Generate an x-axis based on t-quantile values

    return t_dist,x_axis


def make_prob_plot():
    figure,axis = plt.subplots(2,1)
    tdist1,x1 = make_t_distribution(10,2)
    tdist2,x2 = make_t_distribution(100,2)
    tdist3,x3 = make_t_distribution(1000,2)
    tdist4,x4 = make_t_distribution(10000,2)
    tdist5,x5 = make_t_distribution(500,2)

    # density plot
    plt.xlim(-7.5,7.5)
    y1 = axis[0].plot(x1,tdist1.pdf(x1),'-',label="$df=9$")
    y2 = axis[0].plot(x2,tdist2.pdf(x2),':',label="$df=99$")
    y3 = axis[0].plot(x3,tdist3.pdf(x3),'--',label="$df=999$")
    y4 = axis[0].plot(x4,tdist4.pdf(x4),'-.',label="$df=9999$")
    y5 = axis[0].plot(x5,tdist5.pdf(x5),'.',label="$Normal$")
    plt.xlabel("Value")
    plt.ylabel("Density")
    plt.title("PDF Distribution Comparison $N(\mu=0$,$\sigma=2$)")
    axis[0].legend()

    # boxplot
    dist1 = np.random.normal(0,2,10)
    dist2 = np.random.normal(0,100)
    dist3 = np.random.normal(0,1000)
    dist4 = np.random.normal(0,10000)

    distributions = (dist1,dist2,dist3,dist4)
    axis[1].boxplot(distributions,labels=("df=9","df=99","df=999","df=9999"));
    axis[1].boxplot(distributions,widths=.7);
    green_diamond = dict(markerfacecolor='g',marker='D')
    axis[1].boxplot(distributions,flierprops=green_diamond);

    return plt


make_prob_plot()

enter image description here