【问题标题】:How to use column names as x axis values in matplotlib?如何在 matplotlib 中使用列名作为 x 轴值?
【发布时间】:2021-09-20 15:36:11
【问题描述】:

我已经开始学习 matplotlib,并且一直在为一项任务苦苦挣扎。我有一个类似于下面的数据框。我想用年份作为 x 轴值和每个城市(即每一行)作为它自己的情节来绘制它。看似简单的任务(实际上是在 Excel 中单击一次),但我仍然没有找到一种可行的方法来完成它。每个具有相似数据框的教程似乎都交换了轴(一列中的年份)。

City 1990 1991 ... 2019 2020
city1 0 2 ... 5 7
city2 0 1 ... -5 -8
city3 0 -5 ... -17 -30

我得到的最接近的方法是使用 2 个 for 循环遍历行和年份并将每个值附加到列表(toPlot 是我的数据框):

years = range(1990,2021)

for rowIndex in range(0,9):
    datapoints = []
    for year in years:
        datapoints.append(toPlot.loc[rowIndex, year])
    plt.plot(years,datapoints)

它对 2 行按预期工作,但是当它达到 rowIndex = 2 时,由于某种原因它会引发 KeyError。所以在我的 9 行中,只有两行被绘制。 as seen here

但是,我还需要获取传说中的城市名称,我不知道我的方法是否可行。

我如何最好地解决这个问题并正确绘制值?

【问题讨论】:

    标签: python pandas matplotlib jupyter-notebook


    【解决方案1】:

    看起来您只需要转置数据。如果你有一个 Dataframe,默认情况下 Matplotlib 会将 DataFrame 的索引放在 x 轴上,并且会分别绘制每一列。

    import pandas as pd
    data = [{'City': 'city1', '1990': 0, '1991': 2, '2019': 5, '2020': 7},
     {'City': 'city2', '1990': 0, '1991': 1, '2019': -5, '2020': -8},
     {'City': 'city3',  '1990': 0,  '1991': -5, '2019': -17,  '2020': -30}]
    
    df = pd.DataFrame(data)\
        .set_index('City')\
        .T\
        .rename(pd.to_numeric)
    
    df.plot(subplots=True)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多