【问题标题】:Creating a graphic from the data of a list从列表的数据创建图形
【发布时间】:2020-09-08 12:10:41
【问题描述】:

我有这个清单:

[(200, array([1.81101387])), (300, array([2.73324657])), (400, array([3.66660659])), (500, array([4.61826639])), (600, array([5.57527109])), (700, array([6.54331291])), (800, array([7.5340437])), (900, array([8.53877086])), (1000, array([9.54263164])), (1100, array([10.57365805])), (1200, array([11.61853761])), (1300, array([12.67720361])), (1400, array([13.74957748])), (1500, array([14.83556906])), (1600, array([15.93507691])), (1700, array([17.07408599])), (1800, array([18.20190138])), (1900, array([19.37230333])), (2000, array([20.52788386])), (2100, array([21.72908566])), (2200, array([22.94628865])), (2300, array([24.14308228])), (2400, array([25.38997665])), (2500, array([26.65224533])), (2600, array([27.9296472])), (2700, array([29.26490691])), (2800, array([30.57345122])), (2900, array([31.89630179])), (3000, array([33.2811809])), (3100, array([34.63333589])), (3200, array([36.05016039])), (3300, array([37.43023372])), (3400, array([38.87746378])), (3500, array([40.34008923])), (3600, array([41.81764985])), (3700, array([43.30966982])), (3800, array([44.81565878])), (3900, array([46.33511277]))]

它的元素是(高度,时间),我想知道如何创建它的图形(删除数组())。

我的一个想法是用 pandas 创建一个数据框,然后表示列。问题是我不知道如何分离元素以便将它们引入数据框。

谢谢。

【问题讨论】:

  • import matplotlib.pyplot as plt 是你的朋友...然后plt.plot(var1, var2)
  • array([2.73324657]) 看起来像一个函数调用。你能提供代码吗?但是是的,maltplotlib 是解决方案
  • array([...]) 很可能是一个 numpy 数组

标签: python python-3.x list dataframe


【解决方案1】:

这应该可行(假设 x 是时间,y 是高度)

import pandas as pd

# add the following lines if you have to copy and paste your data
from numpy import array
data = [(200, array([1.81101387])), (300, array([2.73324657])), (400, array([3.66660659])), (500, array([4.61826639])), (600, array([5.57527109])), (700, array([6.54331291])), (800, array([7.5340437])), (900, array([8.53877086])), (1000, array([9.54263164])), (1100, array([10.57365805])), (1200, array([11.61853761])), (1300, array([12.67720361])), (1400, array([13.74957748])), (1500, array([14.83556906])), (1600, array([15.93507691])), (1700, array([17.07408599])), (1800, array([18.20190138])), (1900, array([19.37230333])), (2000, array([20.52788386])), (2100, array([21.72908566])), (2200, array([22.94628865])), (2300, array([24.14308228])), (2400, array([25.38997665])), (2500, array([26.65224533])), (2600, array([27.9296472])), (2700, array([29.26490691])), (2800, array([30.57345122])), (2900, array([31.89630179])), (3000, array([33.2811809])), (3100, array([34.63333589])), (3200, array([36.05016039])), (3300, array([37.43023372])), (3400, array([38.87746378])), (3500, array([40.34008923])), (3600, array([41.81764985])), (3700, array([43.30966982])), (3800, array([44.81565878])), (3900, array([46.33511277]))]
##

x, y = [item[1][0] for item in data], [item[0] for item in data]

df = pd.DataFrame(data={'time': x, 'height': y})

您还可以通过添加以下行来检查您的数据是否按时间排序:

data = sorted(data, key=lambda x: x[1][0])

【讨论】:

  • 谢谢,这真的很有帮助。你为什么说项目 [1] [0] 然后是项目 [0]?只是要知道,它工作得很好。
  • 数组中的每一项看起来像这样: (y, array([x]),本质上是 (y, [x]) 因为你可以像访问 python 数组一样访问 numpy 数组. 因此,y = item[0] 和 x 是 item[1][0] 因为我们必须访问数组内的数组
【解决方案2】:

您可以将您的数据结构解压缩到xy,然后绘制它们。

import matplotlib.pyplot as plt 
from numpy import array 

a = [(200, array([1.81101387])), (300, array([2.73324657])), (400, array([3.66660659])), (500, array([4.61826639])), (600, array([5.57527109])), (700, array([6.54331291])), (800, array([7.5340437])), (900, array([8.53877086])), (1000, array([9.54263164])), (1100, array([10.57365805])), (1200, array([11.61853761])), (1300, array([12.67720361])), (1400, array([13.74957748])), (1500, array([14.83556906])), (1600, array([15.93507691])), (1700, array([17.07408599])), (1800, array([18.20190138])), (1900, array([19.37230333])), (2000, array([20.52788386])), (2100, array([21.72908566])), (2200, array([22.94628865])), (2300, array([24.14308228])), (2400, array([25.38997665])), (2500, array([26.65224533])), (2600, array([27.9296472])), (2700, array([29.26490691])), (2800, array([30.57345122])), (2900, array([31.89630179])), (3000, array([33.2811809])), (3100, array([34.63333589])), (3200, array([36.05016039])), (3300, array([37.43023372])), (3400, array([38.87746378])), (3500, array([40.34008923])), (3600, array([41.81764985])), (3700, array([43.30966982])), (3800, array([44.81565878])), (3900, array([46.33511277]))]

x = [_[0] for _ in a]
y = [_[1][0] for _ in a]
# Here it could be also y = [_[1] for _ in a], but we are dealing here with the fact that you have plenty of one-element arrays

plt.plot(x, y)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2021-03-28
    • 2018-12-13
    • 2021-12-23
    • 2018-05-15
    • 2020-05-13
    • 1970-01-01
    相关资源
    最近更新 更多