我怎样才能得到这样的情节?不知道是啥情节

Posted

技术标签:

【中文标题】我怎样才能得到这样的情节?不知道是啥情节【英文标题】:How can I get such a plot? Do not know the type of plot it is我怎样才能得到这样的情节?不知道是什么情节 【发布时间】:2022-01-19 19:42:45 【问题描述】:

我的数据如下所示:

file | timestamps
1 | 02/01/1970 
1 | 03/01/1970 
1 | 04/01/1970
1 | 05/01/1970 
2 | 06/01/1970
2 | 07/01/1970
3 | 08/01/1970
3 | 09/01/1970
3 | 10/01/1970

在 x 轴上,我想知道每个 file 的行数。在 y 轴上,我想要timestamps。它应该看起来类似于这个情节,但我不知道如何得到这个情节。这是瀑布图吗?

【问题讨论】:

这不是waterfall plot。您可以使用 Matplotlib 的 fill_between 函数绘制它:matplotlib.org/stable/api/_as_gen/… 【参考方案1】:

数据不多,但这是您的示例的结果

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import pandas as pd

data = [[1, '02/01/1970'],
        [1, '03/01/1970'],
        [1, '04/01/1970'],
        [1, '05/01/1970'],
        [2, '06/01/1970'],
        [2, '07/01/1970'],
        [3, '08/01/1970'],
        [3, '09/01/1970'],
        [3, '10/01/1970']]

df = pd.DataFrame(data, columns = ['file', 'timestamps'])
df['timestamps'] = pd.to_datetime(df['timestamps'], format = '%d/%m/%Y')

tot_delta_d = 0
tot_file = 0

fig, ax = plt.subplots()

for f in df['file'].unique():
  delta_d = df[df['file'] == f]['timestamps'].max() - df[df['file'] == f]['timestamps'].min()

  rect = patches.Rectangle((tot_delta_d, tot_file),
                           delta_d.days,
                           df[df['file'] == f].shape[0],
                           color='indigo')

  ax.add_patch(rect)

  tot_delta_d += delta_d.days
  tot_file += df[df['file'] == f].shape[0]
  
plt.xlim([0, tot_delta_d])
plt.ylim([0, tot_file])
ax.set_xlabel('Parquets')
ax.set_ylabel('Timestamps')
ax.invert_yaxis()

plt.show()

输出:

【讨论】:

非常感谢!我认为它看起来与不均匀的时间间隔(如秒)相似。所以,我想我只需要将delta_d.days 替换为delta_d.seconds,对吗? 是的,我猜这应该可以解决问题 非常感谢!

以上是关于我怎样才能得到这样的情节?不知道是啥情节的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能得到 UILabel 的高度?

如何设置初始情节提要

将旧的情节代码转换为新版本。我不知道/不明白怎么做

iOS 如何使用早期版本的 iOS 中不存在的情节提要元素?

我可以在情节提要中设置分组的 tableView 部分编号吗?

个别情节有效,但一旦添加子情节,啥都没有出现[重复]