Установите цвет для разброса графиков в соответствии с отдельными значениями в Matplotlib - PullRequest
0 голосов
/ 21 июня 2020

Я построил 2D-сетку как изображение, используя imshow (), и вдобавок к этому я хочу построить диаграмму рассеяния. Диаграмма рассеяния имеет координаты x и y и значения переменной "engery". Каждая точка на точечной диаграмме имеет индивидуальное значение «энергия», и я хочу, чтобы точки имели определенные c цветов на основе этого значения «энергия», соответствующего этим точкам x и y. Вот мой код ниже.

    fig, ax = plt.subplots(figsize=(8,16))
    plt.imshow(curlB, cmap='RdBu', vmin= -0.9, vmax= 0.9, alpha=0.6, extent=[-64.0,64.0,-96.0,96.0])
    for iter in zip(identty, tstep, xcoord, ycoord, enrgy):
        if((iter[1]/5.0)== data):
            ax.scatter(iter[2], iter[3], vmin=0.0, vmax= 13.0, cm= np.arange(0,13,100), c=iter[4] ,cmap='rainbow', s=5.0, alpha= 1.0)
            text=plt.annotate(iter[0], (iter[2], iter[3]), textcoords="offset points", xytext=(0,10), ha='center')
            text.set_fontsize(6)
            plt.colorbar()
    plt.colorbar()
    plt.tight_layout()
    plt.show()

Он выдает сообщение об ошибке giganti c в виде

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/matplotlib/axes/_axes.py", line 4284, in _parse_scatter_color_args
    colors = mcolors.to_rgba_array(c)
  File "/usr/lib/python3/dist-packages/matplotlib/colors.py", line 294, in to_rgba_array
    result[i] = to_rgba(cc, alpha)
  File "/usr/lib/python3/dist-packages/matplotlib/colors.py", line 177, in to_rgba
    rgba = _to_rgba_no_colorcycle(c, alpha)
  File "/usr/lib/python3/dist-packages/matplotlib/colors.py", line 240, in _to_rgba_no_colorcycle
    raise ValueError("Invalid RGBA argument: {!r}".format(orig_c))
ValueError: Invalid RGBA argument: 0.04667794065027229

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "highest_en.py", line 180, in <module>
    ax.scatter(iter[2], iter[3], vmin=0.0, vmax= 13.0, c=[iter[4]], cmap='rainbow', s=5.0, alpha= 1.0)
  File "/usr/lib/python3/dist-packages/matplotlib/__init__.py", line 1601, in inner
    return func(ax, *map(sanitize_sequence, args), **kwargs)
  File "/usr/lib/python3/dist-packages/matplotlib/axes/_axes.py", line 4451, in scatter
    self._parse_scatter_color_args(
  File "/usr/lib/python3/dist-packages/matplotlib/axes/_axes.py", line 4293, in _parse_scatter_color_args
    raise ValueError(
ValueError: 'c' argument has 1 elements, which is not acceptable for use with 'x' with size 1, 'y' with size 1.

Я прочитал онлайн и обнаружил, что c не может быть отдельным поплавком, а это должна быть серия чисел. Но я хочу, чтобы точки были окрашены из цветовой карты на основе соответствующего значения 'engery' для этой точки.

Также я хотел бы иметь отдельные цветовые полосы на графике, одну для imshow , один для «энергии»

Короче говоря, предположим, что у меня есть кортеж (3,4,5), я хочу поставить точку разброса в координатах (3,4), имеющую значение цвета 5 из шкалы цветов (минимальное и максимальное значения я определю)

Любая помощь приветствуется. Заранее спасибо. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...