【问题标题】:Plotting bar charts by each two rows每两行绘制条形图
【发布时间】:2015-05-03 23:59:26
【问题描述】:

我有这样的事情

 id_1 1000
 id_2 200
 id_3  100
 id_4  50

现在由于这是在数据框中,我可以执行 df.plot(kind='bar') 然而,这不是我真正想要的,我想要每两个连续 id 的单独条形图。 旋转数据框然后从那里绘制会更好吗? 或者我可以使用一个整洁的循环。我很不擅长使用 matplotlib。

【问题讨论】:

  • 您能详细说明一下吗?也许提供您的想法的草图? bar chart demo 已分组条形。
  • 请澄清一下,输入数据到底是什么(不确定,如果id_1 表示字符串或某个符号值)以及您想要绘制的条形图(例如显示每个图表的名称指定的 x 值和 y 值)。
  • 一月你的答案正是我想要的

标签: python pandas matplotlib


【解决方案1】:

听起来您想要数据切片的条形图。从您的问题中不清楚您想要什么切片,但这里有一些示例:

import pandas as pd

# Generate some fake data 
df = pd.DataFrame({'x':['id_{}'.format(i) for i in range(10)], 
               'y':np.random.uniform(size=10)})
  • 从 1 开始绘制每隔一个 ID(所以 1、3、5...)

    df[1::2].plot(kind='bar')
    
  • 仅绘制两个连续的 ID

    df[0:2].plot(kind='bar')
    
  • 最后一个变体:绘制所有数据行的两个连续 ID

    for i in range(0, len(df), 2):
        df[i:i+2].plot(kind='bar')
    

我知道这不是一个完整的答案,但我试图弄清楚你想要什么。我想我会发布它以查看它是否有帮助,但如果我偏离主题,请发表评论,我将删除。

【讨论】:

    【解决方案2】:

    导入需要的东西:

    >>> import pandas as pd
    >>> import matplotlib.pyplot as plt
    

    创建要绘制的数据:

    >>> data = [10, 12, 8, 44, 34, 18]
    >>> idx = ["a", "b", "c", "d", "e", "f"]
    >>> ser = pd.Series(data, index=idx)
    >>> ser
    a    10
    b    12
    c     8
    d    44
    e    34
    f    18
    dtype: int64
    

    最后创建子系列并绘制它们

    >>> # how many bar charts we expect
    >>> numofcharts = len(ser) / 2
    
    >>> # prepare axes for subplots (1 row, numofcharts columns one per bar chart)
    >>> fig, axs = plt.subplots(1, numofcharts)
    
    >>> for graphi in range(numofcharts):
    >>>     starti = 2*graphi
    >>>     # create subseries one for each subchart
    >>>     subser = ser[starti:starti+2]
    >>>     # print subseries, to see, what we are going to plot
    >>>     print subser
    >>>     # plot subseries as bar subchart
    >>>     subser.plot(ax=axs[graphi], kind="bar")
    a    10
    b    12
    dtype: int64
    c     8
    d    44
    dtype: int64
    e    34
    f    18
    dtype: int64
    

    并使情节出现:

    >>> plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 1970-01-01
      相关资源
      最近更新 更多