Цвет графика рассеяния Matplotlib по значению Y - PullRequest
1 голос
/ 22 декабря 2019

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

В настоящее время у меня есть два словаря

{MAC_Address: ID} и {ID: RANDOM COLOR}

Где каждый Macадрес найден, добавлен в словарь и назначен идентификатор ... этот идентификатор затем можно найти во втором словаре, и можно определить назначенный цвет.

Итак, я пытаюсь определить, как правильно построить график рассеяния с цветами.

Текущий график (нижний), поэтому для каждого значения идентификатора (значения Y) должен быть свой цвет (хранится во втором словаре):

current graph

Текущий код


def lescan():


    service = DiscoveryService("hci0")
    ScanDevices = service.discover(scanTime)
    count = 0

    time = time + scanTime
# gather mac addresses......then..

for address, name in ScanDevices.items():
        count = count + 1
        print("\n" + str(count) + "  {} --- {}".format(address, name))
        addresses.append(format(address))


        scatter_time.append(time)

        if str(address) in devicesDictionary:
            id = devicesDictionary.get(str(address))
            scatter_devs.append(id)


        else:
            id = (len(devicesDictionary) + 1)
            devicesDictionary.update( { str(address) : id } )
            colour = "#{:06x}".format(random.randint(0, 0xFFFFFF))
            colourDictionary.update ( { id : colour })
            scatter_devs.append(id)


    devices_count.append(count)



def animate(i):

        lescan()
    # Clear the graph
        ax1.clear()
    # Plot line graph
        ax1.plot(time_passed , devices_count)
     # plot scatter graph
        ax2.scatter(scatter_time, scatter_devs)

# Run the animation function and show the graph
ani = animation.FuncAnimation(fig, animate, interval=5000)

plt.show()







1 Ответ

1 голос
/ 22 декабря 2019

Вы можете использовать PatchCollection с Circle:

from matplotlib.patches import Circle, Wedge, Polygon
from matplotlib.collections import PatchCollection    

# this is a list with all your circles
patch_rs = [Circle(x, y, radius, facecolor='orange', edgecolor='k')]

collection = PatchCollection(patch_rs)
ax1.add_collection(collection)

facecolor и edgecolor могут быть строками, шестнадцатеричными, RGB и т. Д. (См. здесь ).

Полный пример

Документация

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