【问题标题】:Why does my Pandas plotting function plot independent datasets on top of each other?为什么我的 Pandas 绘图功能会在彼此之上绘制独立的数据集?
【发布时间】:2020-03-18 19:27:48
【问题描述】:

我有一个电话价格数据集,在列表中,我想使用 Pandas 和 plot 方法为每个模型绘制一个直方图。

当我尝试使用函数执行此操作时,直方图会被绘制在彼此之上。所以第一个图是正确的,但是下一个有两个直方图,然后下一个有所有 3 个模型图,依此类推。

import pandas as pd
import matplotlib.pyplot as plt

def printPlot(plotlist, model):

    d = pd.DataFrame(plotlist)

    d.columns = ['Model','GB','Condition','Price']

    lowestquantile = d["Price"].quantile(0.2)

    d = d[d["Price"] > lowestquantile]

    d.Price.plot(kind='hist')

    plotfile = model+".png"

    plt.savefig("./plots/"+plotfile)

    return

testplot = [[['iPhone 11', ' 64 GB', 'N/A', 5500], ['iPhone 11', ' 256 GB', 'Perfekt', 6500], ['iPhone 11', ' 64 GB', 'Perfekt', 5100], ['iPhone 11', ' 128 GB', 'Perfekt', 6200], ['iPhone 11', ' 64 GB', 'Perfekt', 5700], ['iPhone 11', ' 128 GB', 'Perfekt', 5750], ['iPhone 11', ' 128 GB', 'God', 1111], ['iPhone 11', ' 256 GB', 'Perfekt', 5700], ['iPhone 11', ' 64 GB', 'Perfekt', 5800], ['iPhone 11', ' 64 GB', 'Perfekt', 5200], ['iPhone 11', ' 8 GB', 'N/A', 10], ['iPhone 11', ' 256 GB', 'Perfekt', 4500], ['iPhone 11', ' 256 GB', 'Perfekt', 7000], ['iPhone 11', ' 64 GB', 'Perfekt', 5299], ['iPhone 11', ' 64 GB', 'Perfekt', 6000], ['iPhone 11', ' 256 GB', 'N/A', 50], ['iPhone 11', ' 64 GB', 'Perfekt', 250], ['iPhone 11', ' 128 GB', 'Perfekt', 200], ['iPhone 11', ' 128 GB', 'Perfekt', 6200], ['iPhone 11', ' 128 GB', 'N/A', 6350], ['iPhone 11', ' 64 GB', 'Perfekt', 69], ['iPhone 11', ' 512 GB', 'Perfekt', 100]],[['iPhone XS Max', ' 256 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6750], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5399], ['iPhone XS Max', ' 64 GB', 'God', 3300], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4800], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6666], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 64 GB', 'N/A', 5500], ['iPhone XS Max', ' 256 GB', 'God', 4700], ['iPhone XS Max', ' 64 GB', 'God', 5500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6450], ['iPhone XS Max', ' 512 GB', 'N/A', 9000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5700], ['iPhone XS Max', ' 512 GB', 'Perfekt', 5345], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6999], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 512 GB', 'N/A', 5499], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 64 GB', 'Rimelig', 3000], ['iPhone XS Max', ' 256 GB', 'N/A', 4700], ['iPhone XS Max', ' 256 GB', 'N/A', 7500], ['iPhone XS Max', ' 256 GB', 'God', 5500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 4000], ['iPhone XS Max', ' 64 GB', 'N/A', 4499], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 64 GB', 'N/A', 4000], ['iPhone XS Max', ' 512 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 64 GB', 'God', 200], ['iPhone XS Max', ' 256 GB', 'God', 5000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4400], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 64 GB', 'N/A', 5000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 512 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 256 GB', 'God', 4500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 512 GB', 'God', 6500], ['iPhone XS Max', ' 512 GB', 'N/A', 6500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 64 GB', 'God', 3799], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5399], ['iPhone XS Max', ' 64 GB', 'N/A', 4599], ['iPhone XS Max', ' 64 GB', 'God', 6000], ['iPhone XS Max', ' 8 GB', 'Perfekt', 130], ['iPhone XS Max', ' 8 GB', 'Perfekt', 130], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6499], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4599], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 8 GB', 'Perfekt', 850], ['iPhone XS Max', ' 256 GB', 'God', 5000], ['iPhone XS Max', ' 256 GB', 'God', 6000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6499], ['iPhone XS Max', ' 512 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 64 GB', 'God', 5000], ['iPhone XS Max', ' 64 GB', 'God', 4700], ['iPhone XS Max', ' 64 GB', 'God', 4900], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6200], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 4499], ['iPhone XS Max', ' 64 GB', 'God', 4500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 250], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5900], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 150], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6750], ['iPhone XS Max', ' 64 GB', 'God', 4000], ['iPhone XS Max', ' 256 GB', 'God', 6000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 512 GB', 'N/A', 7000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4999], ['iPhone XS Max', ' 256 GB', 'God', 100], ['iPhone XS Max', ' 256 GB', 'God', 5000], ['iPhone XS Max', ' 256 GB', 'God', 5000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6199], ['iPhone XS Max', ' 512 GB', 'Perfekt', 7500], ['iPhone XS Max', ' 64 GB', 'N/A', 6000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4400], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4500], ['iPhone XS Max', ' 512 GB', 'God', 6500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5400], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 64 GB', 'God', 4000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5800], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4800], ['iPhone XS Max', ' 512 GB', 'N/A', 250], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 4700], ['iPhone XS Max', ' 512 GB', 'Perfekt', 5800], ['iPhone XS Max', ' 512 GB', 'Perfekt', 7999], ['iPhone XS Max', ' 64 GB', 'N/A', 5300], ['iPhone XS Max', ' 256 GB', 'Rimelig', 5500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4995], ['iPhone XS Max', ' 256 GB', 'God', 4800], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4200], ['iPhone XS Max', ' 512 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6499], ['iPhone XS Max', ' 256 GB', 'Perfekt', 4999], ['iPhone XS Max', ' 64 GB', 'N/A', 4599], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5999], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6999], ['iPhone XS Max', ' 256 GB', 'God', 4200], ['iPhone XS Max', ' 64 GB', 'God', 4300], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6499], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6900], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 64 GB', 'Rimelig', 4500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6000], ['iPhone XS Max', ' 256 GB', 'God', 280], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6900], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5800], ['iPhone XS Max', ' 8 GB', 'Perfekt', 150], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6999], ['iPhone XS Max', ' 64 GB', 'Perfekt', 4800], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6999], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6250], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 256 GB', 'God', 4999], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6999], ['iPhone XS Max', ' 256 GB', 'Perfekt', 6999], ['iPhone XS Max', ' 512 GB', 'Perfekt', 50], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5700], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5000], ['iPhone XS Max', ' 512 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 64 GB', 'Perfekt', 6200], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 512 GB', 'Perfekt', 7500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7000], ['iPhone XS Max', ' 128 GB', 'Perfekt', 110], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7100], ['iPhone XS Max', ' 256 GB', 'Perfekt', 99], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7400], ['iPhone XS Max', ' 128 GB', 'Perfekt', 99], ['iPhone XS Max', ' 256 GB', 'Perfekt', 7300], ['iPhone XS Max', ' 512 GB', 'Perfekt', 6750], ['iPhone XS Max', ' 64 GB', 'God', 4500], ['iPhone XS Max', ' 256 GB', 'Perfekt', 5000]]]

for plotlist in testplot:

    printPlot(plotlist,plotlist[0][0])

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    为避免这种行为,只需在 printPlot() 函数中的 return 之前再添加一行 plt.clf()。代码将如下所示:

    def printPlot(plotlist, model):
        d = pd.DataFrame(plotlist)
        d.columns = ['Model','GB','Condition','Price']
        lowestquantile = d["Price"].quantile(0.2)
        d = d[d["Price"] > lowestquantile]
        d.Price.plot(kind='hist')
        plotfile = model+".png"
        plt.savefig("./plots/" + plotfile)
    
        plt.clf() # <-- this row was missing (!)
    
        return
    

    【讨论】:

    • 谢谢,好像可以了。 “clf”是什么意思和作用?
    • 为了更好地理解,请查看link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2021-05-18
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多