Как мы можем отметить легенду для точечного графика, основанного на цвете - PullRequest
0 голосов
/ 24 октября 2018

Я строю график для визуализации времени работы нескольких алгоритмов сортировки по разным данным.Условие состоит в том, что время выполнения должно быть на оси Y, а размер данных - на оси X. Я построил график рассеяния, взяв значения времени выполнения различных алгоритмов в зависимости от размера данных и присвоив каждому маркировке свой цвет.Точно так же я составил график для 3 других размеров данных, но с одинаковыми цветами для разных алгоритмов.Я хочу добавить легенду к графику так, чтобы пользователь понимал, что этот конкретный цвет указывает на этот конкретный алгоритм.Я не мог найти правильный путь для этого.Я искал несколько сценариев онлайн, и они добавляют легенды, основанные на разных точечных графиках.Но я хочу добавить легенду для точек на основе цвета.

Кроме того, для этого сценария вы можете предложить лучшую кривую построения.

Это код, который я использовал для генерации графика.

def visualize_datasize(dataset):
    datasize=len(dataset)
    for i in range(4,0,-1):
        run_time=getRunTime(dataset,int(datasize/i))
        plt.scatter([int(datasize/i)]*5,run_time,color=['red','green','blue','yellow','black'])
    plt.xlabel('Size of the dataset')
    plt.ylabel('Run time')
    plt.title('Run time vs datasize for various sorting algorithms')
    plt.show()

Scatter plot

1 Ответ

0 голосов
/ 24 октября 2018

Самый простой, самый последовательный способ сделать это - создать точечную диаграмму для каждого алгоритма.Кроме того, вы, вероятно, хотите использовать объектно-ориентированный интерфейс для этого.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()

def calculate_runtimes(algo, data, sizes):
    if algo == 'name1':
        # return timings for algorithm 1 given data at given sizes
    elif algo == 'name2':
        # ...

algo_labels = ['name1', 'name2', 'name3', 'name4', 'name5']
sizes = [1, 2, 4, 8, 16]
algo_runtimes = {name: calculate_runtimes(name, dataset, sizes) for name in algo_labels}
colors = ['red', 'green', 'blue', 'yellow', 'black']
x_positions = [len(dataset)*size for size in sizes]

for (label, runtimes), color in zip(algo_runtimes.items(), colors):
    ax.scatter(x_positions, runtimes, color=color, label=label)

ax.legend()
...