如何基于颜色为散点图标记图例

时间:2018-10-24 08:01:59

标签: python matplotlib plot legend scatter-plot

我正在绘制一个图表,以可视化一些排序算法在不同数据大小上的运行时间。条件是运行时间应该在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 :(得分:0)

最简单,最一致的方法是为每种算法绘制散点图。另外,您可能希望为此使用面向对象的界面。

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()