Python 函数生成条形图

Python 函数生成条形图,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一段代码,我需要为数据中的每个国家运行40次。我想改为编写一个函数,允许我输入国家名称作为参数,从而执行这些步骤,而不是为40个国家中的每个国家用相同的代码替换国家名称7次(实际上嘘,我已经这样做了)。 可复制代码如下所示: dict_usa={'NYC': 0.10, 'LA': -0.05, 'Chicago': -0.16, 'Miami': -0.04, 'Detroit': -0.19, 'S

我有一段代码,我需要为数据中的每个国家运行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,其中包含一列grade值,并生成一个名为“正值”的列,如果grade值为正值,则该列为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
然后生成条形图,其中正条形为蓝色,负条形为红色,如下所示:

现在我想为其他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。任何帮助都将不胜感激。

我这里有。谢谢你的指点。这项工作:

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)

你能展示一下df_country.head()所展示的吗?为什么在美国有双引号?此外,您不需要在该函数调用中包含变量。如果在函数内部创建df_country,则不应将其作为传递给函数的变量…斯潘丹-我添加了更多信息来回答您的问题。谢谢,玛芙。好球!我把它拿出来了。谢谢