简体   繁体   中英

ValueError: x and y must have same first dimension when plotting

I am trying to plot an array of x and y values and keep getting this error.

ValueError: x and y must have same first dimension

This is my code:

import numpy as np
import pylab as plt
from matplotlib import rc

def analyze(targt_data, targt_data_name, trang_data, trang_data_name, matches):
    """Analyze a set of samples on target data"""

    _timefrm = [40, 80, 120]
    _scorefilter = 0.8 
    index = 0
    matches = matches[np.where(matches[:, 3] > _scorefilter)]

    # PLOTS
    rc('text', usetex=True)
    fig = plt.figure()
    plt1 = fig.add_subplot(321)
    plt1.hold(True)
    plt2 = fig.add_subplot(322)
    plt3 = fig.add_subplot(323)
    plt4 = fig.add_subplot(324)
    plt5 = fig.add_subplot(325)
    plt6 = fig.add_subplot(326)

    matches = matches[np.where(matches[:, 2] == index)]
    avg_score = np.mean(matches[:, 3])

    # PLOT SAMPLE
    plt1.plot(trang_data[index])

    rwresults = [targt_data[y-1:y+np.max(_timefrm)] for y in matches[:,1]]
    pctresults = [np.log(np.divide(y[1:], y[0])) for y in rwresults]
    for res in pctresults:
        plt1.plot(np.arange(len(trang_data[index]),
                  len(trang_data[index])+np.max(_timefrm)),
                  np.dot(trang_data[index][-1], np.add(res, 1)))
    plt.show()

results_name = raw_input('Load matching scores: ')

# #### LOAD MATCHING SCORES FROM DB
results, training_data_name, target_data_name = Results(DB).load_matching_scores(results_name)

# #### LOAD TARGET DATA AND TRAINING DATA
target_data = TargetData(DB).load(target_data_name)
training_data = TrainingData(DB).load(training_data_name)

# #### RUN ANALYSIS
analyze(target_data, target_data_name, training_data, training_data_name, results)

Also, here are the values printed out:

(Pdb) len(np.dot(trang_data[ns.index][-1], np.add(pctresults[0], 1)))
120

(Pdb) len(np.arange(len(trang_data[ns.index]), len(trang_data[ns.index])+np.max(_timefrm)))
120

(Pdb) np.dot(trang_data[ns.index][-1], np.add(pctresults[0], 1)).shape
(120,)

(Pdb) np.arange(len(trang_data[ns.index]), len(trang_data[ns.index])+np.max(_timefrm)).shape
(120,)

It turns out one of the subarrays was too short:

(Pdb) len(pctresults[71])
100

The value error "x and y must have same first dimension" is raised by the plot(x, y) method when x and y are not of the same length.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM