gpt4 book ai didi

python - pandas boxplot 包含之前保存的绘图内容

转载 作者:行者123 更新时间:2023-12-04 12:15:18 35 4
gpt4 key购买 nike

我正在将 datafame 的一些列绘制成箱线图。到目前为止,没问题。如下所示,我写了一些东西并且它有效。但是:第二个图也包含第一个图的图。正如你所看到的,我用“= None”或“del value”试过了,但它不起作用。将绘图功能放在外面也不能解决问题。
我的代码有什么问题?
这是一个可执行的例子

 import pandas as pd 

d1 = {'ff_opt_time': [10, 20, 11, 5, 15 , 13, 19, 25 ], 'ff_count_opt': [30, 40, 45, 29, 35,38,32,41]}
df1 = pd.DataFrame(data=d1)
d2 = {'ff_opt_time': [1, 2, 1, 5, 1 , 1, 4, 5 ], 'ff_count_opt': [3, 4, 4, 9, 5,3, 2,4]}
df2 = pd.DataFrame(data=d2)

def evaluate2(df1, df2):

def plot(df, output ):
boxplot = df.boxplot(rot=45,fontsize=5)
fig = boxplot.get_figure()
fig.savefig(output + ".pdf")

df_ot = pd.DataFrame(columns=['opt_time1' , 'opt_time2'])
df_ot['opt_time1'] = df1['ff_opt_time']
df_ot['opt_time2'] = df2['ff_opt_time']
plot(df_ot, "bp_opt_time")

df_op = pd.DataFrame(columns=['count_opt1' , 'count_opt2'])
df_op['count_opt1'] = df1['ff_count_opt']
df_op['count_opt2'] = df2['ff_count_opt']
plot(df_op, "bp_count_opt_perm")

evaluate2(df1, df2)
这是另一个可执行示例。我什至使用了其他变量名。
import pandas as pd 

d1 = {'ff_opt_time': [10, 20, 11, 5, 15 , 13, 19, 25 ], 'ff_count_opt': [30, 40, 45, 29, 35,38,32,41]}
df1 = pd.DataFrame(data=d1)
d2 = {'ff_opt_time': [1, 2, 1, 5, 1 , 1, 4, 5 ], 'ff_count_opt': [3, 4, 4, 9, 5,3, 2,4]}
df2 = pd.DataFrame(data=d2)

def evaluate2(df1, df2):

df_ot = pd.DataFrame(columns=['opt_time1' , 'opt_time2'])
df_ot['opt_time1'] = df1['ff_opt_time']
df_ot['opt_time2'] = df2['ff_opt_time']
boxplot1 = df_ot.boxplot(rot=45,fontsize=5)
fig1 = boxplot1.get_figure()
fig1.savefig( "bp_opt_time.pdf")

df_op = pd.DataFrame(columns=['count_opt1' , 'count_opt2'])
df_op['count_opt1'] = df1['ff_count_opt']
df_op['count_opt2'] = df2['ff_count_opt']
boxplot2 = df_op.boxplot(rot=45,fontsize=5)
fig2 = boxplot2.get_figure()
fig2.savefig( "bp_count_opt_perm.pdf")

evaluate2(df1, df2)

最佳答案

我可以从您的代码中看到箱线图:boxplot1 & boxplot2都在同一张图中。您需要做的是指示将有两个图。
这可以通过

  • 使用 pyplot 创建两个子图在 matplotlib ,此代码可以解决问题 fig1, ax1 = plt.subplots()ax1指定箱线图以放入该轴和 fig2指定箱线图
  • 在jupyter notebook的不同单元格中溶解evaluate2函数并分别执行boxplot

  • 解决方案 1:使用 pyplot 的两个子图
    import pandas as pd 
    import matplotlib.pyplot as plt

    d1 = {'ff_opt_time': [10, 20, 11, 5, 15 , 13, 19, 25 ], 'ff_count_opt': [30, 40, 45, 29, 35,38,32,41]}
    df1 = pd.DataFrame(data=d1)
    d2 = {'ff_opt_time': [1, 2, 1, 5, 1 , 1, 4, 5 ], 'ff_count_opt': [3, 4, 4, 9, 5,3, 2,4]}
    df2 = pd.DataFrame(data=d2)

    def evaluate2(df1, df2):
    df_ot = pd.DataFrame(columns=['opt_time1' , 'opt_time2'])
    df_ot['opt_time1'] = df1['ff_opt_time']
    df_ot['opt_time2'] = df2['ff_opt_time']
    fig1, ax1 = plt.subplots()
    boxplot1 = df_ot.boxplot(rot=45,fontsize=5)
    ax1=boxplot1
    fig1 = boxplot1.get_figure()
    fig1.savefig( "bp_opt_time.pdf")

    df_op = pd.DataFrame(columns=['count_opt1' , 'count_opt2'])
    df_op['count_opt1'] = df1['ff_count_opt']
    df_op['count_opt2'] = df2['ff_count_opt']
    fig2, ax2 = plt.subplots()
    boxplot2 = df_op.boxplot(rot=45,fontsize=5)
    fig2 = boxplot2.get_figure()
    ax2=boxplot2
    fig2.savefig( "bp_count_opt_perm.pdf")
    plt.show()
    evaluate2(df1, df2)
    解决方案 2:在不同的单元格中执行 boxplot
    enter image description here
    根据评论更新:清除图
    两种方法可以清除情节,
  • 使用 clf() 绘制自身matplotlib.pyplot.clf()清除当前 Figure 状态而不关闭它的函数
  • 使用 cla() 清除轴matplotlib.pyplot.cla()函数清除当前 Axes 状态而不关闭 Axes。

  • 只需拨打 plt.clf()调用后的函数 fig.save阅读 this documentation on how to clear a plot in Python using matplotlib

    关于python - pandas boxplot 包含之前保存的绘图内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68477792/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com