生成条形图的功能

时间:2017-08-08 20:21:03

标签: python pandas matplotlib

我有一段代码需要在我的数据中为每个国家/地区运行40次。我想改为编写一个函数,允许我输入国家名称作为参数,从而执行步骤而不是在40个国家/地区的相同代码中替换国家名称7次(实际上嘘,我已经完成了这已经)。 可重现的代码如下:

dict_usa={'NYC': 0.10,
         'LA': -0.05,
         'Chicago': -0.16,
         'Miami': -0.04,
         'Detroit': -0.19,
         'Seattle': -0.2,
         'Boston': -0.3}


df_usa=pd.DataFrame({'usa':dict_usa})
df_usa.columns=['grade']
df_usa['positive']=df_usa['grade']>0
##### Plot
plt.subplots_adjust(left=.35)
df_usa['grade'].plot(kind='barh', 
      color=df_usa.positive.map({True:'b',
                                 False:'r'}),
    title="usa")
pylab.savefig('C:\\filepath\\Visuals\\test\\usatest.png')

这会生成一个数据框df_usa,其中包含一个等级值列,并生成一个名为positive的列,如果等级的值为正,则为True,如果为负,则为False。

df_usa.head.()
             grade  positive
Boston   -0.30     False
Chicago  -0.16     False
Detroit  -0.19     False
LA       -0.05     False
Miami    -0.04     False

然后生成条形图,其中正条形为蓝色,负条形为红色,如下所示: Bar plot for US

现在我想为其他40个国家做这个,我有dict_country格式的城市词典。 我尝试了以下方法:

def countryplot(df_country, country, dictname):
    df_country=pd.DataFrame({country: dictname})
    df_country.columns=['grade']
    df_country['positive']=df_country['grade']>0
    ##### Plot
    plt.subplots_adjust(left=.35)
    df_country['disc'].plot(kind='barh', 
              color=df_country.positive.map({True:'b',
                                             False:'r'),
    title=country)    
    pylab.savefig('C:\\filepath\\Visuals\\'+country+'.png')
    return

当我使用此功能时:

    countryplot(df_country='df_usa',country="'usa'",dictname='dict_usa')

我收到以下错误:

    ValueError: If using all scalar values, you must pass an index

我是初学者 - 但非常致力于学习Python进行数据分析。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我在这里。感谢所有指针。这有效:

def countryplot(country,dictname):
    df_country=pd.DataFrame({country: dictname})
    df_country.columns=['grade']
    df_country['positive']=df_country['grade']>0
    ##### Plot
    plt.subplots_adjust(left=.35)
    df_country['grade'].plot(kind='barh', 
              color=df_country.positive.map({True:'b',
                                             False:'r'}),
    title=country)    
    pylab.savefig('C:\\filepath\\Visuals\\test'+country+'.png')
return

countryplot(country="'usa'",dictname=dict_usa)