簡體   English   中英

如何確定matplotlib條形圖中條形的順序

[英]How to determine the order of bars in a matplotlib bar chart

假設我們將一些數據讀入pandas數據框:

data1 = pd.read_csv("data.csv", "\t")

內容如下:

在此輸入圖像描述

然后定義一個函數,它應該給我們一個水平條形圖,其中條形長度代表值,條形用鍵標記。

def barchart(data, labels):
    pos = arange(len(data))+.5    # the bar centers on the y axis
    barh(pos, data, align='center', height=0.25)
    yticks(pos, labels)

然后我們調用這個繪圖函數:

barchart(data1["val"], data1["key"])

這給了我們以下情節:

在此輸入圖像描述

現在,是什么決定了酒吧的順序?

假設我們想要特殊順序的條形,比如[C, A, D, F, E, B] ,我們如何強制執行此操作?

如果你直接讀取鍵作為索引

In [12]: df = pd.read_csv('data.csv', '\t', index_col='key')

In [13]: df
Out[13]: 
     val
key     
A    0.1
B    0.4
C    0.3
D    0.5
E    0.2

您可以使用ix以不同的順序獲取索引並使用df.plot繪制它:

In [14]: df.ix[list('CADFEB')].plot(kind='barh')
Out[14]: <matplotlib.axes._subplots.AxesSubplot at 0x530fa90>

barh_example.png

(注意數據中沒有給出F,但你給它作為例子)

我修改了barchart的原始版本。 要指定條形的順序,我使用通過ii列設置的索引:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

def barchart(data, labels):
    pos = np.arange(len(data)) + 0.5  # the bar centers on the y axis
    plt.barh(pos, data.sort_index(), align='center', height=0.25)
    plt.yticks(pos, labels.sort_index())

data1 = pd.DataFrame({'key': list('ABCDE'), 'val': np.random.randn(5)})

new_keys = list('EDACB')
data1['ii'] = [new_keys.index(x) for x in data1.key]

data1 = data1.set_index('ii')
barchart(data1["val"], data1["key"])
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM