ฉันจะควบคุมลำดับของบันทึกในกราฟแท่งด้วย matplotlib ได้อย่างไร

ฉันมีไฟล์ข้อมูลที่ประกอบด้วยจุดข้อมูลหลายจุด ซึ่งฉันต้องการลงจุดตามลำดับเฉพาะ นี่คือไฟล์ข้อมูลตัวอย่าง:

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

ขณะนี้ฉันกำลังวางแผนสิ่งเหล่านั้นที่อยู่ด้านล่างกันตามวิธีที่ฉันยกตัวอย่าง ฉันจะเปลี่ยนลำดับของบันทึกข้อมูลเหล่านั้นภายในสคริปต์ python ของฉันเป็นลำดับที่ระบุได้อย่างไร ฉันพยายามทำงานสิ่งนี้เป็นอาร์เรย์แล้ว ดังนั้นฉันจะทำ

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)    

อย่างไรก็ตาม นี่จะยุ่งเหยิงและไม่ใช่วิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้อย่างแน่นอน ฉันจะทำสิ่งนี้โดยใช้ไลบรารี Numpy หรือ Matplotlib ได้อย่างไร


person tarrasch    schedule 20.08.2012    source แหล่งที่มา


คำตอบ (1)


สมมติว่า transformdata คือ ndarray เช่นเดียวกับ data คุณสามารถใช้เคล็ดลับในการจัดทำดัชนีเพื่อดูมุมมองของอาร์เรย์ของคุณโดยไม่ต้องคัดลอก ตัวอย่างเช่น:

>>> 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)]

สิ่งสำคัญที่นี่คือ x[[1,3,0,2,4]] โดยที่คุณกำลังสร้างดัชนีด้วย รายการ ของดัชนีที่คุณต้องการตามลำดับที่คุณต้องการ

person Pierre GM    schedule 20.08.2012
comment
คุณช่วยดูคำถามติดตามของฉันได้ไหม? stackoverflow.com/questions/12039326/ - person tarrasch; 24.08.2012