Python从字典内的值绘制图形

Joe*_*el 5 python plot dictionary list

我有一个字典,看起来像这样:

test = {1092268: [81, 90], 524292: [80, 80], 892456: [88, 88]}
Run Code Online (Sandbox Code Playgroud)

现在我想用这个字典做一个简单的情节,看起来像:

test = {1092268: [x, y], 524292: [x, y], 892456: [x, y]}
Run Code Online (Sandbox Code Playgroud)

所以我想我需要做两个列表,即x=[]y=[]在字典列表的第一个值变为x和第二为y.所以我最终得到一个数字(81,90)(80,80和(88,88).我怎么能这样做?

tmt*_*prt 10

使用matplotlib绘制数据

将数据转换为数字列表(类似于数组)并使用scatter()+ annotate()from matplotlib.pyplot.

%matplotlib inline
import random
import sys
import array
import matplotlib.pyplot as plt

test = {1092268: [81, 90], 524292: [80, 80], 892456: [88, 88]}

# repackage data into array-like for matplotlib 
# (see a preferred pythonic way below)
data = {"x":[], "y":[], "label":[]}
for label, coord in test.items():
    data["x"].append(coord[0])
    data["y"].append(coord[1])
    data["label"].append(label)

# display scatter plot data
plt.figure(figsize=(10,8))
plt.title('Scatter Plot', fontsize=20)
plt.xlabel('x', fontsize=15)
plt.ylabel('y', fontsize=15)
plt.scatter(data["x"], data["y"], marker = 'o')

# add labels
for label, x, y in zip(data["label"], data["x"], data["y"]):
    plt.annotate(label, xy = (x, y))
Run Code Online (Sandbox Code Playgroud)

散点图

通过阅读文档并添加更多配置,可以使绘图变得更漂亮.


更新

纳入来自@ daveydave400的答案的建议.

# repackage data into array-like for matplotlib, pythonically
xs,ys = zip(*test.values())
labels = test.keys()   

# display
plt.figure(figsize=(10,8))
plt.title('Scatter Plot', fontsize=20)
plt.xlabel('x', fontsize=15)
plt.ylabel('y', fontsize=15)
plt.scatter(xs, ys, marker = 'o')
for label, x, y in zip(labels, xs, ys):
    plt.annotate(label, xy = (x, y))
Run Code Online (Sandbox Code Playgroud)


djh*_*ese 5

这适用于python 2和3:

x, y = zip(*test.values())
Run Code Online (Sandbox Code Playgroud)

一旦你有了这些,你可以将它们传递给像matplotlib这样的绘图库.


Cra*_*ler 0

def plot(label, x, y):
    ...

for (key, coordinates) in test.items():
    plot(key, coordinates[0], coordinates[1])
Run Code Online (Sandbox Code Playgroud)