การวางแผน Python: ฉันจะทำให้ matplotlib.pyplot หยุดบังคับสไตล์ของเครื่องหมายของฉันได้อย่างไร

ฉันกำลังพยายามพล็อตจุดข้อมูลจำนวนมาก (หลายพันจุด) ใน Python โดยใช้ matplotlib ดังนั้นฉันจึงต้องการ เครื่องหมายแต่ละอันมีขนาดเล็กและแม่นยำมาก ฉันจะได้ปากกามาร์กเกอร์ที่เรียบง่ายที่สุดที่เล็กที่สุดเท่าที่จะเป็นไปได้ได้อย่างไร ฉันใช้คำสั่งนี้เพื่อลงจุดข้อมูลของฉัน:

 matplotlib.pyplot( x , y ,'.',markersize=0.1,linewidth=None,markerfacecolor='black')

จากนั้นฉันสามารถดูด้วย pl.show() แล้วบันทึก หรือใช้ plt.savefig('filename.ps') โดยตรงในโค้ดเพื่อบันทึก ปัญหาคือ: เมื่อฉันใช้ pl.show() เพื่อดูไฟล์ใน GUI มันจะดูดีโดยมีเครื่องหมายสีดำเล็กๆ น้อยๆ แต่เมื่อฉันบันทึกจาก show() GUI ไปยังไฟล์หรือใช้ savefig โดยตรง จากนั้นดู ps ที่ฉันสร้างขึ้น มันดูแตกต่างออกไป ! เครื่องหมายแต่ละตัวได้รับรัศมีสีน้ำเงินเล็กน้อยรอบๆ (ราวกับว่ามันเริ่มต้นที่แต่ละจุดเพื่อเชื่อมต่อกับเส้นสีน้ำเงินเริ่มต้น แต่ไม่ได้ทำ) และสไตล์นั้นผิดทั้งหมด ทำไมมันถึงเปลี่ยนสไตล์เมื่อบันทึก? ฉันจะหยุดไม่ให้ Python บังคับสไตล์ของเครื่องหมายได้อย่างไร ใช่ ฉันได้ดูแพ็คเกจอื่นเช่น CairoPlot แล้ว แต่ฉัน ต้องการใช้ matplotlib ต่อไปในตอนนี้

อัปเดต: ปรากฎว่าการบันทึกเป็น PNG ก่อนจะทำให้สีออกมาใช้ได้ แต่จะบังคับให้มีการแปลงรูปภาพเมื่อฉันต้องการบันทึกอีกครั้งเป็น .ps ในภายหลัง (เพื่อรวมไว้ใน PDF ) แล้วฉันก็สูญเสียคุณภาพ ฉันจะรักษาลักษณะเวกเตอร์ของไฟล์และจัดรูปแบบที่ถูกต้องได้อย่างไร


person Alex    schedule 13.02.2009    source แหล่งที่มา
comment
สำหรับจุดลงจุด CairoPlot เวอร์ชัน trunk มีคลาส ScatterPlot การใช้สิ่งนี้ทำให้คุณสามารถกำหนดรัศมีของเครื่องหมายได้ ดังนั้นคุณอาจตั้งค่าเป็น 1 เนื่องจากจะเป็นตัวเลือกที่เล็กที่สุด มีเหตุผลพิเศษใดที่คุณไม่ใช้ CairoPlot หรือไม่?   -  person Rodrigo    schedule 13.02.2009


คำตอบ (3)


สำหรับเอาต์พุตเวกเตอร์ที่ดูดี อย่าใช้รูปแบบเครื่องหมาย '.' ใช้เช่น 'o' (วงกลม) หรือ 's' (สี่เหลี่ยมจัตุรัส) (ดู help(plot) สำหรับตัวเลือก) และตั้งค่าอาร์กิวเมนต์คำหลัก markersize ให้มีขนาดเล็กเหมาะสม เช่น:

plot(x, y, 'ko', markersize=2)
savefig('foo.ps')

'.' (จุด) นั้นให้ผลลัพธ์ที่ดีน้อยกว่านั้นอาจถูกตีความว่าเป็นจุดบกพร่องใน matplotlib แต่แล้ว ควร "จุด" หมายถึงอะไรในรูปแบบกราฟิกเวกเตอร์

person Jouni K. Seppänen    schedule 12.03.2009

คุณได้ลองใช้รูปทรงจุด ',' แล้วหรือยัง? โดยจะสร้าง "พิกเซล" (จุดเล็กๆ แทนที่จะเป็นรูปร่าง)

คุณสามารถเล่นกับตัวเลือก markersize ได้ด้วยรูปร่างนี้เหรอ?

person Eric O Lebigot    schedule 08.08.2009

หากคุณยังไม่ได้ คุณควรลองบันทึกในเครื่องมือแรสเตอร์ -- บันทึกเป็นไฟล์ PNG และดูว่าจะแก้ไขได้หรือไม่ หากคุณต้องการพล็อตเวกเตอร์ ให้ลองบันทึกเป็น PDF และแปลงด้วยยูทิลิตี้ภายนอก ฉันเคยประสบปัญหามาก่อนกับเอ็นจิ้น PS ที่ได้รับการแก้ไขโดยการบันทึกด้วยเอ็นจิ้น Agg หรือ PDF และการแปลงจากภายนอก

person Matt    schedule 13.02.2009
comment
ใช่แล้ว วิธีนี้ได้ผล BTW เราก็ทำงานประเภทเดียวกัน - person Alex; 14.02.2009