【问题标题】:modify pandas boxplot output修改熊猫箱线图输出
【发布时间】:2017-02-28 17:56:41
【问题描述】:

根据文档,我在熊猫中制作了这个情节:

import pandas as pd
import numpy as np
import pyplot as plt

df = pd.DataFrame(np.random.rand(140, 4), columns=['A', 'B', 'C', 'D'])
df['models'] = pd.Series(np.repeat(['model1','model2', 'model3', 'model4', 'model5', 'model6', 'model7'], 20))
plt.figure()
bp = df.boxplot(by="models")

如何修改此图?

我想要:

  • 将排列从 (2,2) 修改为 (1,4)
  • 更改标签和标题、文本和字体大小
  • 删除“[models]”文本

以及如何将此图保存为 pdf 格式?

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    您已经可以使用 pandas 中的箱线图功能来做很多事情,请参阅documentation

    • 你已经可以修改排列,改变字体大小:

      import pandas as pd
      import numpy as np
      import pyplot as plt
      
      df = pd.DataFrame(np.random.rand(140, 4), columns=['A', 'B', 'C', 'D'])
      df['models'] = pd.Series(np.repeat(['model1','model2', 'model3', 'model4', 'model5', 'model6', 'model7'], 20))
      bp = df.boxplot(by="models", layout = (4,1), fontsize = 14)
      
    • 更改列标签可以通过更改数据框本身的列标签来完成:

      df.columns(['E', 'F', 'G', 'H', 'models'])
      
    • 为了进一步定制,我将使用 matlotlib 本身的功能;你可以看看例子here

    【讨论】:

      【解决方案2】:
      • 安排使用layout
      • 设置 x 标签使用set_xlabel('')
      • 图形标题使用figure.subtitle()
      • 要更改图形大小,请使用 figsize=(w,h)(英寸)

      注意:np.asarray(bp).reshape(-1) 行正在将子图的布局(例如 2x2)转换为数组。

      代码:

      import pandas as pd
      import numpy as np
      import matplotlib.pyplot as plt
      
      df = pd.DataFrame(np.random.rand(140, 4), columns=['A', 'B', 'C', 'D'])
      df['models'] = pd.Series(np.repeat(['model1','model2', 'model3', 'model4', 'model5', 'model6', 'model7'], 20))
      bp = df.boxplot(by="models",layout=(4,1),figsize=(6,8))
      [ax_tmp.set_xlabel('') for ax_tmp in np.asarray(bp).reshape(-1)]
      fig = np.asarray(bp).reshape(-1)[0].get_figure()
      fig.suptitle('New title here')
      plt.show()
      

      结果:

      【讨论】:

      • 这对我不起作用,我得到AttributeError: 'numpy.ndarray' object has no attribute 'set_xlabel
      • @spore234 注释bp = df.boxplot(by="models",layout=(1,4))这一行并在其前后添加print bp,运行代码并将输出结果粘贴到此处
      • 我从打印中得到这个(缩短它):[[
      • 谢谢,这行得通。你知道我如何改变 figsize 吗?
      猜你喜欢
      • 2017-01-10
      • 2017-09-09
      • 2014-11-05
      • 2021-10-14
      • 2017-03-20
      • 2018-10-15
      • 2017-05-02
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多