我使用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
我几个小时都在寻找答案,但无法得到答案,我真诚地需要帮助。非常感谢。
答案 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
格式化的数字。