Matplotlib:无法将字符串转换为浮点数

时间:2016-07-26 09:48:09

标签: python python-2.7 pandas matplotlib data-visualization

我正在尝试从这个DataFrame中绘制信息:

                                       sold    not_sold   success_rate
category   PriceBucket  PriceBucketTitle            
Papeterie   0              [0, 2]      42401    471886  17.130
            1              (2, 3]      28627    360907  17.240
            2              (3, 3.5]    46198    434063  18.370
            3              (3.5, 4]    80307    564594  17.870
            4              (4, 5]      28653    171226  16.860
            5              (5, 6]      50301    415379  17.385
            6              (6, 8]      45370    446013  17.730
            7              (8, 10]     39859    360187  18.005
            8              (10, 18]    52263    381596  17.630
            9              (18, 585]   36897    387145  19.730

这是我的代码:

import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
plt.title('Success Rate By Category : ' + str(group['category'].iloc[0]))
ax2 = ax.twinx()

x = last_merge['PriceBucket'].as_matrix()


ax2.bar(x, last_merge['sold'].as_matrix(), color='None')
ax2.bar(x, last_merge['not_sold'].as_matrix(), color='None', edgecolor='red', hatch="/")

ax.plot(x, last_merge['success_rate'].as_matrix(), color='blue')

ax2.set_ylabel("Product's number", color='red')
ax.set_ylabel(ylabel='Success Rate', color='blue')

ax.set_xlabel('Same X-values')
plt.show()

现在我的目标是获得PriceBucketTitle'在x上,而不是PriceBucket'。错误消息:

ValueError: could not convert string to float: [0, 2]

帮助?日Thnx

1 个答案:

答案 0 :(得分:2)

我这样做了:

fig, ax = plt.subplots()
plt.title('Success Rate By Category')
ax2 = ax.twinx()

lmnew = last_merge.reset_index().set_index('PriceBucketTitle')
lmnew.sold.plot.bar(color='None', ax=ax2)
lmnew.not_sold.plot.bar(color='None', edgecolor='red', hatch='/', ax=ax2)
lmnew.success_rate.plot(color='blue', ax=ax)

ax2.set_ylabel("Product's number", color='red')
ax.set_ylabel(ylabel='Success Rate', color='blue')

ax.set_xlabel('Same X-values')

enter image description here