2015-03-03 358 views
0

我有这样的事情绘制条形图

id_1 1000 
id_2 200 
id_3 100 
id_4 50 

现在,因为这是在数据帧我可以做df.plot(KIND =“酒吧”) 然而,这并不是我真正想要的我想为每两个连续的ID分开单独的条形图。 旋转数据框然后从那里绘图会更好吗? 还是有一个整洁的循环,我可以使用。我在使用matplotlib时很不好。

+0

请您详细说明一下吗?也许提供一个你想到的东西的草图? [条形图演示](http://matplotlib.org/examples/api/barchart_demo.html)已分组条形。 – Schorsch 2015-03-03 14:21:04

+0

请澄清,输入数据究竟是什么(不确定,如果'id_1'意味着一个字符串或一些符号值)以及您想要绘制哪些条形图(例如,显示每个图表的nameo以指定的x值和y值)值)。 – 2015-03-03 14:45:01

+0

1月你的答案正是我想要的 – 2015-03-04 14:47:27

回答

1

进口所需要的:

>>> 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() 

3 subplots with barcharts

0

这听起来像你想要条形图的数据切片。从你的问题,目前尚不清楚你想要什么片,但这里有一些例子:

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)}) 
  • 情节每隔ID从1开始(所以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') 
    

我知道这是不是一个完整的答案,但我试图找出你想要的东西的行。我想我会张贴它看看它是否有帮助,但如果我的主题很好,请留言,我会删除。