只需进入熊猫的数据可视化。此刻,我尝试使用matplotlib可视化一个如下所示的pd:
Initiative_160608 Initiative_160570 Initiative_160056
Beschluss_BR 2009-05-15 2009-05-15 2006-04-07
Vorlage_BT 2009-05-22 2009-05-22 2006-04-26
Beratung_BT 2009-05-28 2009-05-28 2006-05-11
ABeschluss_BT 2009-06-17 2009-06-17 2006-05-17
Beschlussempf 2009-06-17 2009-06-17 2006-05-26
如您所见,我有许多列,其中包含五个不同的日期(每个日期代表五个事件的总链中的一个事件)。现在解决问题:
我的计划是使用5个不同事件之间的时间增量(第一个事件和最后一个事件之间经过了多少天,包括中间的日期),以堆叠的水平图表显示显示的数据。每列应代表图表中的一个条形图。整个图表不是关于经过的绝对时间,而是关于五个事件的持续时间(相对于一栏的总持续时间),这意味着所有条形图的总长度都应相同。
但是我还没有找到任何类似的东西或自己找到了解决方案。对于采用所示数据进行处理的任何解决方案,我将深表感谢。
答案 0 :(得分:0)
我不确定这是否是您要查找的,但是如果每列都应该是一个条形,并且您希望每列中都有时间增量,那么您需要每行之间的天数差,而且我猜第一行应该相差0天(因为这是起点)。
对于堆叠的条形图,索引也用于创建类别,但是在您的情况下,您希望将列作为类别,并且每个条形都由不同的索引值组成。这意味着您最终需要转置df。
此解决方案很难看,但希望能有所帮助。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({
"Initiative_160608": ['2009-05-15', '2009-05-22', '2009-05-28', '2009-06-17', '2009-06-17'],
"Initiative_160570": ['2009-05-15', '2009-05-22', '2009-05-28', '2009-06-17', '2009-06-17'],
"Initiative_160056": ['2006-04-07', '2006-04-26', '2006-05-11', '2006-05-17', '2006-05-26']})
df.index = ['Beschless_BR', 'Vorlage_BT', 'Beratung_BT', 'ABeschless_BT', 'Beschlussempf']
# convert everything to dates
df = df.apply(lambda x: pd.to_datetime(x, format="%Y-%m-%d"))
def get_days(x):
diff_list = []
for i in range(len(x)):
if i == 0:
diff_list.append(x[i] - x[i])
else:
diff_list.append(x[i] - x[i-1])
return diff_list
# get the difference in days, then convert back to numbers
df_diff = df.apply(lambda x: get_days(x), axis = 0)
df_diff = df_diff.apply(lambda x: x.dt.days)
# transpose the matrix so that each initiative becomes a stacked bar
df_diff = df_diff.transpose()
# replace 0 values with 0.2 so that the bars are visible
df_diff = df_diff.replace(0, 0.2)
df_diff.plot.bar(stacked = True)
plt.show()