Я хочу, чтобы на моем графике отображались как горизонтальные, так и вертикальные линии сетки, но по умолчанию отображаются только горизонтальные линии сетки. Я использую 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
Какие-либо предложения?
python
matplotlib
pandas
Осмонд Бишоп
источник
источник
data.plot(grid="on")
работал у меняОтветы:
Вам может потребоваться указать логический аргумент в ваших вызовах, например, использовать
ax.yaxis.grid(True)
вместоax.yaxis.grid()
. Кроме того, поскольку вы используете оба из них, вы можете объединить ихax.grid
, что работает с обоими, вместо того, чтобы делать это один раз для каждого измерения.ax = plt.gca() ax.grid(True)
Это должно у вас разобраться.
источник
plt.show()
ipython --pylab
, и делайтеplt.grid(True)
немедленно - вы видите сетку?plt.grid(True)
и получил пустой график с вертикальными и горизонтальными линиями сетки, так что да, это странно, почему я не могу получить это для своего линейного графика. Я использую последнюю доступную версию iPython.plt.gca().xaxis.grid(True)
оказался решением для меняисточник
myaxes.grid(which='x')
Не работал для меня с Matplotlib версии 1.4.2 ... не может получитьwhich
ключевое слово для работы на всех. Однакоmyaxes.xaxis.grid(True)
добился своего и концептуально лучше IMO. Да, и не забывайте о полезномmyaxes.set_axisbelow(True)
методе размещения сетки за данными.Согласно документации matplotlib , подпись метода
Axes
классаgrid()
выглядит следующим образом:Итак, чтобы показать линии сетки как для оси x, так и для оси y, мы можем использовать следующий код:
ax = plt.gca() ax.grid(which='major', axis='both', linestyle='--')
Этот метод дает нам более тонкий контроль над отображением линий сетки.
источник
возможно, это может решить проблему: matplotlib, определить размер сетки на графике
ax.grid(True, which='both')
Правда в том, что сетка работает, но в 00:00 только одна v-сетка и нет сетки в других. Я сталкиваюсь с той же проблемой, что 1 ноября среди многих дней только одна сетка.
источник
Краткий ответ (подробнее читайте ниже):
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='-')
источник
Только для горизонтальных линий
ax = plt.axes() ax.yaxis.grid() # horizontal lines
Это сработало
источник