การทำให้เส้นตารางแนวตั้งปรากฏในพล็อตเส้นใน matplotlib


95

ฉันต้องการรับเส้นกริดทั้งแนวนอนและแนวตั้งบนพล็อตของฉัน แต่มีเพียงเส้นกริดแนวนอนเท่านั้นที่ปรากฏตามค่าเริ่มต้น ฉันใช้pandas.DataFrameจากแบบสอบถาม sql ใน python เพื่อสร้างพล็อตเส้นที่มีวันที่บนแกน x ฉันไม่แน่ใจว่าเหตุใดจึงไม่ปรากฏในวันที่และฉันพยายามค้นหาคำตอบสำหรับสิ่งนี้ แต่ไม่พบ

สิ่งที่ฉันใช้ในการพล็อตกราฟคือโค้ดง่ายๆด้านล่าง

data.plot()
grid('on')

ข้อมูลคือ DataFrame ซึ่งมีวันที่และข้อมูลจากแบบสอบถาม sql

ฉันได้ลองเพิ่มโค้ดด้านล่างแล้ว แต่ฉันยังคงได้ผลลัพธ์เดียวกันโดยไม่มีเส้นตารางแนวตั้ง

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

ข้อเสนอแนะใด ๆ ?

ป้อนคำอธิบายภาพที่นี่


data.plot(grid="on")ทำงานให้ฉัน
Markus

คำตอบ:


101

คุณอาจจะต้องให้หาเรื่องบูลในสายของคุณใช้เช่นแทนax.yaxis.grid(True) ax.yaxis.grid()นอกจากนี้เนื่องจากคุณใช้ทั้งสองอย่างคุณจึงสามารถรวมเข้าด้วยกันax.gridซึ่งใช้ได้กับทั้งสองอย่างแทนที่จะทำเพียงครั้งเดียวสำหรับแต่ละมิติ

ax = plt.gca()
ax.grid(True)

นั่นควรจะแยกคุณออก


ฉันลองแล้ว แต่ด้วยเหตุผลบางอย่างมันก็ยังคงเหมือนเดิม
Osmond Bishop

1
คุณกำลังทำสิ่งนี้ในล่ามโต้ตอบหรือไม่? ตรวจสอบให้แน่ใจว่าคุณตั้งค่ากริดก่อนโทรplt.show()
wim

ฉันใช้ iPython ฉันได้ลองเพิ่ม plt.show () แล้วมันจะไม่สร้างความแตกต่าง
Osmond Bishop

1
นี่เป็นเรื่องแปลก ipython ของคุณเป็นรุ่นอะไรลองเรียกใช้ipython --pylabแล้วทำplt.grid(True)ทันที - คุณเห็นตารางหรือไม่
Wim

ฉันพยายามplt.grid(True)และได้กราฟว่างทั้งเส้นกริดแนวตั้งและแนวนอนใช่แล้วมันแปลกทำไมฉันถึงไม่ได้สิ่งนี้สำหรับพล็อตเส้น ฉันใช้งาน iPython เวอร์ชันล่าสุดที่มีอยู่
Osmond Bishop

59

plt.gca().xaxis.grid(True) พิสูจน์แล้วว่าเป็นทางออกสำหรับฉัน


6
myaxes.grid(which='x')ไม่ได้ทำงานสำหรับฉันกับ matplotlib เวอร์ชั่น 1.4.2 ... ไม่สามารถรับwhichคำหลักในการทำงานที่ทุกคน อย่างไรก็ตามmyaxes.xaxis.grid(True)ใช้เคล็ดลับและเป็นแนวคิดที่ดีกว่า IMO อ้อและอย่าลืมเกี่ยวกับmyaxes.set_axisbelow(True)วิธีที่มีประโยชน์ในการวางกริดไว้ด้านหลังข้อมูล
travc

27

ตามเอกสารของ matplotlibลายเซ็นของเมธอดAxesคลาสgrid()มีดังนี้:

Axes.grid (b = None ซึ่ง = 'major', axis = 'both', ** kwargs)
เปิดหรือปิดกริดแกน

which สามารถเป็น 'major' (ค่าเริ่มต้น) 'minor' หรือ 'both' เพื่อควบคุมว่าจะได้รับผลกระทบจากเห็บกริดหลักกริดเห็บเล็กน้อยหรือทั้งสองอย่าง

axis สามารถเป็น 'both' (ค่าเริ่มต้น), 'x' หรือ 'y' เพื่อควบคุมว่าจะวาดเส้นตารางใด

ดังนั้นเพื่อแสดงเส้นกริดสำหรับทั้งแกน x และแกน y เราสามารถใช้รหัสต่อไปนี้:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

วิธีนี้ช่วยให้เราสามารถควบคุมสิ่งที่จะแสดงสำหรับเส้นตารางได้ละเอียดขึ้น


7

บางทีสิ่งนี้สามารถแก้ปัญหาได้: matplotlib กำหนดขนาดของกริดบนพล็อต

ax.grid(True, which='both')

ความจริงก็คือกริดกำลังทำงาน แต่มีกริด v เพียงตัวเดียวใน 00:00 น. และไม่มีกริดในตารางอื่น ๆ ฉันพบปัญหาเดียวกันคือมีเพียงเส้นตารางเดียวในวันที่ 1 พฤศจิกายนในหลาย ๆ วัน


3

คำตอบสั้น ๆ (อ่านด้านล่างสำหรับข้อมูลเพิ่มเติม):

ax.grid(axis='both', which='both')

ป้อนคำอธิบายภาพที่นี่

สิ่งที่คุณทำถูกต้องและควรได้ผล

อย่างไรก็ตามเนื่องจากแกนXในตัวอย่างของคุณเป็นแกนDateTimeเครื่องหมายขีดหลัก (อาจเป็นไปได้มากที่สุด) จึงปรากฏเฉพาะที่ปลายทั้งสองด้านของแกน X เครื่องหมายถูกอื่น ๆ ที่มองเห็นได้คือเครื่องหมายขีดเล็ก

ax.grid()วิธีการตามค่าเริ่มต้นวาดเส้นตารางเมเจอร์ติ๊กเครื่องหมาย ดังนั้นจึงไม่มีอะไรปรากฏในพล็อตของคุณ

ใช้รหัสด้านล่างเพื่อเน้นเครื่องหมายถูก สาขาวิชาจะเป็นสีน้ำเงินส่วนผู้เยาว์เป็นสีแดง

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')

ตอนนี้หากต้องการบังคับให้เส้นกริดปรากฏบนเครื่องหมายขีดรองให้ส่งwhich='minor'ไปที่วิธีการ:

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

หรือใช้which='both'วาดเส้นกริดทั้ง Major และ Minor และนี่คือเส้นตารางที่สง่างามมากขึ้น:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.