我正在尝试从这个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
答案 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')