Bagaimana cara mengontrol urutan catatan dalam plot batang dengan matplotlib?

Saya memiliki file data yang terdiri dari beberapa titik data, yang ingin saya plot dalam urutan tertentu. Berikut ini contoh file datanya:

cop   94.0528    313     441
cpr   225.172    726     747
ent   444.786    926     939
fsh   256.038    743     754
fsp   43.7764    340     356
pbp   343.708    825     834
rho   426.497    858     886
sca   342.431    427     872

Saat ini saya sedang memplotnya tepat di bawah satu sama lain seperti yang saya berikan sebagai contoh. Bagaimana saya bisa mengubah urutan catatan data dalam skrip python saya ke urutan tertentu? Saya sudah mencoba mengerjakan ini ke dalam array. Jadi, aku akan melakukannya

data=Numpy.genfromtxt(txt)
transformdata.append(2) # cpr to the first slot
transformdata.append(1) # cop to the second slot
outputarray.append(data[transformdata(1)]
outputarray.append(data[transformdata(2)]
pos = range(1,size(outputarray))
scatter(outputarray, pos)    

Namun ini berantakan dan tentu saja bukan cara terbaik untuk mencapai hal ini. Bagaimana saya melakukan ini menggunakan perpustakaan Numpy atau Matplotlib?


person tarrasch    schedule 20.08.2012    source sumber


Jawaban (1)


Dengan asumsi bahwa transformdata adalah ndarray, seperti data, Anda bisa menggunakan trik pengindeksan untuk mendapatkan tampilan array Anda tanpa harus menyalinnya. Misalnya:

>>> x=np.array(zip("abcdef",range(5),np.random.rand(5)),dtype=[('',"|S1"),('',int),('',float)])
>>> print x
[('a', 0, 0.9818028495949546) ('b', 1, 0.08931155317859962)
 ('c', 2, 0.018796963462246796) ('d', 3, 0.275603618214155)
 ('e', 4, 0.6328806434997251)]
>>> y = x[[1,3,0,2,4]]
>>> print y
[('b', 1, 0.08931155317859962) ('d', 3, 0.275603618214155)
 ('a', 0, 0.9818028495949546) ('c', 2, 0.018796963462246796)
 ('e', 4, 0.6328806434997251)]

Kuncinya di sini adalah x[[1,3,0,2,4]], di mana Anda mengindeks dengan daftar indeks yang Anda inginkan sesuai urutan yang Anda perlukan.

person Pierre GM    schedule 20.08.2012
comment
bisakah Anda juga melihat pertanyaan lanjutan saya? stackoverflow.com/questions/12039326/ - person tarrasch; 24.08.2012