1

我有以下数据框:

    point               timestamp_local         0
0   A                   2019-07-20 00:00:00     1
1   A                   2019-07-20 01:00:00     3
2   B                   2019-07-20 02:00:00     158
3   A                   2019-07-20 02:30:00     324
4   B                   2019-07-20 03:00:00     502

数据框告诉我point在哪个时间timestamp_local有多少连接。这0是我拥有的连接数。

我现在想使用plotnine库绘制这些数据。当我使用没有时间的时间戳时,我已经完成了这项工作,例如2019-07-20. 但是当我使用带有时间的时间戳时,例如2019-07-20 00:00:00它不起作用。

这是我的 python 命令来绘制没有时间的数据:

pn.ggplot(df, pn.aes(x="timestamp_local", y="0", group="point", color="point")) + pn.geom_line(stat="identity")

这将返回一个数字,我可以在其中看到按点分组的每天计数。 在此处输入图像描述

我现在有两个问题:

  1. 如何在使用时间戳时绘制相同的结果2019-07-20 01:00:00(数据超过几天。所以我不能只是截断日期!)
  2. 如何绘制按月和年分组的相同结果?(例如2019-07, 2019-08,2019-09等等...)

我非常喜欢该plotnine库的解决方案,因为我以后想使用更多的功能,例如平滑等。如果图书馆不可能,plotnine我想要一个图形,其中每个点都有一条线,颜色不同,图形相同!如上图,红色为A点,蓝色为B点。

亲切的问候

4

1 回答 1

0

提供的数据存储在 conn.csv 中,包括主题自定义。第一种情况显示完整的时间戳,使用来自 mizani ( https://mizani.readthedocs.io/en/stable/formatters.html#mizani.formatters.date_format ) 的 date_format 函数。

from plotnine import *
import pandas as pd
from mizani.formatters import date_format

df = pd.read_csv('conn.csv', parse_dates=[1])
custom_axis = theme(axis_text_x = element_text(color="grey", size=6, angle=90, hjust=.3),
                    axis_text_y = element_text(color="grey", size=6), 
                    plot_title = element_text(size = 25, face = "bold"), 
                    axis_title = element_text(size = 10)  
                    ) 

(
    ggplot(data = df, mapping = aes(x='timestamp_local', y='0', group="point", color="point")) + 
    geom_line(stat="identity") + custom_axis + ylab("Count") + xlab("TimeStamp") + labs(title="Count of the Connections") +
    scale_x_datetime(labels = date_format("%Y-%m-%d %H:%M:%S"))
)

完整的时间戳图

to_period 函数用于提取和添加用于执行聚合的month_year 列。由于缺乏信息而使用 geom_point。

年月聚合

于 2020-08-01T22:15:37.437 回答