Различная альфа в стрелках с использованием колчана в верхней части прямоугольника

#python #matplotlib #alpha-transparency

#python #matplotlib #альфа-прозрачность

Вопрос:

У меня есть прямоугольник, построенный с помощью matplotlib с alpha = 0.8. Я могу нанести маркер с другой альфой на нем, но когда я пытаюсь установить параметр alpha для стрелок колчана, кажется, что он не меняется. Мне было интересно, есть ли способ установить большую прозрачность для стрелок без изменения прозрачности прямоугольника.

 import matplotlib.pyplot as plt
figure=plt.figure(figsize=(10,8))  
ax=plt.gca()
plt.xticks(np.arange(-20,20,1))
plt.yticks(np.arange(-20,20,1))
rect=plt.Rectangle((1,1),10,10,facecolor='#32CD32',alpha=0.8)
ax.plot(2,2,marker='o',alpha=1,color='red')
ax.quiver( 2,2, 2,2, color='black', scale_units='inches', scale=10,width=0.0015,headlength=5,headwidth=3,alpha=1)
ax.add_patch(rect)
plt.axis('off')
plt.show()
 

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

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

Ответ №1:

Альфа-колчан работает, как и ожидалось. Проблема связана с zorder объектами, которые вы рисуете. Прямоугольник рисуется над стрелкой, но под красной точкой:

 import numpy as np               # v 1.19.2
import matplotlib.pyplot as plt  # v 3.3.2

figure=plt.figure(figsize=(6,4))  
ax=plt.gca()
plt.xticks(np.arange(-20,20,1))
plt.yticks(np.arange(-20,20,1))
rect=plt.Rectangle((1,1),10,10,facecolor='#32CD32',alpha=0.8)
ax.plot(2,2,marker='o',alpha=1,color='red')
ax.quiver( 2,2, 20,20, color='black', scale_units='inches', scale=10, width=0.015,
          headlength=5,headwidth=3,alpha=1)
ax.add_patch(rect)
plt.axis('off')
plt.show()
 

проблема

Это можно решить zorder , установив параметр в каждом объекте таким образом, чтобы стрелка была нарисована над прямоугольником:

 figure=plt.figure(figsize=(6,4))  
ax=plt.gca()
plt.xticks(np.arange(-20,20,1))
plt.yticks(np.arange(-20,20,1))
rect=plt.Rectangle((1,1),10,10,facecolor='#32CD32',alpha=0.8,zorder=1)
ax.plot(2,2,marker='o',alpha=1,color='red')
ax.quiver( 2,2, 20,20, color='black', scale_units='inches', scale=10, width=0.015,
          headlength=5,headwidth=3,alpha=1,zorder=2)
ax.add_patch(rect)
plt.axis('off')
plt.show()
 

решение

Комментарии:

1. Большое вам спасибо! Это была проблема, с которой я столкнулся. Я не знал, что вы можете установить порядок рисования художников. Это определяется атрибутом zorder, как вы сказали.