问题描述
我正在使用 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()