我正准备从以下Pandas DataFrame中创建散景堆叠区域图。
DataFrame(df)的示例如下;
date tom jerry bill
2014-12-07 25 12 25
2014-12-14 15 16 30
2014-12-21 10 23 32
2014-12-28 12 13 55
2015-01-04 5 15 20
2015-01-11 0 15 18
2015-01-18 8 9 17
2015-01-25 11 5 16
上面的DataFrame代表总df的代码段,该代码段持续了数年,并且包含所示名称的其他名称。
我试图将日期时间列date
用作x轴,并将每个名称的计数信息用作y轴。
任何人都可以提供的任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用补丁字形创建堆积面积图。我首先使用df.cumsum逐行堆叠数据帧中的值。之后,我向数据框添加两行,最大日期和最小日期且Y值为0。我以与列列表相反的顺序绘制补丁(不包括日期列),因此具有最高值的人将首先被绘制,值较低的人被画出来。
堆积面积图的另一种实现方式可以在here中找到。
import pandas as pd
from bokeh.plotting import figure, show
from bokeh.palettes import inferno
from bokeh.models.formatters import DatetimeTickFormatter
df = pd.read_csv('stackData.csv')
df_stack = df[list(df)[1:]].cumsum(axis=1)
df_stack['date'] = df['date'].astype('datetime64[ns]')
bot = {list(df)[0]: max(df_stack['date'])}
for column in list(df)[1:]:
bot[column] = 0
df_stack = df_stack.append(bot, ignore_index=True)
bot = {list(df)[0]: min(df_stack['date'])}
for column in list(df)[1:]:
bot[column] = 0
df_stack = df_stack.append(bot, ignore_index=True)
p = figure(x_axis_type='datetime')
p.xaxis.formatter=DatetimeTickFormatter(days=["%d/%m/%Y"])
p.xaxis.major_label_orientation = 45
for person, color in zip(list(df_stack)[2::-1], inferno(len(list(df_stack)))):
p.patch(x=df_stack['date'], y=df_stack[person], color=color, legend=person)
p.legend.click_policy="hide"
show(p)