如何解决DataFrame升序排序后matplotlib绘图仍显示为降序的问题
解决Matplotlib绘图任务降序显示的问题
嘿,我看出来问题所在了——你排序的代码其实没生效,所以绘图里的任务才会倒序显示。
原因很简单:sort_values()方法默认不会直接修改原DataFrame,而是返回一个排序后的新对象,但你没把这个新对象赋值回去,原数据还是保持着原来的顺序,自然绘图时任务是降序的。
这里有两种简单的调整方式:
方式1:用inplace=True原地修改排序
直接在排序方法里加上inplace=True参数,这样会直接修改projektStart的顺序,不用额外赋值:
projektStart = df.loc[df.Status == 'Projektstart'] # 加入inplace=True,原地完成升序排序 projektStart.sort_values('Nr', ascending=True, inplace=True) plt.plot(projektStart.Soll, projektStart.Aufgabe,'go-',alpha=0.5,label='Soll') plt.plot(projektStart.Ist,projektStart.Aufgabe,'rx-',alpha=0.5,label='Ist') plt.xlabel('Anzahl Stunden') plt.ylabel('Aufgabenblöcke') plt.title('Phase Projektstart') plt.legend()
方式2:将排序结果重新赋值给变量
如果你不想原地修改原数据,可以把排序后的新DataFrame重新赋值给projektStart:
projektStart = df.loc[df.Status == 'Projektstart'] # 把排序后的结果覆盖原变量 projektStart = projektStart.sort_values('Nr', ascending=True) plt.plot(projektStart.Soll, projektStart.Aufgabe,'go-',alpha=0.5,label='Soll') plt.plot(projektStart.Ist,projektStart.Aufgabe,'rx-',alpha=0.5,label='Ist') plt.xlabel('Anzahl Stunden') plt.ylabel('Aufgabenblöcke') plt.title('Phase Projektstart') plt.legend()
修改后,绘图里的任务就会按照Nr从2.01到2.10的升序排列,"Zeitplan erstellen"会显示在最顶部啦。
内容的提问来源于stack exchange,提问作者samuel gast
相关产品推荐
相关产品推荐

