python-3.x - 如何迭代散点图的列表并创建独特元素的图例
问题描述
背景:
我有一个list_of_x_and_y_list
包含x
和y
值,如下所示:
[[(44800, 14888), (132000, 12500), (40554, 12900)], [(None, 193788), (101653, 78880), (3866, 160000)]]
我有另一个data_name_list
["data_a","data_b"]
这样
"data_a" = [(44800, 14888), (132000, 12500), (40554, 12900)]
"data_b" = [(None, 193788), (101653, 78880), (3866, 160000)]
的/ 或len
的> 20 。list_of_x_and_y_list
len
data_name_list
问题:
如何为 中的每个项目(相同颜色)创建散点图data_name_list
?
我试过的:
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax = plt.axes(facecolor='#FFFFFF')
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
print(list_of_x_and_y_list)
for x_and_y_list, data_name, color in zip(list_of_x_and_y_list, data_name_list, colors):
for x_and_y in x_and_y_list,:
print(x_and_y)
x, y = x_and_y
ax.scatter(x, y, label=data_name, color=color) # "label=data_name" creates
# a huge list as a legend!
# :(
plt.title('Matplot scatter plot')
plt.legend(loc=2)
file_name = "3kstc.png"
fig.savefig(file_name, dpi=fig.dpi)
print("Generated: {}".format(file_name))
问题:
图例似乎是一个很长的列表,我不知道如何纠正:
相关研究:
解决方案
您获得长重复列表作为图例的原因是因为您将每个点作为单独的系列提供,因为matplotlib
不会根据标签自动对数据进行分组。
一个快速的解决方法是遍历列表并将每个系列的 x 值和 y 值压缩为两个元组,以便x
元组包含所有 x 值,y
元组包含 y 值。
然后,您可以将这些元组plt.plot
与标签一起提供给方法。
我觉得这些名称list_of_x_and_y_list
冗长而复杂,所以在我的代码中我使用了较短的名称。
import matplotlib.pyplot as plt
data_series = [[(44800, 14888), (132000, 12500), (40554, 12900)],
[(None, 193788), (101653, 78880), (3866, 160000)]]
data_names = ["data_a","data_b"]
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax = plt.axes(facecolor='#FFFFFF')
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
for data, data_name, color in zip(data_series, data_names, colors):
x,y = zip(*data)
ax.scatter(x, y, label=data_name, color=color)
plt.title('Matplot scatter plot')
plt.legend(loc=1)
推荐阅读
- java - 如何将 Spring 事务管理与 JDBI 3 集成?
- javascript - 想要将 DIV 下载为 IMAGE,它是画布元素
- python - 使用 openpxl 将 excel 公式应用于列需要很长时间才能执行
- python-3.x - tf.map_fn 中的张量流索引
- javascript - 回调、高阶函数、回调队列有什么区别
- notepad++ - 想要在一定数量的逗号后保留文本(记事本++)
- swift - 为什么我的 UIButton 在 segue 后仍然存在?
- java - 如何从所有按钮打印文本?
- redux - react-redux 应用程序中的操作重复
- asp.net - 42703:列 Extent1.Discriminator 不存在