Отримання вертикальних ліній сітки для відображення у графіку рядків у matplotlib


93

Я хочу отримати як горизонтальну, так і вертикальну лінії сітки на моєму графіку, але за замовчуванням відображаються лише горизонтальні лінії сітки. Я використовую запит pandas.DataFrameз sql у python, щоб сформувати графік рядка з датами на осі x. Я не впевнений, чому вони не відображаються на датах, і я намагався знайти відповідь на це, але не зміг знайти.

Все, що я використав для побудови графіку, - це простий код нижче.

data.plot()
grid('on')

data - це DataFrame, який містить дати та дані із запиту sql.

Я також спробував додати код нижче, але я все одно отримую той самий результат без вертикальних ліній сітки.

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

Будь-які пропозиції?

введіть тут опис зображення


data.plot(grid="on")працював у мене
Маркус

Відповіді:


102

Можливо, вам доведеться вказати логічний аргумент у своїх дзвінках, наприклад, використовувати ax.yaxis.grid(True)замість ax.yaxis.grid(). Крім того, оскільки ви використовуєте обидва з них, ви можете об'єднати ax.grid, що працює на обох, замість того, щоб робити це один раз для кожного виміру.

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

Це має вас розібратися.


Я спробував, але з якихось причин все ще виглядає так само, як і раніше
Осмондський єпископ

1
Ви робите це в інтерактивному перекладачі? Переконайтеся , що ви встановлюєте сітку перед тим викликомplt.show()
Вім

Я використовую iPython. Я спробував додати plt.show (), це не змінить.
Осмондський єпископ

1
Ну це дивно. Яка ваша версія ipython, спробуйте також запустити її ipython --pylab, і plt.grid(True)негайно - і бачите сітку?
wim

Я спробував plt.grid(True)і отримав порожній графік як з вертикальною, так і з горизонтальною лініями сітки, так що так дивно, чому я не можу отримати це для моєї графічної лінії. Я використовую останню доступну версію iPython.
Осмондський єпископ,

57

plt.gca().xaxis.grid(True) виявилося рішенням для мене


6
myaxes.grid(which='x')Не працював для мене з Matplotlib версії 1.4.2 ... не може отримати whichключове слово для роботи на всіх. Однак myaxes.xaxis.grid(True)зробив фокус і концептуально краще IMO. О, і не забувайте про корисний myaxes.set_axisbelow(True)метод, щоб поставити сітку за даними.
трав.

25

Згідно з документацією matplotlib , підпис методу Axesкласу grid()такий:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Увімкнення та вимкнення сіток осей.

which може бути "основним" (за замовчуванням), "другорядним" або "обом", щоб контролювати, чи впливають на основні сітки, другорядні та інші.

axis може бути "обидва" (за замовчуванням), "x" або "y" для контролю того, який набір ліній сітки буде намальовано.

Отже, щоб показати лінії сітки як для осі x, так і для осі y, ми можемо використати такий код:

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

Цей метод дає нам більш точний контроль над тим, що показувати для ліній сітки.


6

можливо, це може вирішити проблему: matplotlib, визначте розмір сітки на ділянці

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

Правда полягає в тому, що сітка працює, але в 00:00 є лише одна v-сітка, а в інших немає сітки. Я стикаюся з тією ж проблемою, що в листопаді 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'для малювання як велику, так і малу лінії сітки. І це більш елегантна лінія сітки:

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

1

Лише для горизонтальних ліній

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

Це спрацювало

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.