วิธีสร้างเส้นตารางหลักและรองด้วย linestyles ที่แตกต่างกันใน Python


122

ขณะนี้ฉันกำลังใช้matplotlib.pyplotสร้างกราฟและต้องการให้เส้นตารางหลักเป็นสีทึบและสีดำและเส้นรองจะเป็นสีเทาหรือเส้นประ

ในคุณสมบัติของเส้นตารางwhich=both/major/mineจากนั้นสีและรูปแบบจะถูกกำหนดโดย linestyle มีวิธีระบุ linestyle เล็กน้อยเท่านั้นหรือไม่?

รหัสที่เหมาะสมที่ฉันมีอยู่คือ

plt.plot(current, counts, 'rd', markersize=8)
plt.yscale('log')
plt.grid(b=True, which='both', color='0.65', linestyle='-')

คำตอบ:


174

จริงๆแล้วมันง่ายเหมือนการตั้งค่าmajorและminorแยกกัน:

In [9]: plot([23, 456, 676, 89, 906, 34, 2345])
Out[9]: [<matplotlib.lines.Line2D at 0x6112f90>]

In [10]: yscale('log')

In [11]: grid(b=True, which='major', color='b', linestyle='-')

In [12]: grid(b=True, which='minor', color='r', linestyle='--')

gotcha ที่มีกริดเล็ก ๆ คือคุณต้องเปิดเครื่องหมายขีดเล็ก ๆ ด้วย ในโค้ดข้างต้นนี้จะกระทำโดยการแต่ก็ยังสามารถทำได้ด้วยyscale('log')plt.minorticks_on()

ใส่คำอธิบายภาพที่นี่


33
บางครั้งคุณต้องเรียกร้องplt.minorticks_on()ให้กริดรองปรากฏขึ้นจริง ดูstackoverflow.com/a/19940830/209246
eqzx

2
จากเอกสาร : "หากมีการระบุ kwargs จะถือว่าคุณต้องการกริดและ b จึงตั้งค่าเป็น True" - b=Trueดังนั้นคุณอาจละเว้น
มิคุ

ฉันได้ลองทำแบบเดียวกันกับ double log plot แล้ว น่าเสียดายที่แกน x แสดงเฉพาะความหนาหลัก เป็นไปได้หรือไม่ที่จะเปิดสวิตช์ความหนาเล็กน้อย
Alexander Cska

1
@ อเล็กซานเดอร์คุณต้องเพิ่มaxis="both"พารามิเตอร์ให้กับplt.grid()ฟังก์ชัน
Kanmani

มีคุณสมบัติ rcParam เพื่อทำให้เป็นสไตล์เริ่มต้นหรือไม่
Kanmani

21

วิธี DIY ง่ายๆคือการสร้างตารางด้วยตัวคุณเอง:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3], [2,3,4], 'ro')

for xmaj in ax.xaxis.get_majorticklocs():
  ax.axvline(x=xmaj, ls='-')
for xmin in ax.xaxis.get_minorticklocs():
  ax.axvline(x=xmin, ls='--')

for ymaj in ax.yaxis.get_majorticklocs():
  ax.axhline(y=ymaj, ls='-')
for ymin in ax.yaxis.get_minorticklocs():
  ax.axhline(y=ymin, ls='--')
plt.show()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.