我想从以下格式的字典中选择数据:
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 :(得分:0)
问题可能与您认为的不同。您只绘制最后一个点的原因是在每个循环步骤中x
和y
被重新分配,这样在循环结束时,每个循环都包含一个值。
作为一种解决方案,您可能希望使用列表将值附加到,例如
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()
值得注意的是plot_dictdata
函数可以简化很多,给出与上面相同的结果:
def plot_dictdata(ax1, key):
x,y = zip(*dictdata[key])
ax1.scatter(x,y)