如何使用两个列表绘制图形,其中第一个列表是普通列表,第二个列表包含列表

时间:2018-09-01 11:47:53

标签: python python-3.x matplotlib

我想使用两个列表x和y绘制图形,其中-

x=['18ww25', '18ww27', '18ww28', '18ww28.1', '18ww29', '18ww29.1', '18ww29.2']

y=[['27%', '27%', '27%', '27%', '27%', '27%', '27%'], ['18%', '18%', '20%', '23%', '30%', '30%', '30%'], ['24%', '25%', '28%', '32%', '39%', '39%', '43%'], ['43%', '43%', '44%', '44%', '43%', '45%', '45%'], ['0%', '0%', '0%', '0%', '0%', '0%', '0%'], ['14%', '14%', '16%', '16%', '16%', '17%', '17%'], ['14%', '14%', '14%', '14%', '14%', '14%', '14%'], ['0%', '0%', '0%', '0%', '0%', '0%', '0%'], ['8%', '8%', '8%', '8%', '8%', '8%', '8%']]

我必须绘制每个xy对的图。我必须在同一张图中绘制列表xy的每个列表,例如:(x,y1) (x,y2) ... (x,y9)(共9个元素y中有。)

我现在正在使用的代码是:

 plt.xlabel("X-axis")
    plt.ylabel("Y-axis")
    plt.title("A test graph")
    for i in range(len(y)):
        plt.plot(x,[pt[i] for pt in y],label = 'id %s'%i)
    plt.legend()
    plt.show() 

但是此代码显示错误为

x and y must have same first dimension, but have shapes (7,) and (9,)

我该如何绘制?

1 个答案:

答案 0 :(得分:0)

您似乎想绘制

for i in range(len(y)):
    plt.plot(x, y[i], label = 'id %s'%i)

但是,您可能会首先将y值更改为数字,否则它们将无法缩放。总体上看起来像

import matplotlib.pyplot as plt

x=['18ww25', '18ww27', '18ww28', '18ww28.1', '18ww29', '18ww29.1', '18ww29.2']
y=[['27%', '27%', '27%', '27%', '27%', '27%', '27%'], 
   ['18%', '18%', '20%', '23%', '30%', '30%', '30%'], 
   ['24%', '25%', '28%', '32%', '39%', '39%', '43%'], 
   ['43%', '43%', '44%', '44%', '43%', '45%', '45%'], 
   ['0%', '0%', '0%', '0%', '0%', '0%', '0%'], 
   ['14%', '14%', '16%', '16%', '16%', '17%', '17%'], 
   ['14%', '14%', '14%', '14%', '14%', '14%', '14%'], 
   ['0%', '0%', '0%', '0%', '0%', '0%', '0%'], 
   ['8%', '8%', '8%', '8%', '8%', '8%', '8%']]

z = [list(map(lambda s: float(s.split("%")[0]),yi)) for yi in y]

plt.xlabel("X-axis")
plt.ylabel("Y-axis [%]")
plt.title("A test graph")
for i in range(len(z)):
    plt.plot(x,z[i],label = 'id %s'%i)
plt.legend()
plt.show() 

enter image description here