Как подписать оси на графике в Matplotlib Pyplot
Подскажите пожалуйста как подписать оси на графике построенном в библиотеке Matplotlib pyplot если оси выровнены по центру. Вот мой код:
import matplotlib.pyplot as plt import numpy as np a = 0.04 y = lambda x: a * np.sin(x) fig = plt.subplots() plt.title("First graphic: 0.04 * sin(x)") x = np.linspace(-10, 10, 100) plt.plot(x, y(x), "r-") ax = plt.gca() ax.spines['left'].set_position("center") ax.spines['bottom'].set_position('center') ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.set_xlabel("X", fontsize=15, color='blue') ax.set_ylabel("Y", fontsize=15, color='orange') plt.show()

Отслеживать
25.5k 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков
задан 22 сен 2020 в 19:12
111 4 4 серебряных знака 10 10 бронзовых знаков
Вот я выставил оси, но они почему-то выставились криво((( Может есть какие-то атрибуты выравнивания?
22 сен 2020 в 19:15
что именно у вас выставилось криво?
22 сен 2020 в 19:21
@strawdog ну видите на картинке синий X и оранжевый игрек. Хотелось бы чтобы они было в другом виде. Ну как всегда мы графики подписываем
22 сен 2020 в 19:37
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Попробуйте добавить labelpad
import matplotlib.pyplot as plt import numpy as np a = 0.04 y = lambda x: a * np.sin(x) fig = plt.subplots() plt.title("First graphic: 0.04 * sin(x)") x = np.linspace(-10, 10, 100) plt.plot(x, y(x), "r-") ax = plt.gca() ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('center') ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.set_xlabel("X", fontsize=15, color='blue', labelpad=120) # + ax.set_ylabel("Y", fontsize=15, color='orange', labelpad=140) # + ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') plt.show()

А случайно не знаете, игрек можно перевернуть или тут уже всё?
Попробуйте добавить rotation
import matplotlib.pyplot as plt import numpy as np a = 0.04 y = lambda x: a * np.sin(x) fig = plt.subplots() plt.title("First graphic: 0.04 * sin(x)") x = np.linspace(-10, 10, 100) plt.plot(x, y(x), "r-") ax = plt.gca() ax.spines['left'].set_position('center') ax.spines['bottom'].set_position('center') ax.spines['top'].set_visible(False) ax.spines['right'].set_visible(False) ax.set_xlabel("X", fontsize=15, color='blue', labelpad=120) # + ax.set_ylabel("Y", fontsize=15, color='orange', labelpad=140, rotation=0) # + ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') plt.show()
Размещаем стандартные текстовые элементы на графике
На одном из прошлых занятий мы увидели, как можно строить двумерные линейные графики с помощью функции plot() и задавать различные стили его отображения: цвет, тип, толщину линии. На этом занятии продолжим тему оформления графиков и начнем с сетки. Как мы уже говорили, в самом простом случае достаточно вызвать команду grid():
import numpy as np import matplotlib.pyplot as plt y = np.arange(0, 5, 1) x = np.array([a*a for a in y]) y2 = [0, 2, 3, 4, 5, 7] x2 = [i+1 for i in y2] lines = plt.plot(x, y, x2, y2) plt.grid() plt.show()
И сетка появится сформируется в текущих координатных осях:

Причем, ее размеры будут автоматически подстраиваться под размер осей (объекта Axes).
Помимо обычной крупной сетки (major grid) можно наложить более мелкую (minor grid) минорную сетку. Для этого сначала нужно включить режим отображения минорной сетки:
plt.minorticks_on()
А, затем, в функции grid() прописать два типа сеток (мажорную и минорную):
plt.grid(which='major', color = '#444', linewidth = 1) plt.grid(which='minor', color='#aaa', ls=':')
В результате, график приобретет вид:

Однако, здесь следует иметь в виду, что такая мелкая сетка заметно снижает производительность при отображении графиков. Поэтому без особой необходимости ее лучше не использовать.
Создание надписей и подписей
- title – заголовок для осей;
- xlabel, ylabel – подписи для каждой из осей;
- text – произвольная текстовая информация в области осей;
- annotate – аннотация (текст с указателем).
- subtitle – заголовок для фигуры (окна);
- figtext – размещение произвольной текстовой информации в области окна.
fig = plt.figure(figsize=(7, 4)) ax = fig.add_subplot() plt.figtext(0.05, 0.6, 'Текст в области окна') fig.suptitle('Заголовок окна') ax.set_xlabel('Ox') ax.set_ylabel('Oy') ax.text(0.05, 0.1, 'Произвольный текст в координатных осях') ax.annotate('Аннотация', xy=(0.2, 0.4), xytext=(0.6, 0.7), arrowprops={'facecolor': 'gray', 'shrink': 0.1}) plt.show()

Обратите внимание, если у нас используется всего одна координатная ось, то подписи для нее можно определить с помощью функций:
plt.xlabel('Ox') plt.ylabel('Oy')
Если же объектов Axes несколько, то эти функции будут относиться к последней активной оси.
Оформление текстовых элементов
Теперь перейдем к оформлению на уровне текстовых блоков. Как правило, все текстовые элементы в matplotlib – это объекты класса Text. И у них имеются стандартный набор свойств для их оформления. Полный их перечень можно посмотреть на странице официальной документации: https://matplotlib.org/stable/api/text_api.html Я же приведу наиболее употребительные:
| Свойство | Описание |
| alpha | степень прозрачности (число в диапазоне [0; 1]) |
| backgroundcolor | цвет фона |
| color или c | цвет текста |
| fontfamily или family | тип шрифта |
| fontsize или size | размер шрифта |
| fontstyle или style | стиль шрифта: |
| fontweight или weight | степень утолщения – число от 0 до 1000 или константы: ‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’ |
| horizontalalignment или ha | выравнивание по горизонтали: |
| label | текст заголовка |
| position | координаты текста (x, y) |
| rotation | поворот текста: вещественное число [0; 1] или константы |
| verticalalignment или va | выравнивание по вертикали: |
| visible | отображение текста: True/False |
| x | координата x – вещественное число [0; 1] |
| y | координата y – вещественное число [0; 1] |
Использовать эти свойства очень просто. Например, в функции figtext() пропишем именованный параметр fontsize:
plt.figtext(0.05, 0.6, 'Текст в области окна', fontsize=24)
Теперь текст отображается с новым размером шрифта. Или, можно еще указать цвет:
plt.figtext(0.05, 0.6, 'Текст в области окна', fontsize=24, color='r')
Получим текст размером 24 и красным цветом. По аналогии задаются все другие свойства. Также следует иметь в виду, что у каждого типа текстовых объектов имеются и свои дополнительные свойства. Подробно о них можно посмотреть в документации.
Параметр bbox
С помощью параметра bbox можно устанавливать дополнительные элементы оформления для текстовых блоков. Ему следует указать словарь, ключами которого являются аргументы класса FancyBboxPatch:
| Свойство | Описание |
| boxstyle | вид рамки вокруг текста |
| alpha | степень прозрачности фона |
| color | цвет фона с рамкой |
| edgecolor или ec | цвет рамки |
| facecolor или fc | цвет заливки |
| fill | использовать ли заливку: True/False |
| hatch | тип штриховки: |
| linestyle или ls | стиль линии границы: |
| linewidth или lw | толщина рамки |
В качестве параметра boxstyle можно выбирать следующие значения:
| Атрибут | Описание | Вид |
| circle | имеет параметр pad (отступ от границы) | ![]() |
| darrow | имеет параметр pad | ![]() |
| larrow | имеет параметр pad | ![]() |
| rarrow | имеет параметр pad | ![]() |
| round | имеет параметры: pad, rounding_size | ![]() |
| roundtooth | имеет параметры: pad, tooth_size | ![]() |
| sawtooth | имеет параметры: pad, tooth_size | ![]() |
| square | имеет параметр pad | ![]() |
Пример использования:
ax.text(15, 2, 'Текст', bbox={'boxstyle':'darrow', 'facecolor': '#AAAAFF'}) ax.plot(np.arange(0, 5, 0.25))
Цвет фона фигуры и координатных осей
Используя параметр facecolor можно задавать цвет фона для всей формы и отдельно для координатных осей. Например, если при создании фигуры указать этот параметр в виде:
fig = plt.figure(figsize=(7, 4), facecolor='#eee')
то получим светло-серую заливку фона окна. Или, это можно сделать с помощью метода set() после создания фигуры:
fig.set(facecolor='#eee')
То же самое выполняется и для координатных осей, например, изменим цвет фона на светло-зеленый:
ax.set(facecolor='#AAFFAA')
На этом мы завершим знакомство с типовыми элементами оформления графиков. На следующем продолжим эту тему и поговорим об отображении легенды – краткой информации по каждому графику и возможности рисования стандартных геометрических фигур.
Как подписать дату и время на оси абсцисс в Matplotlib?
Какие опции мне нужно указать в Matplotlib, чтобы ось абсцисс с датой-временем отображалась следующим образом?
----|----*----*----*----|----*----*----*----|----*----*----*---> | 6 12 18 | 6 12 18 | 6 12 18 14.06.2022 15.06.2022 16.06.2022
- Вопрос задан более года назад
- 169 просмотров
1 комментарий
Простой 1 комментарий

Массив разделить на 2 дни и часы
затем
ax2 = ax1.twiny()
https://stackoverflow.com/questions/10514315/how-t.
затем сдвигаем вниз
# Move twinned axis ticks and label from top to bottom
ax2.xaxis.set_ticks_position(«bottom»)
ax2.xaxis.set_label_position(«bottom»)
https://stackoverflow.com/questions/31803817/how-t.
Как-то так
Решения вопроса 0
Ответы на вопрос 1
Ну, например, вот так:
import pandas as pd import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator ds=[ ['14.06.2022 00:00', 1], ['14.06.2022 06:00', 2], ['14.06.2022 12:00', 3], ['14.06.2022 18:00', 4], ['15.06.2022 00:00', 1], ['15.06.2022 06:00', 2], ['15.06.2022 12:00', 3], ['15.06.2022 18:00', 4], ['16.06.2022 00:00', 1], ['16.06.2022 06:00', 2], ['16.06.2022 12:00', 3], ['16.06.2022 18:00', 4] ] df=pd.DataFrame(ds,columns=['D','A']) df['D']=pd.to_datetime(df['D']) df.set_index('D',inplace=True) ax=df.plot() ax.xaxis.set_minor_locator(MultipleLocator(6))

Ответ написан более года назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
Как создать список в Python со всеми комбинациями морского боя?
- 1 подписчик
- 52 минуты назад
- 19 просмотров
Как установить значения оси X в Matplotlib

Вы можете использовать следующий синтаксис, чтобы установить значения оси x для графика в Matplotlib:
#specify x-axis locations x_ticks = [2, 4, 6, 8, 10] #specify x-axis labels x_labels = ['A', 'B', 'C', 'D', 'E'] #add x-axis values to plot plt.xticks (ticks=x_ticks, labels=x_labels)
В следующих примерах показано, как использовать этот синтаксис на практике.
Пример 1. Установка значений оси X через равные интервалы
В следующем коде показано, как установить значения оси x через равные интервалы в Matplotlib:
import matplotlib.pyplot as plt #define x and y x = [1, 4, 10] y = [5, 11, 27] #create plot of x and y plt.plot (x, y) #specify x-axis locations x_ticks = [2, 4, 6, 8, 10] #specify x-axis labels x_labels = ['A', 'B', 'C', 'D', 'E'] #add x-axis values to plot plt.xticks (ticks=x_ticks, labels=x_labels)

Обратите внимание, что каждое значение по оси X отображается через равные промежутки времени.
Пример 2. Установка значений оси X через неравные интервалы
В следующем коде показано, как установить значения оси x через неравные интервалы в Matplotlib:
import matplotlib.pyplot as plt #define x and y x = [1, 4, 10] y = [5, 11, 27] #create plot of x and y plt.plot (x, y) #specify x-axis locations x_ticks = [1, 2, 6, 10] #specify x-axis labels x_labels = [1, 2, 6, 10] #add x-axis values to plot plt.xticks (ticks=x_ticks, labels=x_labels)

Пример 3: установка значений оси X только в точках данных
В следующем коде показано, как установить значения оси X только в точках данных:
import matplotlib.pyplot as plt #define x and y x = [1, 4, 10] y = [5, 11, 27] #create plot of x and y plt.plot (x, y) #specify x-axis labels x_labels = ['A', 'B', 'C'] #add x-axis values to plot plt.xticks (ticks=x, labels=x_labels)
Примечание. Полную документацию по функции plt.xticks() можно найти здесь .







