2017-09-07 111 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