Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 如何使用matplotlib创建采购活动图?_Python_Python 3.x_Pandas_Matplotlib - Fatal编程技术网

Python 如何使用matplotlib创建采购活动图?

Python 如何使用matplotlib创建采购活动图?,python,python-3.x,pandas,matplotlib,Python,Python 3.x,Pandas,Matplotlib,如何使用matplotlib创建用户活动图。我看过其他关于堆栈溢出的类似答案,但没有一个能很好地回答我的问题 我的熊猫数据框如下所示: user | purchase date | item ------------------------------- x | 7/1/2010 | AAA y | 8/2/2010 | BBB x | 7/2/2010 | CCC z | 8/4/2010 | AAA z |

如何使用matplotlib创建用户活动图。我看过其他关于堆栈溢出的类似答案,但没有一个能很好地回答我的问题

我的熊猫数据框如下所示:

 user | purchase date | item
-------------------------------
  x   |  7/1/2010     | AAA
  y   |  8/2/2010     | BBB
  x   |  7/2/2010     | CCC
  z   |  8/4/2010     | AAA
  z   |  8/1/2010     | DDD
我想要这样的东西:

(users on y-axis)
x: |----X-X----------------------------------------
y: |-----------------X-----------------------------
z: |---------------X----X--------------------------
---|------------------------------------------------------->
            time(I want dates to be in my x-axis)

我的目标是可视化客户的购买活动。谢谢。

用户
列映射到每个
用户
的唯一数值,这样您就可以简单地打印它,然后只需更改勾号标签

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df['purchase_date'] = pd.to_datetime(df.purchase_date)

users = df.user.unique()
d = dict((users[i], i) for i in range(len(users)))
df['user_id'] = df.user.map(d)

ax = df.plot(x='purchase_date', y='user_id', lw=0, marker='x', ms=6, legend=False)
ax.set_yticks(np.arange(0, len(users), 1))
ax.set_yticklabels(users)
plt.ylabel('user')
_ = plt.show()

请注意,我选择使用带有
lw=0
的线图而不是散点图是很重要的,因为
df.plot(kind='scatter')
无法处理x轴的
datetime
对象,您必须跳过很多环才能正确处理