Табличные метки строк должны иметь ошибку длины

#python #matplotlib

#python #matplotlib

Вопрос:

я хотел бы добавить таблицу на свой график, но я продолжаю получать ошибку. вот мой код:

 import numpy as np
import pandas as pd
import csv
import matplotlib.pyplot as plt


filename="outputpcpb.csv"
cols = ["date","year","month","day" ,"pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"]
data1=pd.read_csv(filename,sep=',')
colmns_needed=["year","month" ,"pcp1","pcp2","pcp3","pcp4","pcp5","pcp6"]

data2=pd.read_csv(filename,sep=',')
data2.loc[:, 'pcp1':'pcp6'] = data2.loc[:, 'pcp1':'pcp6'].astype('float')
yy=data2.groupby("year")
mm=data2.groupby("month")
ts=yy.sum()
tm=mm.sum()/40
tk=mm.std()
krm=[float("{0:.2f}".format(i)) for i in tk.pcp1]
krd=[float("{0:.2f}".format(x)) for x in ts.pcp1]

print(krm,krd)

y1=ts.pcp1;y11=tm.pcp1;y21=tk.pcp1
y2=ts.pcp2;y12=tm.pcp2;y22=tk.pcp2
y3=ts.pcp3;y13=tm.pcp3;y23=tk.pcp3
y4=ts.pcp4;y14=tm.pcp4;y24=tk.pcp4
y5=ts.pcp5;y15=tm.pcp5;y25=tk.pcp5
y6=ts.pcp6;y16=tm.pcp6;y26=tk.pcp6

yr=1978
x=[]
x1=[1,2,3,4,5,6,7,8,9,10,11,12]
for i in range(len(y1)):
    yr =1
    x.append(yr)


fig3=plt.figure(3)
axx2=fig3.add_subplot(111)
axx2.set_axis_bgcolor("black")
axx2.autoscale_view()
axx2.plot(x1, y21,label='pcp1')
axx2.plot(x1, y22,label='pcp2')
axx2.plot(x1, y23,label='pcp3')
axx2.plot(x1, y24,label='pcp4')
axx2.plot(x1, y25,label='pcp5')
axx2.plot(x1, y26,label='pcp6')
axx2.set_ylabel('PCP std(mm)')
axx2.set_xlabel("Month"   )
axx2.set_title("STD OF PCP")

plt.table(cellText=[[krm[0],krd[0]],[krm[1],krd[1]],[krm[2],krd[2]],[krm[3],krd[3]],[krm[4],krd[4]],[krm[5],krd[5]],[krm[6],krd[6]],[krm[7],krd[7]],[krm[8],krd[8]],[krm[9],krd[9]],[krm[10],krd[10]],[krm[11],krd[11]]],
          rowLabels = ['STD OF PCP1', 'SUM PF PCP1'],
          colLabels=["JAN","FEB","MAR","APR","MAY","JUN","JULY","AUG","SEPT","OCT","NOV","DEC"],
          loc="bottom", 
          bbox=[0,-0.2,1,0.15])


plt.grid(True)
plt.legend()
plt.legend(loc="lower left" )

plt.show()
  

когда я запускаю код, я получаю эту ошибку:

 raise ValueError("'rowLabels' must be of length {0}".format(rows))
    ValueError: 'rowLabels' must be of length 12
  

У меня есть 2 строки, я не понимаю, что означает эта ошибка с «длиной 12».Как я могу решить эту проблему?

Комментарии:

1. Просто поместите 10 пустых строк в метки строк…

2. это означает дополнительные 10 строк, я не хочу видеть пустые строки. я попытаюсь увидеть результат

3. Я просто говорю, поместите это туда, чтобы ошибка исчезла. Может быть, есть другой способ

4. я попытался и получил дополнительные 10 строк, но на самом деле у меня всего 2 столбца вместо 12, и я запутался, поскольку столбцы создаются в соответствии с длиной коллабораций, не так ли?

Ответ №1:

Вы неправильно отформатировали текст ячейки. если вы печатаете:

 print len(cellText)     # = 12 (no. of rows)
print len(cellText[0])  # = 2 (no. of cols)
  

т. Е. в настоящее время в нем 12 строк и 2 столбца, а не 2 строки и 12 столбцов.

Чтобы получить 12 столбцов и 2 строки, вам нужен массив длиной 2, с подмассивами длиной 12.

т. Е. Что-то вроде этого:

 cellText=[krm,krd]
  

Мы можем проверить следующим образом:

 print len(cellText)     # = 2 (no. of rows)
print len(cellText[0])  # = 12 (no. of cols)
  

Источник: вы можете увидеть, как matplotlib преобразуется cellText в строки и столбцы в коде matplotlib/table.py здесь, в строке 593:https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/table.py#L593