如何将 plot 方法整合到我的 class

How to integrate plot method into my class

我正在尝试制作一个 class,我可以用它制作任何列表的直方图和数据图。我的计算 运行 很好,但 plot 方法似乎不起作用。非常感谢您的帮助:)

from matplotlib import pyplot as plt

class BasicStatistics:

    def __init__(self, list):
        self.list = list

    def mean(self):
        return sum(self.list) / len(self.list)

    def median(self):
        self.list.sort()
        if len(self.list) % 2 == 1:
            return self.list[len(self.list) // 2]
        else:
            return (self.list[len(self.list) // 2 - 1] + self.list[len(self.list) // 2]) / 2

    def var(self):
        avg = self.mean()
        var = sum((x - avg) ** 2 for x in self.list) / len(self.list)
        return var

    def std_dev(self):

        vari = self.var()
        std_dev = (vari) ** (1 / 2)
        return std_dev

    def norma(self):
        return [(i-self.mean()) / self.var() for i in self.list]

    def plot(self):
       fig, (axs1,axs2,axs3) = plt.subplots(2)
       axs1.hist(self.list)
       axs1.axvline(self.mean, color='red')
       axs1.axvline(self.median, color='black')
       axs1.axvline(self.mean - self.std_dev(), color='green')
       axs1.axvline(self.mean + self.std_dev(), color='green')
       axs2.plot(lst)
       plt.show()

这是一个出剧情的版本,不知道是不是你想要的。请参阅我对已识别错误的问题的评论。

注意Whosebug是针对具体问题的,不是给别人调试代码的地方。您的问题可能最终会被删除。

from matplotlib import pyplot as plt

class BasicStatistics:

    def __init__(self, list):
        self.list = list

    def mean(self):
        return sum(self.list) / len(self.list)

    def median(self):
        self.list.sort()
        if len(self.list) % 2 == 1:
            return self.list[len(self.list) // 2]
        else:
            return (self.list[len(self.list) // 2 - 1] + self.list[len(self.list) // 2]) / 2

    def var(self):
        avg = self.mean()
        var = sum((x - avg) ** 2 for x in self.list) / len(self.list)
        return var

    def std_dev(self):

        vari = self.var()
        std_dev = (vari) ** (1 / 2)
        return std_dev

    def norma(self):
        return [(i-self.mean()) / self.var() for i in self.list]

    def plot(self):
       fig, (axs1,axs2) = plt.subplots(2)
       axs1.hist(self.list)
       axs1.axvline(self.mean(), color='red')
       axs1.axvline(self.median(), color='black')
       axs1.axvline(self.mean() - self.std_dev(), color='green')
       axs1.axvline(self.mean() + self.std_dev(), color='green')
       axs2.plot(self.list)
       plt.show()
       
aa = BasicStatistics([1,7,3, 4, 5, 3, 2])
aa.plot()