If you ever surfed the web, I'm sure at some point you stumbled over the creative routines of famous people charts. People are often interested in how creative or successful individuals managed their time and when in their daily schedule they did what were famous for.

I guess for most of us normal human beings the day is centred around some official office hours. Some others, like myself, are more or less free to partition their schedule as long as projects are finished. Lately, I was called out by a friend

@halirutan I'm curious what is your daily schedule that you sprint to bed around 6:30 a.m.

Well, I have to admit that I don't follow a rigorous daily schedule, although I have some clear preferences:

I like to work at night because it is quiet; no phones ring; no unexpected visits of someone who needs something.

I love to sleep when I'm exhausted and not when Mommy says that it's time for bed.

I try to have a good deal of time with my kids and small breaks that reset my brain.

That's when I'm most productive. If I had a daily schedule, it probably would average out to the following

It would be funny to see how others partition their days and I'm very sure that many of us would be delighted to see how people from the WRI development team work. If I could nominate someone for the daily schedule challenge, I would be interested in the timetables of

Before I sprint to bed on a Saturday morning after 6 a.m. let me quickly provide you with the implementation of the schedule chart.

Implementation

Firstly, this is a hack that was tested on exactly one schedule. Feel free to improve it. The graphics above was created with

s = schedule[ "Patrick Scheibe", Import["myImage.jpg"], { social[10, "Get up"], otherwork[11, "Office work"], social[17, "Free time"], sleep[22, "Nap to refuel"], work[23, "Most creative time"], social[4, "Read"], sleep[5] }]; schedulePlot[s]

You have 5 possible activities: work , otherwork , exercise , sleep and social . The usage is simple:

Give each activity a starting time (only full hours) between 0 and 24 hours. The end-time of it will be calculated by the time of the next activity

The provided image must be a square. Otherwise, it get's squeezed when I map it onto the disk

the provided name as the first argument is not used right now

You can either copy the implementation below or import the complete code (don't be afraid, it just imports cell expressions without evaluating anything) by evaluating

Import["http://halirutan.github.io/Mathematica-SE-Tools/decode.m"]["http://i.stack.imgur.com/3d8cw.png"]

The implementation is simple. First, we define some activities that that are transformed into different kinds of item

work[args__] := item["Work", args]; otherwork[args__] := item["OtherWork", args]; exercise[args__] := item["Exercise", args]; sleep[args__] := item["Sleep", args]; social[args__] := item["Social", args];

Some colours we use for the various activities

col[n_] := ColorData[97, n]; col["Work"] = col[15]; col["OtherWork"] = Lighter[col[15]]; col["Exercise"] = col[7]; col["Sleep"] = GrayLevel[0.95]; col["Social"] = col[2];

The underlying item can be rendered with Style and Label . Also, we need to convert the provided starting hours to time-spans as this is what SectorChart understands. Therefore, some accessors for item

item[type_, t_] := item[type, t, ""]; item[_, t_, _]["Time"] := t; item[type_, _, label_]["Refine", t_] := item[type, t, label]; item[type_, t_, label_]["Render"] := With[ {item = Style[{t, 1}, col[type]]}, If[label === "", item, Labeled[item, label, "VerticalCallout"] ] ];

The schedule function will convert the starting hours and puts all information into an Association

schedule[name_String, img_Image, l : {_item ..} /; Length[l] > 1] := Module[ { times = #["Time"] & /@ l, startTime, items }, startTime = First[times]; items = #1["Refine", #2] & @@@ Transpose[{l, Mod[Differences[Append[times, First[times]]], 24]}]; <|"StartTime" -> startTime, "Times" -> times, "Items" -> items, "Name" -> name, "Image" -> img|> ]

For the image in the centre, we create a disk from polygons and map a texture onto it

With[{pts = Table[{Cos[phi], Sin[phi]}, {phi, 0, 2 Pi, Pi/20.}]}, texturedDisk[img_Image] := Graphics[{ Texture[img], Polygon[4 pts, VertexTextureCoordinates -> (1/2 (# + {1, 1}) & /@ pts)]}] ]

The rest is just calling SectorChart and putting the image in the centre

schedulePlot[ass_Association] := Module[{ticks}, ticks = {#1, Style[ToString[#2] <> ":00", 8]} & @@@ Transpose[{Pi*(ass["Times"] - ass["StartTime"])/12, ass["Times"]}]; Show[{ texturedDisk[ass["Image"]], SectorChart[ Map[#["Render"] &, ass["Items"]], PolarAxes -> {True, False}, PolarAxesOrigin -> {0, 4}, PolarTicks -> {ticks, None}, PolarGridLines -> {Range[0, 2 Pi, Pi/12], False}, SectorOrigin -> {{Pi/2 - Pi*ass["StartTime"]/12, "Clockwise"}, 4} ]}, PlotRange -> All] ];