【问题标题】:Plot all pandas dataframe columns separately分别绘制所有 pandas 数据框列
【发布时间】:2019-08-29 06:21:48
【问题描述】:

我有一个只有数字列的 pandas 数据框,我正在尝试为所有功能创建一个单独的直方图

ind group people value value_50
 1      1    5    100    1
 1      2    2    90     1
 2      1    10   80     1
 2      2    20   40     0
 3      1    7    10     0
 3      2    23   30     0

但在我的现实生活数据中有 50 多列,我怎样才能为它们创建一个单独的图

我试过了

df.plot.hist( subplots = True, grid = True)

它给了我一个重叠的不清楚的情节。

如何使用 pandas subplots = True 来排列它们。下面的示例可以帮助我在 (2,2) 网格中获取四列的图形。但它对所有 50 列都是一个很长的方法

fig, [(ax1,ax2),(ax3,ax4)]  = plt.subplots(2,2, figsize = (20,10))

【问题讨论】:

  • 您想要 4 个子图中的 50 多个直方图?
  • 你使用了紧凑的布局吗?
  • @goyo 不是 4 个子图,这只是一个例子
  • 所以这是你不想要的一个例子。但是你想要什么?图应该是什么样子的?
  • @goyo 数据框中所有列的直方图,简单!在上面的例子中,它有 5 列,在我的实际例子中是 50。你能写一些通用的东西吗?我相信它可以做到

标签: python pandas matplotlib subplot


【解决方案1】:

Pandas subplots=True 会将坐标轴排列在一列中。

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

df = pd.DataFrame(np.random.rand(7,20))

df.plot(subplots=True)

plt.tight_layout()
plt.show()

这里没有应用tight_layout,因为图形太小而不能很好地排列轴。不过可以使用更大的数字 (figsize=(...))。

为了将坐标轴放在网格上,可以使用layout 参数,例如

df.plot(subplots=True, layout=(4,5))

同样可以通过plt.subplots()创建坐标轴

fig, axes = plt.subplots(nrows=4, ncols=5)
df.plot(subplots=True, ax=axes)

【讨论】:

  • @ImportanceOfBeingErnest 你能弄清楚如何处理每个图中的 X 和 Y 轴比例吗? !Here's the question
【解决方案2】:

如果你想单独绘制它们(这就是我在这里结束的原因),你可以使用

for i in df.columns:
    plt.figure()
    plt.hist(df[i])

【讨论】:

    【解决方案3】:

    此任务的替代方法是使用带有超参数“布局”的“hist”方法。使用@ImportanceOfBeingErnest 提供的部分代码的示例:

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas  as pd
    
    df = pd.DataFrame(np.random.rand(7,20))
    
    df.hist(layout=(5,4), figsize=(15,10))
    
    plt.show()
    

    【讨论】:

      【解决方案4】:

      使用pandas.DataFrame 我建议使用pandas.DataFrame.apply。使用自定义函数,在本例中为plot(),您可以单独打印和保存每个图形。

      def plot(col):
       
          fig, ax = plt.subplots()
          ax.plot(col)
          plt.show()
      
      df.apply(plot)
      

      【讨论】:

        【解决方案5】:

        虽然问题中没有要求,但我想我会补充一点,使用x 参数进行绘图将允许您为 x 轴数据指定一列。

        import numpy as np
        import matplotlib.pyplot as plt
        import pandas as pd
        
        df = pd.DataFrame(np.random.rand(7,20),columns=list('abcdefghijklmnopqrst'))
        df.plot(x='a',subplots=True, layout=(4,5))    
        
        plt.tight_layout()
        plt.show()
        

        https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.plot.html

        【讨论】:

          猜你喜欢
          • 2019-11-05
          • 2018-10-25
          • 1970-01-01
          • 2019-04-20
          • 2020-04-24
          • 2015-09-29
          • 1970-01-01
          • 2020-03-30
          相关资源
          最近更新 更多