|
|
(7 intermediate revisions by the same user not shown) |
Line 2: |
Line 2: |
|
| |
|
|
| |
|
| =Tile Map Prototype= | | =Project TileMap= |
| ==authors== | | |
| | ==Authors== |
| [[Teaching:TUW - UE InfoVis WS 2006/07 - Gruppe 02|Gruppe 02 (Diesenreiter, Weixelbaumer, Felkel, Maier)]] | | [[Teaching:TUW - UE InfoVis WS 2006/07 - Gruppe 02|Gruppe 02 (Diesenreiter, Weixelbaumer, Felkel, Maier)]] |
|
| |
|
| ==architecture== | | ==Task Description== |
| ===description===
| | Our task was to implement an application for visualizing time-dependent data, using the so called tilemap technique. For detailed information on this fascinating technique, you should visit our [[Teaching:TUW_-_UE_InfoVis_WS_2006/07_-_Gruppe_02_-_Aufgabe_3_-_Technique|Tilemap]] description. We were allowed to make use of the powerful java toolkit prefuse, which provides many of the needed functionalities. |
| ===images===
| |
| | |
| ==code==
| |
| === TileMap class===
| |
| <pre>
| |
| package tilemap;
| |
| //@author: simon diesenreiter (sd), stefan weixelbaumer (sw), wolfgang felkel (wf), alexander maier (am)
| |
| //@year: 2006
| |
| //@class TileMap: main class
| |
| | |
| | |
| //PREFUSE
| |
| import prefuse.data.parser.DateTimeParser;
| |
| import prefuse.data.parser.DoubleParser;
| |
| import prefuse.data.parser.DataParser;
| |
| import prefuse.data.parser.ParserFactory;
| |
| import prefuse.data.Table;
| |
| import prefuse.data.io.DataIOException;
| |
| import prefuse.data.io.DelimitedTextTableReader;
| |
| import prefuse.data.expression.Predicate;
| |
| import prefuse.data.expression.parser.ExpressionParser;
| |
| import prefuse.Visualization;
| |
| import prefuse.render.RendererFactory;
| |
| import prefuse.render.AxisRenderer;
| |
| import prefuse.render.Renderer;
| |
| import prefuse.render.ShapeRenderer;
| |
| //mouseover
| |
| import prefuse.controls.ToolTipControl;
| |
| | |
| | |
| //UTIL
| |
| import java.util.Vector;
| |
| import java.util.Calendar;
| |
| import java.util.Date;
| |
| | |
| | |
| //TEXT
| |
| import java.text.SimpleDateFormat;
| |
| | |
| //ACTIONS
| |
| import prefuse.action.layout.AxisLayout;
| |
| import prefuse.Constants;
| |
| import prefuse.visual.VisualItem;
| |
| import prefuse.action.ActionList;
| |
| import prefuse.action.RepaintAction;
| |
| import prefuse.action.assignment.DataColorAction;
| |
| import java.awt.Color;
| |
| | |
| import java.awt.event.ActionEvent;
| |
| import java.awt.event.ActionListener;
| |
| import java.awt.geom.Rectangle2D;
| |
| | |
| //DISPLAY
| |
| import prefuse.Display;
| |
| import prefuse.controls.ZoomControl;
| |
| import prefuse.controls.PanControl;
| |
| import java.awt.GridLayout;
| |
| import java.awt.Rectangle;
| |
| import java.awt.GraphicsEnvironment;
| |
| import java.awt.BorderLayout;
| |
| import javax.swing.event.ChangeListener;
| |
| import javax.swing.event.ChangeEvent;
| |
| import javax.swing.BorderFactory;
| |
| import javax.swing.BoxLayout;
| |
| import javax.swing.JComboBox;
| |
| import javax.swing.JLabel;
| |
| import javax.swing.JToolBar;
| |
| | |
| //APPLICATION LAUNCHER
| |
| import javax.swing.*;
| |
| | |
| | |
| | |
| | |
| public class TileMap {
| |
|
| |
| //display-constants
| |
| private static final String group = "data";
| |
| private static final String day = "Day";
| |
| private static final String week = "Week";
| |
| private static final String year = "Year";
| |
| private static final String dayLabel = "DayLabel";
| |
| private static final String monthLabel = "MonthLabel";
| |
| private static final String yearLabel = "YearLabel";
| |
|
| |
| //action-constants
| |
| private static final String xAction = "xAction";
| |
| private static final String yAction = "yAction";
| |
| private static final String colorAction = "colorAction";
| |
| private static final String drawAction = "drawAction";
| |
|
| |
| //size(px) of each tile
| |
| private static int tilesize = 10;
| |
| private static Visualization vis;
| |
| private static ActionList draw;
| |
| | |
| //data-source
| |
| private static final String filePath = "http://stud3.tuwien.ac.at/~e9926534/abfluss.csv";
| |
| | |
| | |
| public static void main(String[] args){
| |
| | |
| //-- 1. read the data from a file-----------------------------------------
| |
| //set up data parser(s) - one for Date & Time - one for double value ()
| |
| DateTimeParser dateTimeParser = new DateTimeParser();
| |
| DoubleParser doubleParser = new DoubleParser();
| |
|
| |
| //instantiate DataParser Object & ParserFactory-Object [prefuse]
| |
| DataParser[] dP2 = new DataParser[]{dateTimeParser, doubleParser};
| |
| ParserFactory pF2 = new ParserFactory(dP2);
| |
|
| |
| //set data-delimiter
| |
| DelimitedTextTableReader reader = new DelimitedTextTableReader("[;]", pF2);
| |
| | |
| Table table = new Table();
| |
| | |
| try{
| |
| table = reader.readTable(filePath);
| |
| System.out.println("InfoVisMain.main(): reading file: " + filePath);
| |
| }
| |
| catch(DataIOException ex){
| |
| System.out.println("InfoVisMain.main(): error reading file: " + ex.getMessage());
| |
| }
| |
| | |
| //add additional columns to the table
| |
| table.addColumn(day, int.class);
| |
| table.addColumn(week, int.class);
| |
| table.addColumn(year, int.class);
| |
| table.addColumn(dayLabel, String.class);
| |
| table.addColumn(monthLabel, String.class);
| |
| table.addColumn(yearLabel, String.class);
| |
| | |
| SimpleDateFormat sdfDay = new SimpleDateFormat("EEE");
| |
| SimpleDateFormat sdfMonth = new SimpleDateFormat("MMM");
| |
| SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
| |
|
| |
| //@param yearVector: a vector that stores the single years for later creating a display for each single year
| |
| Vector<Integer> yearVector = new Vector<Integer>();
| |
| int yearTracker = Integer.MIN_VALUE;
| |
|
| |
| //walk through data-table
| |
| for (int i=0; i<table.getRowCount(); i++){
| |
| if(table.canGetDate(table.getColumnName(0))){
| |
| Date tmpDate = table.getDate(i, 0);
| |
| Calendar myCalendar = Calendar.getInstance();
| |
| myCalendar.setTime(tmpDate);
| |
|
| |
| table.setInt(i, day, myCalendar.get(Calendar.DAY_OF_WEEK));
| |
|
| |
| //introduce an extra week "0" for the case of the beginning of a year where days belong
| |
| //to the old-year's week
| |
| int tmpWeek = myCalendar.get(Calendar.WEEK_OF_YEAR);
| |
| int tmpMonth = myCalendar.get(Calendar.MONTH);
| |
| if(tmpMonth==0 & tmpWeek==53 ||tmpMonth==0 & tmpWeek==52){
| |
| table.setInt(i, week, 0); //if (month==JAN AND week==53 -> week=0)
| |
| }
| |
| else{
| |
| table.setInt(i, week, tmpWeek);
| |
| }
| |
|
| |
| //get the year and also write the years to the yearVector
| |
| int tmpYear = myCalendar.get(Calendar.YEAR);
| |
| if(yearTracker != tmpYear){
| |
| yearTracker = tmpYear;
| |
| yearVector.add(new Integer(yearTracker));
| |
| }
| |
| table.setInt(i, year, tmpYear);
| |
|
| |
| //get the days, months... as Strings for the Labels
| |
| table.setString(i, dayLabel, sdfDay.format(tmpDate));
| |
| table.setString(i, monthLabel, sdfMonth.format(tmpDate));
| |
| table.setString(i, yearLabel, sdfYear.format(tmpDate));
| |
| }
| |
| }
| |
|
| |
| //output table data on system console [or not]
| |
| Boolean doTableOutput = true;
| |
| if(doTableOutput){
| |
| //OUTPUT: table properties
| |
| System.out.println("Table_properties: " + table.toString());
| |
| //OUTPUT: table names
| |
| for (int j=0; j<table.getColumnCount(); j++){
| |
| System.out.print(table.getColumnName(j).toString() + "\t");
| |
| if(j==0)System.out.print("\t");//this is only for nicer output because that string is so long ;)
| |
| }
| |
| //OUTPUT: table values
| |
| System.out.print("\n");
| |
| for(int i=0; i<table.getRowCount(); i++){
| |
| for (int j=0; j<table.getColumnCount(); j++){
| |
| System.out.print(table.get(i, j).toString() + "\t");
| |
| if(j==5 || j==6)System.out.print("\t"); //this is only for nicer output too
| |
| }
| |
| System.out.print("\n");
| |
| }
| |
| }
| |
| | |
| | |
| //-- 2. create a Visualisation instance ------------------------------------
| |
| vis = new Visualization();
| |
| vis.add(group, table);
| |
| | |
| //-- 3. the renderers and renderer factory ---------------------------
| |
| vis.setRendererFactory(new RendererFactory() {
| |
| //renderer for drawing simple shapes - in this case
| |
| ShapeRenderer shapeR = new ShapeRenderer(tilesize);
| |
|
| |
| Renderer yaxisR = new AxisRenderer(Constants.CENTER, Constants.CENTER);
| |
|
| |
| Renderer xaxisR = new AxisRenderer(Constants.CENTER, Constants.CENTER);
| |
| | |
| public Renderer getRenderer(VisualItem item) {
| |
| return item.isInGroup(TileMap.dayLabel) ? yaxisR :
| |
| item.isInGroup(TileMap.monthLabel) ? xaxisR : shapeR;
| |
| }
| |
| });
| |
| | |
| | |
| // -- 4. the processing actions --------------------------------------
| |
|
| |
| //the boundingBoxes for the labels and display
| |
| int topLeftX = 0;
| |
| int topLeftY = 0;
| |
| int labelHeight = 30;
| |
| int labelWidth = 0;
| |
| Rectangle2D yearLabelB = new Rectangle2D.Double(topLeftX, topLeftY, labelWidth, labelHeight);
| |
| Rectangle2D dayLabelB = new Rectangle2D.Double(topLeftX, topLeftY+labelHeight, labelWidth, tilesize*7);
| |
| Rectangle2D monthLabelB = new Rectangle2D.Double(topLeftX+labelWidth, topLeftY, tilesize*53, labelHeight);
| |
| Rectangle2D tileMapB = new Rectangle2D.Double(topLeftX+labelWidth, topLeftY+labelHeight, tilesize*53, tilesize*7);
| |
|
| |
| //set up which values over which axis to be displayed
| |
| AxisLayout x_axis = new AxisLayout(group, week, Constants.X_AXIS);
| |
| x_axis.setLayoutBounds(tileMapB);
| |
| vis.putAction(xAction, x_axis);
| |
| | |
| AxisLayout y_axis = new AxisLayout(group, day, Constants.Y_AXIS);
| |
| y_axis.setLayoutBounds(tileMapB);
| |
| vis.putAction(yAction, y_axis);
| |
|
| |
|
| |
| DataColorAction dataColor = new DataColorAction(group, "Abfluss", Constants.NUMERICAL,
| |
| VisualItem.FILLCOLOR);
| |
| dataColor.setBinCount(4);
| |
| vis.putAction(colorAction, dataColor);
| |
|
| |
| //crate an actionList and add all actions to it. finally add the actionList to the Visualization
| |
| draw = new ActionList();
| |
| draw.add(x_axis);
| |
| draw.add(y_axis);
| |
| draw.add(dataColor);
| |
| // draw.add(dayLabels);
| |
| // draw.add(monthLabels);
| |
| draw.add(new RepaintAction());
| |
| vis.putAction(drawAction, draw);
| |
| | |
| // -- 5. the display and interactive controls -------------------------
| |
| // +
| |
| // -- 6. launch the visualization -------------------------------------
| |
| | |
| // create a new window to hold the visualization
| |
| JFrame frame = new JFrame("T I L E M A P");
| |
| // ensure application exits when window is closed
| |
| frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
| |
|
| |
| JPanel pane = new JPanel(new GridLayout(yearVector.size(), 1));
| |
|
| |
| int borderSize = 0;
| |
| int displayHeight = (int)tileMapB.getHeight()+(int)monthLabelB.getHeight();
| |
| int displayWidth = (int)tileMapB.getWidth()+(int)dayLabelB.getWidth();
| |
|
| |
| ZoomControl zoomControl = new ZoomControl();
| |
|
| |
| for(int i=0; i<yearVector.size(); i++){
| |
| Predicate thatYear = (Predicate)ExpressionParser.parse(year + "==" + yearVector.get(i).toString());
| |
| Display d = new Display(vis);
| |
| d.setPredicate(thatYear);
| |
| d.setBorder(BorderFactory.createEmptyBorder(borderSize, borderSize, borderSize, borderSize));
| |
| d.setSize(displayWidth+borderSize, displayHeight+borderSize);
| |
| | |
| d.panAbs(0, -7); //this is for fine-tuning of the layout
| |
| ToolTipControl ttc = new ToolTipControl(new String[] {"Datum", "Abfluss"});
| |
| d.addControlListener(ttc);
| |
| d.addControlListener(zoomControl);
| |
| d.addControlListener(new PanControl());
| |
|
| |
| JPanel innerPane = new JPanel(new BorderLayout());
| |
| JLabel label = new JLabel(yearVector.get(i).toString());
| |
| label.setHorizontalAlignment(SwingConstants.RIGHT);
| |
| label.setVerticalAlignment(SwingConstants.TOP);
| |
| label.setBackground(Color.RED);
| |
| label.setSize(20, 20);
| |
| innerPane.add(label, BorderLayout.WEST);
| |
| innerPane.add(d, BorderLayout.CENTER);
| |
| innerPane.setBackground(Color.WHITE);
| |
|
| |
| pane.add(innerPane);
| |
| // pane.add(d);
| |
| }
| |
|
| |
| JScrollPane scroller = new JScrollPane(pane);
| |
| JToolBar toolBar = makeToolbar();
| |
| frame.getContentPane().add(toolBar, BorderLayout.NORTH);
| |
| frame.getContentPane().add(scroller, BorderLayout.CENTER);
| |
|
| |
| // get local graphics environment
| |
| GraphicsEnvironment graphicsEnvironment=GraphicsEnvironment.getLocalGraphicsEnvironment();
| |
| // get maximum window bounds
| |
| Rectangle maximumWindowBounds=graphicsEnvironment.getMaximumWindowBounds();
| |
|
| |
| frame.setSize(maximumWindowBounds.width/2, maximumWindowBounds.height);
| |
| | |
| frame.setVisible(true); // show the window
| |
| vis.run(drawAction);
| |
| }
| |
|
| |
|
| |
|
| |
| private static JToolBar makeToolbar()
| |
| {
| |
| JToolBar toolbar = new JToolBar();
| |
| toolbar.setLayout(new BoxLayout(toolbar, BoxLayout.X_AXIS));
| |
|
| |
| //add a combobox for switching scales
| |
| final String[] scaleNames = {"LINEAR", "SQRT", "LOG"};
| |
| final JComboBox scaleChooser = new JComboBox(scaleNames);
| |
| // scb.setSelectedItem(sfield);
| |
| scaleChooser.addActionListener(new ActionListener() {
| |
| public void actionPerformed(ActionEvent e) {
| |
| DataColorAction dataColorA = (DataColorAction)vis.getAction(colorAction);
| |
| String chosen = scaleChooser.getSelectedItem().toString();
| |
| if(chosen.equals("LOG")){
| |
| dataColorA.setScale(Constants.LOG_SCALE);
| |
| }
| |
| else if(chosen.equals("SQRT")){
| |
| dataColorA.setScale(Constants.SQRT_SCALE);
| |
| }
| |
| else{
| |
| dataColorA.setScale(Constants.LINEAR_SCALE);
| |
| }
| |
| vis.run(drawAction);
| |
| }
| |
| });
| |
| toolbar.add(new JLabel("SCALE: "));
| |
| toolbar.add(scaleChooser);
| |
|
| |
| //add a slider for setting the binsize
| |
| int slideStart = ((DataColorAction)vis.getAction(colorAction)).getBinCount();
| |
| final JSlider slider = new JSlider(2, 20, slideStart);
| |
| slider.setMajorTickSpacing(4);
| |
| slider.setMinorTickSpacing(1);
| |
| slider.setPaintTicks(true);
| |
| slider.setPaintLabels(true);
| |
| slider.setSnapToTicks(true);
| |
| slider.addChangeListener(new ChangeListener(){
| |
| public void stateChanged(ChangeEvent ce){
| |
| if(!slider.getValueIsAdjusting()){
| |
| int val = slider.getValue();
| |
| DataColorAction dataColorA = (DataColorAction)vis.getAction(colorAction);
| |
| dataColorA.setBinCount(val);
| |
| vis.run(drawAction);
| |
| }
| |
| }
| |
| });
| |
| toolbar.add(new JLabel("BINSIZE: "));
| |
| toolbar.add(slider);
| |
|
| |
| toolbar.setFloatable(false);
| |
| return toolbar;
| |
| }
| |
|
| |
|
| }
| | ==Implementation Details== |
| | Our final prototype parses given input data (provided in .csv files), writes it into table structures and calculates useful information like the adequate week for each entry. Therefor additional columns get appended and are use for our labeling. The visual mapping was realized by dependence of the color of each tile on the given values. Finally we defined basic interaction like zooming and created a simple user interface to control scaling and bucket size of our visualization. Now the result is ready to be printed on screen. |
|
| |
|
| ==example data== | | ==Screenshot== |
| | [[Image:screen.jpg]] |
|
| |
|
| ===example data (InfoVisMain.java)=== | | ==Used Toolkits== |
| Copy that data and store it as ''.csv''. For using it you have to change the path to the file in the sourcecode.
| | * Prefuse Information Visualization Toolkit |
| <pre>
| |
| Datum;Abfluss
| |
| 01.01.1977 11:00;5.721
| |
| 02.01.1977 10:30;5.697
| |
| 03.01.1977 10:00;5.767
| |
| 04.01.1977 17:00;5.861
| |
| 05.01.1977 16:30;5.697
| |
| 06.01.1977 11:30;5.791
| |
| 07.01.1977 18:30;5.697
| |
| 08.01.1977 12:30;5.908
| |
| 09.01.1977 12:00;5.861
| |
| 10.01.1977 12:00;5.861
| |
| 11.01.1977 18:00;5.837
| |
| 12.01.1977 11:30;6.026
| |
| 13.01.1977 19:30;5.955
| |
| 14.01.1977 11:00;5.978
| |
| 15.01.1977 20:30;5.837
| |
| 16.01.1977 12:00;6.895
| |
| 17.01.1977 11:30;6.073
| |
| 18.01.1977 12:30;5.767
| |
| 19.01.1977 19:30;6.263
| |
| 20.01.1977 19:00;5.884
| |
| 21.01.1977 09:00;6.359
| |
| 22.01.1977 11:30;6.699
| |
| 23.01.1977 14:30;5.837
| |
| 24.01.1977 11:30;5.628
| |
| 25.01.1977 19:30;5.791
| |
| 26.01.1977 11:30;5.744
| |
| 27.01.1977 09:30;5.651
| |
| 28.01.1977 19:30;5.651
| |
| 29.01.1977 20:00;6.192
| |
| 30.01.1977 11:30;5.536
| |
| 31.01.1977 20:30;5.767
| |
| 01.02.1977 19:30;5.651
| |
| 02.02.1977 11:30;6.073
| |
| 03.02.1977 10:30;6.002
| |
| 04.02.1977 09:30;6.994
| |
| 05.02.1977 20:00;6.723
| |
| 06.02.1977 11:30;7.168
| |
| 07.02.1977 20:30;6.528
| |
| 08.02.1977 18:00;6.192
| |
| 09.02.1977 11:30;7.776
| |
| 10.02.1977 19:30;7.118
| |
| 11.02.1977 19:30;7.827
| |
| 12.02.1977 09:30;7.47
| |
| 13.02.1977 09:30;7.168
| |
| 14.02.1977 20:00;6.383
| |
| 15.02.1977 20:00;6.12
| |
| 16.02.1977 20:00;6.263
| |
| 17.02.1977 20:00;6.168
| |
| 18.02.1977 20:00;5.861
| |
| 19.02.1977 19:30;5.978
| |
| 20.02.1977 19:30;6.383
| |
| 21.02.1977 19:30;9.524
| |
| 22.02.1977 12:30;7.956
| |
| 23.02.1977 20:00;7.648
| |
| 24.02.1977 23:59;8.257
| |
| 25.02.1977 15:30;10.271
| |
| 26.02.1977 00:00;9.21
| |
| 27.02.1977 05:00;8.241
| |
| 28.02.1977 00:00;6.26
| |
| 01.03.1977 18:00;5.931
| |
| 02.03.1977 19:30;5.791
| |
| 03.03.1977 23:59;8.14
| |
| 04.03.1977 23:59;17.646
| |
| 05.03.1977 00:00;17.646
| |
| 06.03.1977 00:00;11.894
| |
| 07.03.1977 00:00;10.665
| |
| 08.03.1977 21:00;10.327
| |
| 09.03.1977 23:00;10.665
| |
| 10.03.1977 23:59;10.892
| |
| 11.03.1977 18:30;11.121
| |
| 12.03.1977 13:00;10.58
| |
| 13.03.1977 00:00;10.051
| |
| 14.03.1977 00:00;9.343
| |
| 15.03.1977 00:00;8.834
| |
| 16.03.1977 23:59;8.537
| |
| 17.03.1977 23:59;10.103
| |
| 18.03.1977 21:30;12.287
| |
| 19.03.1977 00:00;12.261
| |
| 20.03.1977 00:00;10.515
| |
| 21.03.1977 08:00;10.075
| |
| 22.03.1977 20:30;10.215
| |
| 23.03.1977 23:30;11.875
| |
| 24.03.1977 23:59;13.962
| |
| 25.03.1977 22:00;14.509
| |
| 26.03.1977 22:30;15.615
| |
| 27.03.1977 00:00;15.415
| |
| 28.03.1977 07:00;18.082
| |
| 29.03.1977 00:00;16.046
| |
| 30.03.1977 00:00;13.017
| |
| 31.03.1977 00:00;10.835
| |
| 01.04.1977 19:00;10.355
| |
| 02.04.1977 23:59;12.18
| |
| 03.04.1977 23:59;13.403
| |
| 04.04.1977 00:30;13.46
| |
| 05.04.1977 08:30;12.495
| |
| 06.04.1977 18:00;12.199
| |
| 07.04.1977 19:00;11.525
| |
| 08.04.1977 08:30;11.904
| |
| 09.04.1977 18:00;11.322
| |
| 10.04.1977 17:30;10.355
| |
| 11.04.1977 17:30;10.131
| |
| 12.04.1977 12:00;9.551
| |
| 13.04.1977 19:30;10.636
| |
| 14.04.1977 19:30;11.265
| |
| 15.04.1977 08:30;10.187
| |
| 16.04.1977 19:30;8.795
| |
| 17.04.1977 18:30;10.75
| |
| 18.04.1977 20:30;12.199
| |
| 19.04.1977 20:00;12.764
| |
| 20.04.1977 17:30;11.729
| |
| 21.04.1977 19:00;12.555
| |
| 22.04.1977 19:00;13.095
| |
| 23.04.1977 23:59;16.529
| |
| 24.04.1977 23:59;20.195
| |
| 25.04.1977 00:30;20.203
| |
| 26.04.1977 23:30;23.096
| |
| 27.04.1977 23:00;28.672
| |
| 28.04.1977 23:59;36.956
| |
| 29.04.1977 23:59;56.898
| |
| 30.04.1977 18:00;81.98
| |
| 01.05.1977 19:30;77.065
| |
| 02.05.1977 00:00;70.391
| |
| 03.05.1977 00:00;51.984
| |
| 04.05.1977 18:00;93.83
| |
| 05.05.1977 00:00;86.578
| |
| 06.05.1977 00:00;57.75
| |
| 07.05.1977 00:00;37.338
| |
| 08.05.1977 00:00;29.828
| |
| 09.05.1977 00:00;28.286
| |
| 10.05.1977 00:00;22.335
| |
| 11.05.1977 23:59;23.215
| |
| 12.05.1977 23:00;42.651
| |
| 13.05.1977 00:00;41.681
| |
| 14.05.1977 00:00;37.893
| |
| 15.05.1977 00:00;30.726
| |
| 16.05.1977 23:00;29.321
| |
| 17.05.1977 21:30;32.223
| |
| 18.05.1977 23:59;33.122
| |
| 19.05.1977 23:59;99.935
| |
| 20.05.1977 15:30;137.65
| |
| 21.05.1977 00:00;110.665
| |
| 22.05.1977 00:00;75.919
| |
| 23.05.1977 22:00;59.25
| |
| 24.05.1977 22:30;63.573
| |
| 25.05.1977 21:00;76.096
| |
| 26.05.1977 00:00;73.753
| |
| 27.05.1977 00:00;67.312
| |
| 28.05.1977 00:00;53.171
| |
| 29.05.1977 23:59;52.495
| |
| 30.05.1977 00:30;52.754
| |
| 31.05.1977 02:00;50.759
| |
| 01.06.1977 00:00;38.131
| |
| 02.06.1977 23:59;36.169
| |
| 03.06.1977 00:30;36.316
| |
| 04.06.1977 00:00;30.803
| |
| 05.06.1977 00:00;26.294
| |
| 06.06.1977 23:59;29.861
| |
| 07.06.1977 23:00;51.207
| |
| 08.06.1977 22:00;63.087
| |
| 09.06.1977 23:30;82.823
| |
| 10.06.1977 22:00;109.493
| |
| 11.06.1977 00:00;104.427
| |
| 12.06.1977 00:00;90.078
| |
| 13.06.1977 22:00;103.169
| |
| 14.06.1977 23:59;120.391
| |
| 15.06.1977 02:00;125.505
| |
| 16.06.1977 10:00;85.915
| |
| 17.06.1977 00:00;58.973
| |
| 18.06.1977 23:59;74.687
| |
| 19.06.1977 23:59;86.142
| |
| 20.06.1977 01:30;86.383
| |
| 21.06.1977 23:59;73.066
| |
| 22.06.1977 01:00;73.583
| |
| 23.06.1977 00:00;62.195
| |
| 24.06.1977 20:00;54.91
| |
| 25.06.1977 19:30;75.354
| |
| 26.06.1977 23:59;94.717
| |
| 27.06.1977 01:30;94.959
| |
| 28.06.1977 00:00;64.193
| |
| 29.06.1977 00:00;51.4
| |
| 30.06.1977 11:30;62.741
| |
| 01.07.1977 00:00;49.039
| |
| 02.07.1977 23:59;48.14
| |
| 03.07.1977 23:59;65.391
| |
| 04.07.1977 23:59;72.606
| |
| 05.07.1977 01:00;72.777
| |
| 06.07.1977 01:30;62.05
| |
| 07.07.1977 03:00;55.174
| |
| 08.07.1977 23:59;54.91
| |
| 09.07.1977 02:30;55.042
| |
| 10.07.1977 15:00;65.953
| |
| 11.07.1977 02:00;61.844
| |
| 12.07.1977 01:00;55.57
| |
| 13.07.1977 23:59;100.575
| |
| 14.07.1977 01:00;115.434
| |
| 15.07.1977 11:00;93.509
| |
| 16.07.1977 23:59;70.042
| |
| 17.07.1977 06:30;101.755
| |
| 18.07.1977 00:00;65.251
| |
| 19.07.1977 00:30;60.133
| |
| 20.07.1977 23:59;73.238
| |
| 21.07.1977 07:00;207.793
| |
| 22.07.1977 00:00;76.599
| |
| 23.07.1977 00:00;44.949
| |
| 24.07.1977 22:00;47.228
| |
| 25.07.1977 23:59;66.47
| |
| 26.07.1977 04:30;85.993
| |
| 27.07.1977 00:00;56.811
| |
| 28.07.1977 00:00;40.869
| |
| 29.07.1977 20:00;34.316
| |
| 30.07.1977 23:59;40.194
| |
| 31.07.1977 23:30;253.056
| |
| 01.08.1977 05:30;271.508
| |
| 02.08.1977 00:00;119.963
| |
| 03.08.1977 00:00;54.623
| |
| 04.08.1977 00:00;39.101
| |
| 05.08.1977 20:30;82.898
| |
| 06.08.1977 00:00;71.46
| |
| 07.08.1977 06:00;68.654
| |
| 08.08.1977 00:00;53.663
| |
| 09.08.1977 00:00;49.738
| |
| 10.08.1977 11:00;59.712
| |
| 11.08.1977 00:00;46.09
| |
| 12.08.1977 00:00;33.279
| |
| 13.08.1977 23:59;38.364
| |
| 14.08.1977 07:00;54.828
| |
| 15.08.1977 00:00;34.25
| |
| 16.08.1977 00:00;27.856
| |
| 17.08.1977 23:59;35.97
| |
| 18.08.1977 23:59;39.485
| |
| 19.08.1977 10:30;45.281
| |
| 20.08.1977 00:00;42.13
| |
| 21.08.1977 23:59;41.287
| |
| 22.08.1977 07:00;64.402
| |
| 23.08.1977 00:00;43.641
| |
| 24.08.1977 00:00;32.957
| |
| 25.08.1977 00:00;27.529
| |
| 26.08.1977 07:30;26.534
| |
| 27.08.1977 00:00;25.876
| |
| 28.08.1977 23:59;30.351
| |
| 29.08.1977 23:59;42.718
| |
| 30.08.1977 18:30;47.544
| |
| 31.08.1977 00:00;47.182
| |
| 01.09.1977 00:00;40.953
| |
| 02.09.1977 00:00;31.879
| |
| 03.09.1977 00:00;31.226
| |
| 04.09.1977 23:00;47.976
| |
| 05.09.1977 00:00;46.886
| |
| 06.09.1977 00:00;30.996
| |
| 07.09.1977 00:00;21.428
| |
| 08.09.1977 23:59;25.908
| |
| 09.09.1977 10:00;104.255
| |
| 10.09.1977 00:00;44.71
| |
| 11.09.1977 00:00;26.393
| |
| 12.09.1977 07:00;25.501
| |
| 13.09.1977 22:00;24.5
| |
| 14.09.1977 00:00;24.053
| |
| 15.09.1977 23:59;21.439
| |
| 16.09.1977 00:00;21.439
| |
| 17.09.1977 00:00;17.751
| |
| 18.09.1977 20:30;16.759
| |
| 19.09.1977 00:00;16.545
| |
| 20.09.1977 00:00;16.018
| |
| 21.09.1977 00:00;14.903
| |
| 22.09.1977 00:00;14.601
| |
| 23.09.1977 00:00;14.145
| |
| 24.09.1977 22:30;14.043
| |
| 25.09.1977 00:00;14.014
| |
| 26.09.1977 00:00;13.582
| |
| 27.09.1977 00:00;12.734
| |
| 28.09.1977 00:00;12.527
| |
| 29.09.1977 00:00;11.77
| |
| 30.09.1977 21:00;11.496
| |
| 01.10.1977 23:59;11.468
| |
| 02.10.1977 23:59;12.19
| |
| 03.10.1977 08:00;12.376
| |
| 04.10.1977 00:00;12.092
| |
| 05.10.1977 00:00;11.196
| |
| 06.10.1977 23:59;10.693
| |
| 07.10.1977 23:59;10.782
| |
| 08.10.1977 23:59;13.122
| |
| 09.10.1977 04:00;13.796
| |
| 10.10.1977 23:59;13.217
| |
| 11.10.1977 02:30;14.509
| |
| 12.10.1977 00:00;12.641
| |
| 13.10.1977 00:00;12.146
| |
| 14.10.1977 23:59;11.612
| |
| 15.10.1977 00:00;11.612
| |
| 16.10.1977 00:00;10.018
| |
| 17.10.1977 07:30;9.798
| |
| 18.10.1977 00:00;9.615
| |
| 19.10.1977 15:00;9.333
| |
| 20.10.1977 00:00;9.067
| |
| 21.10.1977 00:00;8.838
| |
| 22.10.1977 00:00;8.531
| |
| 23.10.1977 23:59;8.48
| |
| 24.10.1977 23:59;8.937
| |
| 25.10.1977 19:30;9.333
| |
| 26.10.1977 00:00;9.238
| |
| 27.10.1977 00:00;8.792
| |
| 28.10.1977 09:00;9.524
| |
| 29.10.1977 00:00;9.22
| |
| 30.10.1977 00:00;8.862
| |
| 31.10.1977 23:59;8.933
| |
| 01.11.1977 06:30;9.198
| |
| 02.11.1977 23:59;10.241
| |
| 03.11.1977 05:30;11.758
| |
| 04.11.1977 00:00;10.872
| |
| 05.11.1977 00:00;8.886
| |
| 06.11.1977 00:00;8.583
| |
| 07.11.1977 00:00;8.075
| |
| 08.11.1977 00:00;7.574
| |
| 09.11.1977 21:00;6.945
| |
| 10.11.1977 00:00;6.851
| |
| 11.11.1977 00:00;6.527
| |
| 12.11.1977 00:00;6.356
| |
| 13.11.1977 18:00;7.044
| |
| 14.11.1977 00:00;6.651
| |
| 15.11.1977 10:30;6.48
| |
| 16.11.1977 00:00;6.401
| |
| 17.11.1977 00:00;6.311
| |
| 18.11.1977 18:00;6.12
| |
| 19.11.1977 00:00;6.026
| |
| 20.11.1977 00:00;4.894
| |
| 21.11.1977 23:59;4.754
| |
| 22.11.1977 23:30;4.992
| |
| 23.11.1977 00:00;4.989
| |
| 24.11.1977 23:59;5.015
| |
| 25.11.1977 23:59;5.767
| |
| 26.11.1977 16:30;5.861
| |
| 27.11.1977 00:00;5.843
| |
| 28.11.1977 23:59;6.008
| |
| 29.11.1977 01:00;6.026
| |
| 30.11.1977 08:30;5.978
| |
| 01.12.1977 08:30;5.978
| |
| 02.12.1977 17:00;5.837
| |
| 03.12.1977 00:00;5.397
| |
| 04.12.1977 07:00;5.284
| |
| 05.12.1977 23:59;5.444
| |
| 06.12.1977 16:00;5.536
| |
| 07.12.1977 00:00;4.849
| |
| 08.12.1977 00:00;4.812
| |
| 09.12.1977 20:30;5.744
| |
| 10.12.1977 00:00;5.661
| |
| 11.12.1977 00:00;5.318
| |
| 12.12.1977 23:59;5.408
| |
| 13.12.1977 11:00;6.504
| |
| 14.12.1977 00:00;6.119
| |
| 15.12.1977 20:00;5.861
| |
| 16.12.1977 11:30;5.582
| |
| 17.12.1977 16:00;5.559
| |
| 18.12.1977 00:00;5.434
| |
| 19.12.1977 13:30;5.536
| |
| 20.12.1977 15:00;5.353
| |
| 21.12.1977 13:00;5.721
| |
| 22.12.1977 15:30;5.791
| |
| 23.12.1977 00:00;5.692
| |
| 24.12.1977 00:00;5.308
| |
| 25.12.1977 23:59;5.914
| |
| 26.12.1977 18:30;6.026
| |
| 27.12.1977 00:00;5.696
| |
| 28.12.1977 18:00;5.744
| |
| 29.12.1977 00:00;5.537
| |
| 30.12.1977 18:00;5.536
| |
| 31.12.1977 00:00;4.925
| |
| 01.01.1978 00:00;4.76
| |
| 02.01.1978 23:59;4.545
| |
| 03.01.1978 01:30;4.596
| |
| 04.01.1978 18:30;4.381
| |
| 05.01.1978 18:00;4.232
| |
| 06.01.1978 00:00;3.96
| |
| 07.01.1978 23:59;3.96
| |
| 08.01.1978 23:59;3.96
| |
| 09.01.1978 23:59;3.96
| |
| 10.01.1978 23:59;3.96
| |
| 11.01.1978 23:59;3.96
| |
| 12.01.1978 23:59;3.96
| |
| 13.01.1978 23:59;3.96
| |
| 14.01.1978 15:30;4.106
| |
| 15.01.1978 00:00;3.878
| |
| 16.01.1978 11:30;4.127
| |
| 17.01.1978 00:00;4.043
| |
| 18.01.1978 00:00;3.585
| |
| 19.01.1978 23:59;3.545
| |
| 20.01.1978 06:30;3.553
| |
| 21.01.1978 00:00;3.176
| |
| </pre>
| |
|
| |
|
| ==Links== | | ==Links== |
| * [[Teaching:TUW_-_UE_InfoVis_WS_2006/07_-_Gruppe_02|Gruppe 2]] | | * [[Teaching:TUW_-_UE_InfoVis_WS_2006/07_-_Gruppe_02|Gruppe 2]] |
| | * [[Teaching:TUW_-_UE_InfoVis_WS_2006/07_-_Gruppe_02_-_Aufgabe_3_-_Technique|Technique]] |