2017-05-20 170 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