Повернуть существующие маркеры matplotlib?

Я знаю этот ответ, Можно ли управлять ориентацией маркера matplotlib? и документацию по маркерам, но можно ли взять существующий символ маркера matplotlib (нерегулярный многоугольник) и повернуть его?

В частности, я хотел бы повернуть тонкий ромбовидный символ («d») на 90 градусов так, чтобы его длинная ось была горизонтальной.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
1 825
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это можно сделать, если вы создадите класс стиля маркера для ромба, а затем сами измените его свойство преобразования с помощью поворота, по какой-либо причине matplotlib не предоставил эти атрибуты класса для определенных маркеров. Я привел пример ниже.

import matplotlib as mpl
import matplotlib.pyplot as plt

# make a markerstyle class and modify the transform property by 90 degrees
t = mpl.markers.MarkerStyle(marker='d')
t._transform = t.get_transform().rotate_deg(90)
plt.scatter((0,1), (0,1), marker=t, s=100)

Ответ принят как подходящий

Маркер "d" представляет собой перекошенную версию алмаза "D". Вы можете создать такой ромбовидный маркер и наклонить его в другую сторону.

Для произвольных углов вместо этого вы можете повернуть маркер.

import matplotlib.pyplot as plt
from matplotlib.markers import MarkerStyle

fig, ax = plt.subplots()

plt.scatter([1,2,3],[1,2,3], s=225, marker = "d")

m = MarkerStyle("D")
m._transform.scale(1.0, 0.6)

plt.scatter([1,2,3],[2,3,4], s=225, marker=m, color = "crimson")

m = MarkerStyle("d")
m._transform.rotate_deg(60)

plt.scatter([1,2,3],[3,4,5], s=225, marker=m, color = "limegreen")

plt.margins(0.5)
plt.show()

Это именно то, что я ищу ... за исключением того, что я хочу использовать панель ошибок вместо разброса. Что примечательно, это не удается! Последняя ошибка - TypeError: float() argument must be a string or a number, not 'MarkerStyle'. Кто-нибудь знает исправление?

evanb 28.09.2020 18:10

(Я создал отдельный вопрос, stackoverflow.com/questions/64106682/… и открыл github.com/matplotlib/matplotlib/issues/18600, чтобы попытаться найти исправление.)

evanb 28.09.2020 19:39

Угол поворота указан в 360-градусных единицах:

x = [0,10,20,30,40,50,60,70,80,90]
for i in x:

    plt.plot(i, i, marker=(2, 0, -i), c='k',markersize=30, linestyle='None')
plt.margins(0.15); plt.grid();plt.show()

Другие вопросы по теме