Как использовать LineCollection с набором строк в массиве сегментов - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь построить линию с тремя разными цветами на основе других условий:

  • У меня есть фрейм данных x_week, где столбец ['Year-Week'] содержит строку года и недели в форма '%Y-w%U'

  • Столбец x_week['#ops'] - числа с плавающей запятой

  • Сохраняются пределы, в которых я хочу изменить цвет строки в словаре с именем week, который также содержит строки в формате '%Y-w%U'

Я использую LineCollection, проблема в том, что он требует, чтобы строковый элемент сегмента массива будучи плавающим, я уже пробовал date2num, но я хочу сохранить формат '%Y-w%U' для оси x

(я уже просматривал здесь разноцветную строку со строками linecolllection )

 x = x_week['Year-Week']
    y = x_week['ops']
    
    # select how to color
    color = []
    
    for i in range(3):
        
        color.append('#%06X' % randint(0, 0xFFFFFF))
        
    cmap = ListedColormap(color)
    norm = BoundaryNorm([min(x_week['Year-Week']),week[1],week[2],week[3],max(x_week['Year-Week'])], cmap.N)
    
    points = np.array([x, y]).T.reshape(-1, 1, 2)
    segments = np.concatenate([points[:-1], points[1:]], axis=1)
    
    # make line collection
    lc = LineCollection(segments, cmap = cmap, norm = norm)

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-279-6f4c3a13d43e> in <module>
     18 
     19 # make line collection
---> 20 lc = LineCollection(segments, cmap = cmap, norm = norm)

~\Anaconda3\lib\site-packages\matplotlib\collections.py in __init__(self, segments, linewidths, colors, antialiaseds, linestyles, offsets, transOffset, norm, cmap, pickradius, zorder, facecolors, **kwargs)
   1331             **kwargs)
   1332 
-> 1333         self.set_segments(segments)
   1334 
   1335     def set_segments(self, segments):

~\Anaconda3\lib\site-packages\matplotlib\collections.py in set_segments(self, segments)
   1340         for seg in segments:
   1341             if not isinstance(seg, np.ma.MaskedArray):
-> 1342                 seg = np.asarray(seg, float)
   1343             _segments.append(seg)
   1344 

~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
    536 
    537     """
--> 538     return array(a, dtype, copy=False, order=order)
    539 
    540 

ValueError: could not convert string to float: '2019-w27'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...