Задача
Я использую cartopy
, чтобы нарисовать некоторые страны в Python. Для этой цели я использую функцию add_geometry
следующим образом:
geo = ax.add_geometries(geometry,facecolor='ghostwhite', edgecolor='black',crs=data_transf)
Я хочу иметь возможность изменять цвет геометрического объекта, который я добавил. Таким образом, я мог бы делать анимацию со странами, меняющими цвет, не перерисовывая все каждый кадр Например, все страны начинают с белого цвета, а затем становятся синими одна за другой.
Однако я не могу найти способ изменить цвет объекта после его добавления.
Что обычно работает
С обычным сюжетом в maplotlib я бы сделал:
import matplolib.pyplot as plt
line, = plt.plot([1,2,3],[4,5,6],'red') #Plot in red
line.set_color('green') #Change the color to green
Почему это не работает здесь
Для FeatureArtist
с cartopy
не добавлена функция set_color
, добавленная с add_geometries
. Фактически, кажется, что свойства color
, facecolor
, ... даже не существуют для FeatureArtist
, как показывает вызов matplotlib.artist.getp
.
Для сюжета, вызов возвращает:
>>import matplotlib.artist as mart
>>mart.getp(line)
agg_filter = None
alpha = None
animated = False
antialiased = True
children = []
clip_box = TransformedBbox( Bbox(x0=0.0, y0=0.0, x1=1.0, ...
clip_on = True
clip_path = None
color = (1.0, 0.0, 0.0, 1.0)
contains = None
dash_capstyle = butt
dash_joinstyle = round
data = (array([1, 2, 3]), array([4, 5, 6]))
drawstyle = default
figure = Figure(640x476)
fillstyle = full
gid = None
in_layout = True
label = _line0
linestyle = -
linewidth = 1.5
marker = None
markeredgecolor = (1.0, 0.0, 0.0, 1.0)
markeredgewidth = 1.0
markerfacecolor = (1.0, 0.0, 0.0, 1.0)
markerfacecoloralt = none
markersize = 6.0
markevery = None
path = Path(array([[ 1., 4.], [ 2., 5.], ...
path_effects = []
picker = None
pickradius = 5
rasterized = None
sketch_params = None
snap = None
solid_capstyle = projecting
solid_joinstyle = round
transform = CompositeGenericTransform( TransformWrapper( ...
transformed_clip_path_and_affine = (None, None)
url = None
visible = True
xdata = [1 2 3]
xydata = [[ 1. 4.] [ 2. 5.] [ 3. 6.]]
ydata = [4 5 6]
zorder = 2
А для геометрии:
>>mart.getp(geo)
agg_filter = None
alpha = None
animated = False
children = []
clip_box = TransformedBbox( Bbox(x0=0.0, y0=0.0, x1=1.0, ...
clip_on = True
clip_path = None
contains = None
figure = Figure(1200x990)
gid = None
in_layout = True
label =
path_effects = []
picker = None
rasterized = None
sketch_params = None
snap = None
transform = CompositeGenericTransform( TransformWrapper( ...
transformed_clip_path_and_affine = (None, None)
url = None
visible = True
zorder = 1
Как видите, нет свойства color
(или подобного), которое я мог бы изменить.