Как построить график, используя два списка, где первый список является обычным списком, а второй список содержит список списков - PullRequest
0 голосов
/ 01 сентября 2018

Я хочу построить график, используя два списка 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%']]

Я должен построить график с каждой парой x и y. Я должен построить список x с каждым списком y на том же графике, например: (x,y1) (x,y2) ... (x,y9) (всего 9 элементов * в 1011 *).

Код, который я сейчас использую:

 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 голосов
/ 01 сентября 2018

Похоже, вы хотите построить

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...