Cara membuat garis kisi mayor dan minor dengan linestyle berbeda dengan Python


122

Saat ini saya menggunakan matplotlib.pyplotuntuk membuat grafik dan ingin garis kisi utama solid dan hitam dan yang kecil berwarna abu-abu atau putus-putus.

Di properti kisi, which=both/major/minelalu warna dan gaya garis ditentukan hanya dengan gaya garis. Apakah ada cara untuk menentukan gaya garis minor saja?

Kode sesuai yang saya miliki sejauh ini adalah

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

Jawaban:


174

Sebenarnya, ini sesederhana pengaturan majordan minorsecara terpisah:

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 dengan kotak kecil adalah Anda harus mengaktifkan tanda centang kecil juga. Dalam kode di atas, hal ini dilakukan oleh yscale('log'), tetapi juga dapat dilakukan dengan plt.minorticks_on().

masukkan deskripsi gambar di sini


33
Terkadang Anda juga perlu meminta plt.minorticks_on()kotak kecil untuk benar-benar muncul. Lihat stackoverflow.com/a/19940830/209246
eqzx

2
Dari dokumen : "Jika kwargs diberikan, diasumsikan bahwa Anda menginginkan grid dan b disetel ke True." - jadi Anda mungkin melewatkan b=True.
miku

Saya telah mencoba melakukan hal yang sama dengan plot log ganda. Sayangnya sumbu x hanya menunjukkan ketebalan utama. Apakah mungkin untuk menyalakan juga kental kecil.
Alexander Cska

1
@Alexander Anda perlu menambahkan axis="both"parameter ke plt.grid()fungsi.
Kanmani

Apakah ada properti rcParam untuk menjadikannya sebagai gaya default?
Kanmani

21

Cara DIY sederhana adalah membuat kisi sendiri:

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()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.