#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