Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元组的打印列表(包含图形编号)_Python_List_Matplotlib_Plot - Fatal编程技术网

Python 元组的打印列表(包含图形编号)

Python 元组的打印列表(包含图形编号),python,list,matplotlib,plot,Python,List,Matplotlib,Plot,我的问题与这个有关。区别在于元组的结构。第一部分显示绘图编号,第二部分显示值(y)。 我已经设法将一个大列表中的数据提取到三个列表中 如何在三个图(线图)中绘制此元组列表 同样,只需添加一个函数来清理元组,将字符串转换为整数: import matplotlib.pyplot as plt p1 = [(1, '0'), (1, '4'), (1, '2'), (1, '6'), (1, '3'), (1, '4'), (1, '5'), (1, '6'), (1, '7'), (1, '12

我的问题与这个有关。区别在于元组的结构。第一部分显示绘图编号,第二部分显示值(y)。 我已经设法将一个大列表中的数据提取到三个列表中

如何在三个图(线图)中绘制此元组列表


同样,只需添加一个函数来清理元组,将字符串转换为整数:

import matplotlib.pyplot as plt

p1 = [(1, '0'), (1, '4'), (1, '2'), (1, '6'), (1, '3'), (1, '4'), (1, '5'), (1, '6'), (1, '7'), (1, '12'), (1, '23')]
p2 = [(2, '1'), (2, '7'), (2, '2'), (2, '4'), (2, '1'), (2, '7'), (2, '2'), (2, '3'), (2, '4'), (2, '2'), (2, '3')]
p3 = [(3, '2'), (3, '4'), (3, '4'), (3, '2'), (3, '1'), (3, '13'), (3, '9'), (3, '8'), (3, '4'), (3, '2'), (3, '7')]

def cleaner(mylist):
    out = []
    for tup in mylist:
        newtup = tuple()
        for item in tup:
            newtup += (int(item),)
        out.append(newtup)
    return(out)

plt.plot(*zip(*cleaner(p1)))
plt.show()

同样,只需添加一个函数来清理元组,将字符串转换为整数:

import matplotlib.pyplot as plt

p1 = [(1, '0'), (1, '4'), (1, '2'), (1, '6'), (1, '3'), (1, '4'), (1, '5'), (1, '6'), (1, '7'), (1, '12'), (1, '23')]
p2 = [(2, '1'), (2, '7'), (2, '2'), (2, '4'), (2, '1'), (2, '7'), (2, '2'), (2, '3'), (2, '4'), (2, '2'), (2, '3')]
p3 = [(3, '2'), (3, '4'), (3, '4'), (3, '2'), (3, '1'), (3, '13'), (3, '9'), (3, '8'), (3, '4'), (3, '2'), (3, '7')]

def cleaner(mylist):
    out = []
    for tup in mylist:
        newtup = tuple()
        for item in tup:
            newtup += (int(item),)
        out.append(newtup)
    return(out)

plt.plot(*zip(*cleaner(p1)))
plt.show()

您必须为元组创建第三维以表示x轴,否则就没有什么可绘制的。我假设这些都是有序的,并且列表中元组的索引可以被视为一种时间元素

我想如果你一步一步地去做,会更容易理解。可以将每个元组中的第一项视为线颜色,第二项视为y轴值。假设这些都是有序的,您可以枚举每个列表并将递增的值作为x轴值

因此,迭代所有3个列表,然后迭代每个枚举元组,将最终数据集的x、y和颜色值附加到主列表
data

将它们拉入pandas数据框,并使用seaborn干净地创建您正在寻找的多线图

import pandas as pd
import seaborn as sns

a = [(1, '0'), (1, '4'), (1, '2'), (1, '6'), (1, '3'), (1, '4'), (1, '5'), (1, '6'), (1, '7'), (1, '12'), (1, '23')]
b = [(2, '1'), (2, '7'), (2, '2'), (2, '4'), (2, '1'), (2, '7'), (2, '2'), (2, '3'), (2, '4'), (2, '2'), (2, '3')]
c = [(3, '2'), (3, '4'), (3, '4'), (3, '2'), (3, '1'), (3, '13'), (3, '9'), (3, '8'), (3, '4'), (3, '2'), (3, '7')]

data = []
for x in [a,b,c]:
    for i, t in enumerate(x):
        data.append([i, t[0], t[1]])

df = pd.DataFrame(data)
df = df.astype(int)
df.columns=['Time','Color','Value']

sns.lineplot(x='Time',y='Value',hue='Color',data=df)

您必须为元组创建第三维以表示x轴,否则就没有什么可绘制的。我假设这些都是有序的,并且列表中元组的索引可以被视为一种时间元素

我想如果你一步一步地去做,会更容易理解。可以将每个元组中的第一项视为线颜色,第二项视为y轴值。假设这些都是有序的,您可以枚举每个列表并将递增的值作为x轴值

因此,迭代所有3个列表,然后迭代每个枚举元组,将最终数据集的x、y和颜色值附加到主列表
data

将它们拉入pandas数据框,并使用seaborn干净地创建您正在寻找的多线图

import pandas as pd
import seaborn as sns

a = [(1, '0'), (1, '4'), (1, '2'), (1, '6'), (1, '3'), (1, '4'), (1, '5'), (1, '6'), (1, '7'), (1, '12'), (1, '23')]
b = [(2, '1'), (2, '7'), (2, '2'), (2, '4'), (2, '1'), (2, '7'), (2, '2'), (2, '3'), (2, '4'), (2, '2'), (2, '3')]
c = [(3, '2'), (3, '4'), (3, '4'), (3, '2'), (3, '1'), (3, '13'), (3, '9'), (3, '8'), (3, '4'), (3, '2'), (3, '7')]

data = []
for x in [a,b,c]:
    for i, t in enumerate(x):
        data.append([i, t[0], t[1]])

df = pd.DataFrame(data)
df = df.astype(int)
df.columns=['Time','Color','Value']

sns.lineplot(x='Time',y='Value',hue='Color',data=df)

请澄清你想要的结果是什么。否则答案只会是:“你不能。”因为:如果每个元组的第一个元素是绘图的编号,那么每个元组中只剩下一个元素。第二个值在(y)轴上,对于(x),它只按每一个新元组向上计数1。(新绘图再次从0开始表示x)请澄清您期望的结果。否则答案只会是:“你不能。”因为:如果每个元组的第一个元素是绘图的编号,那么每个元组中只剩下一个元素。第二个值在(y)轴上,对于(x),它只按每一个新元组向上计数1。(新的绘图再次从0开始表示x)我使用了这样的答案组合:
data=[]表示[a]中的x:for I,t表示枚举(x):data.append([I,int(t[1])plt.plt(*zip(*cleaner(data)))plt.show()
我使用了这样的答案组合:
data=[]表示[a]中的x:for I,t表示枚举(x):data.append([i,int(t[1]))plt.plot(*zip(*cleaner(data)))plt.show()