python - 在python中将多个值绘制到一个键

标签 python python-3.x dictionary matplotlib

我正在尝试用这本字典制作散点图

d = {1: [1, 2, 3, 4, 5], 3: [3, 6, 9, 12, 15], 5: [5, 10, 15, 20, 25]}

我希望键位于 X 轴,值位于 Y 轴,并且还显示具有不同键值的图例。我已经尝试过这段代码-

import matplotlib.pyplot as plt

d = {1: [1, 2, 3, 4, 5], 3: [3, 6, 9, 12, 15], 5: [5, 10, 15, 20, 25]}
colors = list("rgbk")
x, y =[], []
for i in d.keys():
   for j in d[i]:
       x.append(i)
       y.append(j)
   plt.scatter(x, y, color = colors.pop())
   plt.legend(d.keys())
plt.show()

但这给了我一个只有一种颜色的点的图,但图例没问题。

This is the output image that I am getting

最佳答案

在这种情况下,最好使用 plt.subplots(),这样您就可以重复使用相同的。颜色迭代是免费的,但我保留了它,不确定您是否更喜欢 rgbk

如果可能,请避免在 Python 中使用 for 循环,以获得更好的可读性和性能。

import matplotlib.pyplot as plt

d = {1: [1, 2, 3, 4, 5], 3: [3, 6, 9, 12, 15], 5: [5, 10, 15, 20, 25]}
colors = list("rgbk")

fig, ax = plt.subplots()

for x, ys in d.items():
    ax.scatter([x] * len(ys), ys, color = colors.pop(), label=x)

plt.legend()
plt.show()

plot

如果您正在处理大型数组,请考虑使用numpy。在这种情况下,您可以重新调整 key 的大小,例如如下所示:

import matplotlib.pyplot as plt
import numpy as np

d = {1: [1, 2, 3, 4, 5], 3: [3, 6, 9, 12, 15], 5: [5, 10, 15, 20, 25]}
colors = list("rgbk")

fig, ax = plt.subplots()

for x, ys in d.items():
    ax.scatter(np.full_like(ys, x), ys, color = colors.pop(), label=x)

plt.legend()
plt.show()

关于python - 在python中将多个值绘制到一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62075827/

相关文章:

python - 如何更新tensorflow中的 'eagertensor"对象

python - 如何使用作为参数传递的行号拆分csv文件并保存到不同的文件中

python - 迭代两个数组在字典中查找值

c# - 如何将包含列表的字典绑定(bind)到 GridView

python - 在python中查找数组中的索引

python - 每个日期的点数总和按列表形式的附加列分组

python - 在Python中将数据列表的列表转换为矩阵(检查内部)

python-3.x - Pandas 样式 applymap 使用 lambda 函数突出显示重复项

python - Python3.3需要watcher

c# - 从字典中复制对对象的引用还是直接从字典中访问它更快?