2017-05-20 108 views
-1

为什么此代码不绘制按'value'排序的x轴?在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() 
+5

你能否阐述,你是什么意思?你正在创建一个散点图,所以只要'df [value]'和'df [name]'中的相应数字在各自的相同位置,那么值的顺序就不重要了。你能否提供一个情节并解释那个情节中的情况与你预期的不符? –

回答

1

根据您选择的变量名,加上周围使用散点图的看似混乱,好像name可能是一个分类变量,你想在x轴上绘制,由value排序。

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

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