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='-')
Peter Saxton
sumber

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

joaquin
sumber
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()
ev-br
sumber