使用Matplotlib绘制数据子集

时间:2016-08-26 18:56:19

标签: python pandas numpy matplotlib plot

我正在使用matplotlib在我的DataFrame中绘制数据条形图。我使用这种结构首先绘制整个数据集:

import pandas as pd
from collections import Counter
import matplotlib.pyplot as plt 

Temp_Counts = Counter(weatherDFConcat['TEMPBIN_CONS'])
df = pd.DataFrame.from_dict(Temp_Counts, orient = 'index').sort_index()
df.plot(kind = 'bar', title = '1969-2015 National Temp Bins', legend = False, color = ['r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g', 'b', 'b','r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g' ] )

现在我想绘制相同的数据列,除了我想对特定的数据子集进行绘制。对于' region_name'中的每个区域我想生成条形图。这是我的DataFrame的一个例子。

enter image description here

我尝试的解决方案是写:

if weatherDFConcat['REGION_NAME'].any() == 'South':
    Temp_Counts = Counter(weatherDFConcat['TEMPBIN_CONS'])
    df = pd.DataFrame.from_dict(Temp_Counts, orient = 'index').sort_index()
    df.plot(kind = 'bar', title = '1969-2015 National Temp Bins', legend = False, color = ['r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g', 'b', 'b','r', 'r', 'g', 'g', 'b', 'b', 'r', 'r', 'g', 'g' ] )
    plt.show()

当我运行这个代码时,奇怪的是它仅适用于南方'区域。对于南方'该图是生成的但是对于任何其他区域我尝试代码运行(我没有得到错误消息)但是情节从未出现过。在南方以外的任何区域运行我的代码会在控制台中生成此结果。

enter image description here

南部地区是我的DataFrame的第一部分,其长度为4000万行,其他地区则进一步下滑。我试图绘制的DataFrame的大小是否与此有关?

1 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,你会在绘图前尝试做两件事:

  1. 根据REGION_NAME过滤。

  2. 在已过滤的数据框中,计算TEMPBIN_CONS列中每个值的显示次数。

  3. 你可以在熊猫中做到这两件事:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    df = pd.DataFrame({'STATE_NAME': ['Alabama', 'Florida', 'Maine', 'Delaware', 'New Jersey'],
                            'GEOID': [1, 2, 3, 4, 5],
                     'TEMPBIN_CONS': ['-3 to 0', '-3 to 0', '0 to 3', '-3 to 0', '0 to 3'],
                      'REGION_NAME': ['South', 'South', 'Northeast', 'Northeast', 'Northeast']},
                             columns=['STATE_NAME', 'GEOID', 'TEMPBIN_CONS', 'REGION_NAME'])
    
    df_northeast = df[df['REGION_NAME'] == 'Northeast']
    northeast_count = df_northeast.groupby('TEMPBIN_CONS').size()
    
    print df
    print df_northeast
    print northeast_count
    
    northeast_count.plot(kind='bar')
    plt.show()
    

    输出:

       STATE_NAME  GEOID TEMPBIN_CONS REGION_NAME
    0     Alabama      1      -3 to 0       South
    1     Florida      2      -3 to 0       South
    2       Maine      3       0 to 3   Northeast
    3    Delaware      4      -3 to 0   Northeast
    4  New Jersey      5       0 to 3   Northeast
    
       STATE_NAME  GEOID TEMPBIN_CONS REGION_NAME
    2       Maine      3       0 to 3   Northeast
    3    Delaware      4      -3 to 0   Northeast
    4  New Jersey      5       0 to 3   Northeast
    
    TEMPBIN_CONS
    -3 to 0    1
    0 to 3     2
    dtype: int64
    

    enter image description here