#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, как вы сказали.