Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从dataframe列编辑matplotlib打印标签?_Python_Matplotlib - Fatal编程技术网

Python 如何从dataframe列编辑matplotlib打印标签?

Python 如何从dataframe列编辑matplotlib打印标签?,python,matplotlib,Python,Matplotlib,我有一个熊猫数据框。dataframe将日期作为索引和变量。作为一个玩具例子,下面的简单数据框: date var1 2001-03-01 00:00 1 2002-03-01 00:00 2 2003-03-01 00:00 3 2004-03-01 00:00 4 我想使用matplotlib绘制var1与date。当

我有一个熊猫数据框。dataframe将日期作为索引和变量。作为一个玩具例子,下面的简单数据框:

      date                   var1
      2001-03-01 00:00       1   
      2002-03-01 00:00       2    
      2003-03-01 00:00       3   
      2004-03-01 00:00       4     
我想使用matplotlib绘制
var1
date
。当我尝试以下方法时:

  df["var1"].plot()
  plt.show()       

我得到了我想要的绘图,但在
x
轴上我有完整的日期/时间(例如
2002-03-01 00:00
),而我只想显示
2002
。有(简单的)方法吗?

看看第一个例子。
x
记号的标签用以下行指定:

plt.xticks(x, labels, rotation='vertical')
第一个参数是带有记号索引的列表,第二个参数是标签列表。在您的情况下,您可以使用以下命令从第一列获取日期:

labels = df['date'].tolist()
其中,
df
是您的数据帧。然后,您可以在此列表上执行操作,例如,仅选择带有年份的子字符串:

>>> labels = ['2001-03-01 00:00', '2001-03-01 00:00']
>>> newlabels = [x[:4] for x in labels]
>>> newlabels
['2001', '2001']
然后在第一个命令中将该列表用作标签

因此,结合所有方面:

import matplotlib.pyplot as plt
import pandas as pd
c1 = ['2001-03-01 00:00','2002-03-01 00:00','2003-03-01 00:00','2004-03-01 00:00']
c2 = [1,2,3,4]
df = pd.DataFrame(data={'date':c1,'var1':c2})
df['var1'].plot()
labels = df['date'].tolist()
newlabels = [x[:4] for x in labels]
plt.xticks(range(len(newlabels)), newlabels)
plt.show()
返回:


请看第一个示例。
x
记号的标签用以下行指定:

plt.xticks(x, labels, rotation='vertical')
第一个参数是带有记号索引的列表,第二个参数是标签列表。在您的情况下,您可以使用以下命令从第一列获取日期:

labels = df['date'].tolist()
其中,
df
是您的数据帧。然后,您可以在此列表上执行操作,例如,仅选择带有年份的子字符串:

>>> labels = ['2001-03-01 00:00', '2001-03-01 00:00']
>>> newlabels = [x[:4] for x in labels]
>>> newlabels
['2001', '2001']
然后在第一个命令中将该列表用作标签

因此,结合所有方面:

import matplotlib.pyplot as plt
import pandas as pd
c1 = ['2001-03-01 00:00','2002-03-01 00:00','2003-03-01 00:00','2004-03-01 00:00']
c2 = [1,2,3,4]
df = pd.DataFrame(data={'date':c1,'var1':c2})
df['var1'].plot()
labels = df['date'].tolist()
newlabels = [x[:4] for x in labels]
plt.xticks(range(len(newlabels)), newlabels)
plt.show()
返回:


日期是字符串吗?我不确定,我怎么才能知道呢?。。。我想这是你写的代码。如果你不能告诉我们,那么给我们看你制作数据帧的代码。我认为它是一个字符串。数据来自另一个来源,我没有生成它,我只是想绘制一个变量。@km1234告诉我们打印类型(df[“date”][1])是什么意思。这将告诉我们日期的类型。日期是字符串吗?我不确定,我如何才能找到?。。。我想这是你写的代码。如果你不能告诉我们,那么给我们看你制作数据帧的代码。我认为它是一个字符串。数据来自另一个来源,我没有生成它,我只是想绘制一个变量。@km1234告诉我们打印类型(df[“date”][1])是什么意思。这将告诉我们日期的类型。