2016-08-29 5 views
0

Stumped. они оба массива Numpy они оба та же форма, так почему я получаю «ValueError: х и у должны иметь такое же первое измерение»Numpy массивы одинаковой формы, но получающие ValueError: x и y должны иметь одинаковое первое измерение

благодаря

import matplotlib.pyplot as plt 
import numpy as np 
from datetime import datetime 

num_of_days = 31 
dates = np.empty(num_of_days) 
ranks = np.empty(dates.shape[0]) 
ranks.fill(50) # test data all 50's 
dates = np.arange('2016-01', num_of_days , dtype='datetime64[D]') 
print("ranks shape", ranks.shape) 
print("dates shape", dates.shape) 
print("ranks type", type(ranks)) 
print("dates type", type(dates)) 
print("dates shape first dimension",dates.shape[0]) 
print(dates) 
print(ranks) 

plt.plot_date(dates,2) 
plt.plot(dates,ranks) 
plt.show() 

код должны выполняться Урожайность

Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> 
===== RESTART: E:\scanned\als course\12 15 14 the al project\dev code\8 29 16 test plots.py ===== 
ranks shape (31,) 
dates shape (31,) 
ranks type <class 'numpy.ndarray'> 
dates type <class 'numpy.ndarray'> 
dates shape first dimension 31 
['2016-01-01' '2016-01-02' '2016-01-03' '2016-01-04' '2016-01-05' 
'2016-01-06' '2016-01-07' '2016-01-08' '2016-01-09' '2016-01-10' 
'2016-01-11' '2016-01-12' '2016-01-13' '2016-01-14' '2016-01-15' 
'2016-01-16' '2016-01-17' '2016-01-18' '2016-01-19' '2016-01-20' 
'2016-01-21' '2016-01-22' '2016-01-23' '2016-01-24' '2016-01-25' 
'2016-01-26' '2016-01-27' '2016-01-28' '2016-01-29' '2016-01-30' 
'2016-01-31'] 
[ 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 
    50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 50. 
    50.] 
Traceback (most recent call last): 
    File "E:\scanned\als course\12 15 14 the al project\dev code\8 29 16 test plots.py", line 23, in <module> 
    plt.plot_date(dates,2) 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\pyplot.py", line 3173, in plot_date 
    data=data, **kwargs) 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\__init__.py", line 1812, in inner 
    return func(ax, *args, **kwargs) 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_axes.py", line 1494, in plot_date 
    ret = self.plot(x, y, fmt, **kwargs) 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\__init__.py", line 1812, in inner 
    return func(ax, *args, **kwargs) 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_axes.py", line 1424, in plot 
    for line in self._get_lines(*args, **kwargs): 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_base.py", line 386, in _grab_next_args 
    for seg in self._plot_args(remaining, kwargs): 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_base.py", line 364, in _plot_args 
    x, y = self._xy_from_xy(x, y) 
    File "C:\Users\dave\AppData\Local\Programs\Python\Python35-32\lib\site-packages\matplotlib\axes\_base.py", line 223, in _xy_from_xy 
    raise ValueError("x and y must have same first dimension") 
ValueError: x and y must have same first dimension 
>>> 
+0

Для всех, кто задается вопросом, ошибка не является ошибкой Python, а ошибкой matplotlib (я не тестировал последние три строки, но ранее не было ошибок). – Benjamin

+0

Не оставляйте нас в напряжении. Покажите отпечатки. Некоторая часть трассировки ошибок может помочь, даже если ошибка глубоко вложена в вызов «plot». Два из этих входов не соответствуют по форме. – hpaulj

+1

См. Отредактированный вопрос для выхода run. Извините, я не думал включать его – theakson

ответ

1

Из документов:

plot_date(x, y, fmt='bo', tz=None, xdate=True, 
      ydate=False, **kwargs) 
Similar to the plot() command, except the x or y (or both) data is considered to be dates, and the axis is labeled accordingly. 

dates Ваш есть (31,), но то, что с 2? Почему это не массив с 31 значением?

plt.plot_date(dates, np.arange(dates.shape[0])) 

Участок представляет собой набор точек в восходящей линии с датами на оси х.

+0

Привет, hpaulj date - это массив numpy с формой 31, созданный по дате = np.arange ('2016-01', num_of_days, dtype = 'datetime64 [D]') – theakson

+0

Что вы пытаетесь построить? Даты против чего? Число 2? Если я прокомментирую строку 'plot_date', то остальное будет работать, создавая одну горизонтальную линию на 50. Попробуйте использовать мою последнюю линию сюжета вместо вашего 2. – hpaulj

+0

Hi hpaulj Я просто пытаюсь построить дату против значения ранга 50. Поэтому я должен закончить с той плоской линией, которая есть то, что я хочу (есть причина для этого). Я «думал», что это будет легко, но, видимо, нет. Я просто хотел заполнить ранжирование массива numpy числом 50 столько дней, сколько указано в num_of_days (31). И с помощью диапазона numpy создайте 31 дат, которые я сделал. Я все еще не понимаю, почему я получаю эту ошибку, учитывая, что фигуры четко определены как одинаковые как для ранжирования, так и для даты. И они являются массивами numpy. что мне не хватает? – theakson

Смежные вопросы