python:当绘制文本时,引发" TypeError:必须是实数,而不是str"

时间:2018-01-01 17:17:58

标签: python matplotlib typeerror

我使用matplotlib在每个栏中绘制文字。

案例1 中,一切顺利。每个栏会在其顶部显示收入编号。

但是当我使用 案例2 时,错误引发"TypeError: must be real number, not str". please anyone can help me to figure out.

案例1:

grouped_revenue _DF = revenue_DF.groupby(['industry']).sum()
sns.barplot(
    x = grouped_revenue _DF.index,
    y = 'Total revenue',
    data=grouped_revenue _DF,
    palette='viridis')
plt.title('Revenue (QoQ)2007-2017')
for a, b in zip(np.arange(len(grouped_revenue_DF.index)), 
grouped_revenue _DF['Total revenue']):
    plt.text(a, b + 1000000, '%.02f' % b, ha='center', va='top', fontsize=15,color='purple')
sns.despine()
plt.tight_layout()
plt.show()

案例2:提升错误

class plotpic():

    def plt(input_DF,y,palette,title):
        sns.barplot(x=input_DF.index,y=y,data=input_DF,palette=palette) 
        for a ,b in zip(np.arange(input_DF.shape[0]),y):
            plt.text(a, b , '%.02f' % b, ha='center', va='top',fontsize=15,color='purple')
        plt.title(title)
        sns.despine(top=True)
        plt.tight_layout()


y = 'Total revenue'
palette = 'viridis'
title = 'Revenue (QoQ)2007-2017'

plotpic.plt(grouped_revenue _DF,y,palette,row,col,num,title)    
plt.show()
Traceback (most recent call last):
  File "C:\Users\b\Downloads\Python-Data-Science\Data\Visualization\my_works.py", line 562, in <module>
    plotpic.plt(grouped_revenue _DF,y,title)
    plt.text(a, b , '%.02f' % b, ha='center', va='top', fontsize=15,color='purple')
TypeError: must be real number, not str

我几个小时都在寻找答案,但无法得到答案,我真诚地需要帮助。非常感谢。

1 个答案:

答案 0 :(得分:0)

你有:

y = 'Total revenue'

因此,您遍历此字符串的每个字母:

for a ,b in zip(np.arange(input_DF.shape[0]),y):
     plt.text(a, b , '%.02f' % b, ha='center', va='top',fontsize=15,color='purple')

并尝试使用'%.02f' % b格式化此字母。 这会导致您的错误消息,因为%f需要一个数字。

您需要将代码更改为:

for a ,b in zip(np.arange(input_DF.shape[0]), grouped_revenue _DF[y)]:
    plt.text(a, b , '%.02f' % b, ha='center', va='top',fontsize=15,color='purple')

现在b是一个可以使用'%.02f' % b格式化的数字。