我目前正在使用我正在进行的一些评估的结果创建散点图。
要获取与我的相同结构的数据框,您可以运行:
import pandas as pd
models = ["60000_25_6", "60000_26_6"]
results = []
for i in range(10):
for model in models:
results.append({"simulation": i, "model_id": model, "count_at_1": 1, "count_at_5": 5, "count_at_10": 10})
df = pd.DataFrame(results)
您最终会得到一个如下所示的 pandas 数据框,仅使用默认值(这是一个较小的数据框,请注意,其大小是可变的,并且根据我使用的设置会大得多):
simulation model_id count_at_1 count_at_5 count_at_10
0 0 60000_25_6 60 77 84
1 0 60000_26_6 60 76 83
2 1 60000_25_6 69 80 82
...
18 9 60000_25_6 1 70 79
19 9 60000_26_6 1 68 74
然后我使用以下代码为每个点添加颜色:
import matplotlib.pyplot as plt
colors = plt.get_cmap('hsv')
colors = [colors(i) for i in np.linspace(0,0.95, len(models))]
cmap = {model: colors[i] for i, model in enumerate(models)}
df['color'] = df.apply(lambda row: cmap[row['model_id']], axis=1)
现在 df 是:
simulation model_id count_at_1 count_at_5 count_at_10 color
0 0 60000_25_6 74 81 83 (1.0, 0.0, 0.0, 1.0)
1 0 60000_26_6 75 80 83 (1.0, 0.0, 0.5, 1.0)
2 1 60000_25_6 71 84 89 (1.0, 0.0, 0.0, 1.0)
...
18 9 60000_25_6 2 69 79 (1.0, 0.0, 0.0, 1.0)
19 9 60000_26_6 2 72 78 (1.0, 0.0, 0.5, 1.0)
但是当我运行时:
df.plot.scatter('count_at_1', 'count_at_5', c='color', legend=True)
plt.show()
我怎样才能添加一个类似于这样的图例:
[model_id] [color]
...
但是在正常的 matplotlib 格式中,我会将它放在图上的任何位置。