dict = {2: {20.934144973754883: 'red'},
8: {36.431842803955078: 'blue'},
9: {27.323692321777344: 'blue'},
15: {37.194934844970703: 'blue'},
18: {19.550689697265625: 'red'}}
y = []
x = []
for key,value in dict.items():
y.append(key)
for val,color in value.items():
x.append(val)
c.append(color)
plt.scatter(sorted(x),sorted(y),color = c)
为了对数据进行排序,我对x和y进行了排序。但是当我分散我的情节时,颜色哪里错了。我知道这是因为我没有对颜色进行分类。但如果我尝试对它们进行排序,我就会失败。由于变量值:
value = {20.934144973754883: 'red'}
{36.431842803955078: 'blue'}
{27.323692321777344: 'blue'}
{37.194934844970703: 'blue'}
{19.550689697265625: 'red'}
你无法对此进行排序。 请帮助我,我不知道该怎么做
答案 0 :(得分:1)
实施quantik's suggestion以使用collections.OrderedDict可以对密钥进行排序,并可能产生所需的结果:
import collections
d = collections.OrderedDict()
d[2] = {20.934144973754883: 'red'}
d[8] = {36.431842803955078: 'blue'}
d[9] = {27.323692321777344: 'blue'}
d[15] = {37.194934844970703: 'blue'}
d[18] = {19.550689697265625: 'red'}
y = []
x = []
for key,value in d.items():
y.append(key)
for val,color in value.items():
x.append(val)
c.append(color)
plt.scatter(sorted(x),sorted(y),color = c)
生成此输出:
答案 1 :(得分:0)
为了对数据进行排序,我对x和y进行了排序。但是当我分散我的情节时,颜色就错了。
您的预期结果不明确,但我觉得您有兴趣直接绘制数据。
我知道,因为我没有对颜色进行分类。
如果您只对字典中的数据进行绘图感兴趣,则无需进行排序,因为我们可以并行解包字典。
但如果我尝试对它们进行排序我就会失败。
目前,您正在单独拆开部分数据,这会导致错位。您可能会错误地对数据进行排序以纠正此错位。
相反,尝试使用for
循环解压缩或列表理解(使用注释d
代替内置dict
变量):
import matplotlib.pyplot as plt
#%matplotlib inline
d = { 2: {20.934144973754883: 'red'},
8: {36.431842803955078: 'blue'},
9: {27.323692321777344: 'blue'},
15: {37.194934844970703: 'blue'},
18: {19.550689697265625: 'red'}}
data = [(x, y, c) for y, v in d.items() for x, c in v.items()]
for x, y, c in data:
plt.scatter(x, y, color=c)
或者,您可以使用以下内容替换最后两行,使用zip
并行解包所有x, y, c
数据:
xs, ys, cs = zip(*data)
plt.scatter(xs, ys, color=cs)