如何在matplotlib中将列名用作x轴值?

cbwuti44  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(396)

我已经开始学习matplotlib,我已经为一项任务奋斗了一段时间。我有一个数据框,看起来像下面的那个。我想用年份作为x轴值,用每个城市(即每行)作为自己的图来绘制。看似简单的任务(在excel中点击一下),但我仍然没有找到一个可行的方法来完成。每个具有类似 Dataframe 的教程似乎都交换了轴(一列中的年份)。
城市19901991…20192020城市102…57城市201…-5-8城市30-5…-17-30
我得到的最接近的方法是使用2 for循环遍历行和年份,并将每个值追加到列表中(toplot是我的 Dataframe ):

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行中,只有两行被绘制。如图所示
然而,我也需要在一个传奇中获得城市名称,我不知道我的方法是否可行。
我如何才能最好地解决这个问题并正确地绘制值?

nqwrtyyt

nqwrtyyt1#

看起来您只需要转换数据。如果您有一个数据框,默认情况下matplotlib将把数据框的索引放在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)

相关问题