使用Matplotlib在Python中绘制带有字典的散点图。

7
我需要帮助绘制一个字典,下面是数据样本数据集。我想要创建散点图,其中x:y是(x,y)坐标,标题“x”将成为图例。我想要创建下面数据集的图表,因此将所有下面的数据合并到一个图中。
例如:在红色(或任何其他颜色)中绘制标题1的图表:{x:y,x:y},制作一个说明文字(键),说明红色(或任何其他颜色)是标题1,
对于标题2:{x:y,x:y}(用不同的颜色)也同样处理……以此类推。
非常感谢您的帮助。谢谢。
data = {'title1':{x:y, x:y},title2:{x:y,x:y,x:y},'title3':{x:y,x:y}....}

我也遵循了这个建议,但它仅适用于个别图表。 在Myplotlib Python中绘制字典中的字典

这是我尝试过的,我在matplotlib方面没有太多经验,在网上找不到有用的信息。非常感谢您提供的任何帮助。

import matplotlib.pyplot as plt
import numpy as np
d ={'5000cca234c1c445': {382877: 7, 382919: 3},
'5000cca234c94a2e': {382873: 1, 382886: 1},
'5000cca234c89421': {383173: 1, 383183: 2, 382917: 1, 382911: 1},
'5000cca234c5d43a': {382889: 1, 382915: 1, 382917: 8},
'5000cca234c56488': {382909: 2, 382911: 5}}

xval = []
yval= []
ttle = []
print d
for title, data_dict in d.iteritems():
   x = data_dict.keys()
   #print 'title is', title
   #print 'printing x values',x   
   xval = xval + x
   print xval
   y = data_dict.values()
   yval = yval+y
   ttle.append(title)
   print  yval
#print 'printing y values', y         
#plt.figure()
print xval
print yval
print ttle
plt.scatter(xval,yval)
plt.show()

你从哪里获取这些标题?你是在询问Matplotlib的确切语法吗?还是在询问如何将字典转换为该格式? - ForgetfulFellow
你能展示一下你尝试过的代码吗?这个问题目前看起来像是“请替我完成我的工作”。如果你的问题表述为“这是我尝试过的,我想让它做X,但它却做了Y,出了什么问题”,那么你会得到更好的帮助。 - tacaswell
抱歉没有提供足够的信息...这是我尝试过的。 - user3262210
2个回答

8
您可以尝试在循环中绘制,然后显示图例,类似于这样:

您可以尝试在循环中绘制,然后显示图例,类似于这样:

import matplotlib.pyplot as plt

d ={'5000cca234c1c445': {382877: 7, 382919: 3},
'5000cca234c94a2e': {382873: 1, 382886: 1},
'5000cca234c89421': {383173: 1, 383183: 2, 382917: 1, 382911: 1},
'5000cca234c5d43a': {382889: 1, 382915: 1, 382917: 8},
'5000cca234c56488': {382909: 2, 382911: 5}}

colors = list("rgbcmyk")

for data_dict in d.values():
   x = data_dict.keys()
   y = data_dict.values()
   plt.scatter(x,y,color=colors.pop())

plt.legend(d.keys())
plt.show()

这怎么可能有效?keys()和values()的顺序不是随机的吗?它们怎么可能正确地对齐? - robru
3
@Robru 我认为这里有答案[https://docs.python.org/2/library/stdtypes.html#dict.items]。简而言之,如果在调用之间没有修改字典,则它们是随机的但相互对应的。 - Alvaro Fuentes
3
请注意,这种方法在Python 3.x中不适用。您需要编写类似于 list(data_dict.keys())(对于值也是如此)。有关详细信息,请参见https://dev59.com/UFwZ5IYBdhLWcg3wLdsF。 - j-i-l

2

试试这个:

data = {'title1':{x:y, x:y},title2:{x:y,x:y,x:y},'title3':{x:y,x:y}....}

plt.scatter(*zip(*data.items()))
plt.show()
items() 方法返回一个视图对象,该对象显示字典的(键,值)元组对的列表。
使用 zip() 将元组对聚合为 x 和 y 的元组,然后绘制出来。

3
欢迎来到 Stack Overflow!虽然这段代码可能解决了问题,但解释如何以及为什么解决问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释并指出适用的限制和假设。 - Adriaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接