2017-09-07 72 views
2

我想从以下格式的字典绘制选择数据:图形多个数据集

dictdata = {key_A: [(1,2),(1,3)]; key_B: [(3,2),(2,3)]; key_C: [(4,2),(1,4)]} 

我使用下面的函数来提取对应于数据一个特定的键,然后将x和y值分成两个可以绘制的列表。

def plot_dictdata(ax1, key): 
    data = list() 
    data.append(dictdata[key]) 
    for list_of_points in data: 
     for point in list_of_points: 
      x = point[0] 
      y = point[1] 
    ax1.scatter(x,y) 

我希望能够给这个函数多次调用(见下面的代码),并有数据的所有相关集出现在同一张图。但是,最终的图仅显示最后一组数据。如何在不清除前一组数据的情况下在同一图形上绘制所有数据集?

fig, ax1 = plt.subplots() 
plot_dictdata(ax1, "key_A") 
plot_dictdata(ax1, "key_B") 
plot_dictdata(ax1, "key_C") 
plt.show() 

我刚刚开始使用matplotlib,但无法找出使用以下示例讨论相关问题的解决方案。先谢谢你。 how to add a plot on top of another plot in matplotlib? How to draw multiple line graph by using matplotlib in Python Plotting a continuous stream of data with MatPlotLib

回答

0

这可能是因为这个问题是在不同的点比你想象的那样。您只得到最后一个绘制点的原因是,在每个循环步骤中,步骤xy正在重新分配,使得在循环结束时,每个步骤都包含一个值。

正如你可能需要使用列表中的值追加到一个解决方案,像

import matplotlib.pyplot as plt 

dictdata = {"key_A": [(1,2),(1,3)], "key_B": [(3,2),(2,3)], "key_C": [(4,2),(1,4)]} 

def plot_dictdata(ax1, key): 
    data = list() 
    data.append(dictdata[key]) 
    x=[];y=[] 
    for list_of_points in data: 
     for point in list_of_points: 
      x.append(point[0]) 
      y.append(point[1]) 
    ax1.scatter(x,y) 

fig, ax1 = plt.subplots() 
plot_dictdata(ax1, "key_A") 
plot_dictdata(ax1, "key_B") 
plot_dictdata(ax1, "key_C") 
plt.show() 

导致
enter image description here

这将是值得一提的是,plot_dictdata功能可以简化一个很多,给出了与上面相同的结果:

def plot_dictdata(ax1, key): 
    x,y = zip(*dictdata[key]) 
    ax1.scatter(x,y) 
+0

你说得对这个错误并不是我所期望的。简化也很有用,因为我还没有遇到zip函数。谢谢! – slithytovesNborogroves