matplotlib通过循环在一个轴上的多个图不会更新y_lim

时间:2018-11-13 17:14:06

标签: python matplotlib seaborn

我需要从参数列表(成对的mu和sigma)中创建一个包含多个高斯直方图的图形。我到目前为止所拥有的:

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

def single_camel_plot(mu, sigma, ax):
    x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)
    sns.lineplot(x, stats.norm.pdf(x, mu, sigma), ax=ax)
    ax.set_ylim(bottom=0)

fig, ax = plt.subplots()
mu_sigma_pairs = [(16900, 2100), (18200, 1500)]
for mu, sigma in mu_sigma_pairs:
    single_camel_plot(mu, sigma, ax)

输出是此图。

figure with wrong y_lim

理想情况下,两个直方图将使用单个y轴而不是辅助轴,ylim应该进行调整以适应最高的曲线。

1 个答案:

答案 0 :(得分:1)

您将需要在循环外部设置极限,以便在绘图已满时可以自动缩放。

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

def single_camel_plot(mu, sigma, ax):
    x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)
    ax.plot(x, stats.norm.pdf(x, mu, sigma))   

fig, ax = plt.subplots()
mu_sigma_pairs = [(16900, 2100), (18200, 1500)]
for mu, sigma in mu_sigma_pairs:
    single_camel_plot(mu, sigma, ax)

ax.set_ylim(bottom=0)   # <-------  HERE

plt.show()