在matplotlib中对x轴进行排序

时间:2017-05-20 16:22:44

标签: python pandas matplotlib

为什么此代码不绘制按'值'排序的x轴?

import pandas as pd
import matplotlib.pyplot as plt

# creating dataframe
df=pd.DataFrame()
df['name'] = [1,2,3]
df['value'] = [4,3,5]

# sorting dataframe
df.sort_values('value', ascending = False, inplace= True)

# plot
plt.scatter(df['value'],df['name'])
plt.show()

1 个答案:

答案 0 :(得分:2)

鉴于您选择的变量名称,加上围绕使用散点图的看似混乱,似乎name可能是您要在x轴上绘制的分类变量,已排序按value

如果是这种情况,我建议最初使用df.index作为x轴绘图,然后将刻度标签更改为name条目。在reset_index()之后使用sort_values来获取正确的索引顺序。

Pandas和Pyplot都应该能够在没有额外模块的情况下做到这一点,但是我在排序标签时遇到了一些麻烦。相反,我发现Seaborn pointplot()毫无困难地处理了这项工作:

# sort, then reset index
df = df.sort_values('value', ascending = False).reset_index(drop=True)

import seaborn as sns
ax = sns.pointplot(x=df.index, y=df.value)
ax.set_xlabel("Name")
ax.set_ylabel("Value")

# Use name column to label x ticks
_ = ax.set_xticklabels(df.name.astype(str).values)

[1]: https://i.stack.imgur.com/PX