我们如何根据颜色标记散点图的图例
Posted
技术标签:
【中文标题】我们如何根据颜色标记散点图的图例【英文标题】:How can we mark legend for a scatter plot based on color 【发布时间】:2019-03-28 13:28:47 【问题描述】:我正在绘制一个图表来可视化一些排序算法在不同数据大小上的运行时间。条件是运行时间应该在 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()
【问题讨论】:
请显示您用于生成此图的代码。 在问题中添加了代码。 您可以转置数据,即遍历不同的算法并为每个算法创建一个单一颜色的散点图。然后在每个散点图中定义一个标签可以轻松地自动获取图例。否则,您当然可以创建自定义图例 (plt.legend(handles=..., labels=...)
)。
【参考方案1】:
最简单、最一致的方法是为每个算法制作一个散点图。此外,您可能希望为此使用面向对象的接口。
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()
【讨论】:
以上是关于我们如何根据颜色标记散点图的图例的主要内容,如果未能解决你的问题,请参考以下文章