我正在尝试用这本字典制作散点图
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()
但这给了我一个只有一种颜色的点的图,但图例没问题。
最佳答案
在这种情况下,最好使用 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()
如果您正在处理大型数组,请考虑使用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/