使用函数绘制多个数据集以从字典中提取数据(matplotlib)

时间:2017-09-07 18:52:43

标签: python-2.7 matplotlib

我想从以下格式的字典中选择数据:

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

1 个答案:

答案 0 :(得分: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)