You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带分类索引的Pandas DataFrame使用plt.plot的异常问题求助

Why Your Matplotlib Plots Are Failing With a Categorical Index DataFrame

Hey there! Let's unpack what's going on with your plot issues—this is a common gotcha when working with pandas CategoricalIndex and matplotlib. Let's break down both problems one by one:

1. Why plt.plot(accidents_by_day.num_accidents) throws an error

When you pass a pandas Series with a CategoricalIndex directly to plt.plot(), matplotlib and pandas don’t play nicely here. Here’s the breakdown:

  • Matplotlib expects x-axis values to be numeric (or easily convertible to numbers) to map plot coordinates. A CategoricalIndex uses category labels instead of sequential numeric values.
  • By default, plt.plot() tries to use your Series' index as the x-axis data. Since categorical labels aren’t numeric, matplotlib can’t parse them into valid plot coordinates, triggering a type error or index resolution failure.
  • Even if your categories look like ordered values (e.g., "Monday", "Tuesday"), matplotlib doesn’t recognize them as a sequential scale, so it can’t map them to a proper x-axis.

2. Why plt.plot([accidents_by_day.num_accidents]) creates a blank plot

Wrapping your Series in a list changes how matplotlib interprets the input entirely:

  • You’re passing a list that contains one Series object, not the raw numeric data inside the Series. Matplotlib doesn’t know how to plot a Series object directly—it expects numeric arrays or lists.
  • Even if matplotlib tries to extract data, it treats the list as a single data point (since the list has only one element), so there’s nothing visible to plot. Or the x-axis range gets set to a tiny interval (like 0 to 0) that doesn’t show any of your actual data, resulting in a blank chart.

Fixes to Try

Here are straightforward solutions to get your plots working:

  • For the error case: Extract the numeric values from your Series, or convert the categorical index to a numeric format:
    # Option 1: Plot just the numeric values (uses default integer x-axis)
    plt.plot(accidents_by_day.num_accidents.values)
    
    # Option 2: Use the categorical index's underlying numeric codes for x-axis
    plt.plot(accidents_by_day.index.codes, accidents_by_day.num_accidents)
    
    # Option 3: Reset the index to use default integer indices
    plt.plot(accidents_by_day.reset_index().num_accidents)
    
  • For the blank plot case: Remove the list wrapper and use any of the valid approaches above. If you need to plot multiple series, pass each numeric dataset as a separate element in the list, e.g.:
    # Example: Plotting two series side by side
    plt.plot(accidents_by_day.num_accidents.values, label="Accidents")
    plt.plot(accidents_by_day.num_injuries.values, label="Injuries")
    plt.legend()
    

内容的提问来源于stack exchange,提问作者Zahra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:37:27