【问题标题】:Matplotlib v 3 Length mismatch ValueError: Expected axis has x elements, new values have x+1 elementsMatplotlib v 3 长度不匹配 ValueError:预期轴有 x 个元素,新值有 x+1 个元素
【发布时间】:2020-06-01 18:53:39
【问题描述】:

我将 Matplotlib 3.2.1 版与 Python 3.7 和 pandas 1.0.3 一起使用。

我正在使用以下导致长度不匹配错误的代码:

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mpl_dates
df_train = pd.read_csv('mydata.csv', date_parser=True)
df_train.columns = ['date', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6']
df_train['date'] = pd.to_datetime(df_train['date'])
df_train.set_index(['date'])

x_value = df_train['date']
y_value = df_train['col4']
plt.plot_date(x_value, y_value, 'g')
plt.gcf().autofmt_xdate()
plt.show()

导致以下错误:

     File "C:\Users\brohj\anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 178, in set_axis
    f"Length mismatch: Expected axis has {old_len} elements, new "
ValueError: Length mismatch: Expected axis has 6 elements, new values have 7 elements

(注意:错误信息中没有错字,直接照原样复制。)

什么给了?提前致谢。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    问题在于这两行:

    df_train = pd.read_csv('mydata.csv', date_parser=True)
    df_train.columns = ['date', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6']
    

    我相信您在csv 中的数据没有索引名称。你可以这样做:

    # read and parse index as date
    df_train = pd.read_csv('mydata.csv', parse_dates=True, index_col=[0])
    
    # rename column
    df_train.columns = ['col1', 'col2', 'col3', 'col4', 'col5']
    
    # rename index
    df_train.index.name = 'date'
    
    df_train.plot(y='col4', c='g')
    plt.show()
    

    【讨论】:

    • 感谢 Quang,但您的代码会生成一个正确渲染的绿色折线图,x 轴上有行号。
    • 不过,如果您的 csv 文件完全包含 date,您可能需要查看它。
    • 确实如此。这个问题源于我上一个问题的答案。正如您在图表中看到的那样,它将显示日期,但是当它显示日期时,图表呈现不正确(请参阅stackoverflow.com/questions/62129895/…
    • 您的数据只有 6 列,包括 date :-)。让我更新我的答案。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2018-09-21
    • 2020-07-10
    • 2020-01-23
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多