100% found this document useful (1 vote)
20 views

Data Visualization with JavaScript 1st Edition Stephen A. Thomas - Download the complete ebook in PDF format and read freely

The document provides information about the book 'Data Visualization with JavaScript' by Stephen A. Thomas, including download links for the ebook and other related titles. It outlines the book's content, which covers various aspects of data visualization using JavaScript, including creating charts, integrating them into web pages, and building data-driven applications. Additionally, it includes details about the author and technical reviewer, as well as the book's publication information.

Uploaded by

jellenrihard
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
20 views

Data Visualization with JavaScript 1st Edition Stephen A. Thomas - Download the complete ebook in PDF format and read freely

The document provides information about the book 'Data Visualization with JavaScript' by Stephen A. Thomas, including download links for the ebook and other related titles. It outlines the book's content, which covers various aspects of data visualization using JavaScript, including creating charts, integrating them into web pages, and building data-driven applications. Additionally, it includes details about the author and technical reviewer, as well as the book's publication information.

Uploaded by

jellenrihard
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 48

Visit ebookfinal.

com to download the full version and


explore more ebooks or textbooks

Data Visualization with JavaScript 1st Edition


Stephen A. Thomas

_____ Click the link below to download _____


https://ebookfinal.com/download/data-visualization-with-
javascript-1st-edition-stephen-a-thomas/

Explore and download more ebooks or textbook at ebookfinal.com


Here are some recommended products that we believe you will be
interested in. You can click the link to download.

Learning IPython for Interactive Computing and Data


Visualization 1st Edition Rossant

https://ebookfinal.com/download/learning-ipython-for-interactive-
computing-and-data-visualization-1st-edition-rossant/

Learning Predictive Analytics with R Get to grips with key


data visualization and predictive analytic skills using R
1st Edition Eric Mayor
https://ebookfinal.com/download/learning-predictive-analytics-with-r-
get-to-grips-with-key-data-visualization-and-predictive-analytic-
skills-using-r-1st-edition-eric-mayor/

Cartography Visualization of Geospatial Data Third Edition


Menno-Jan Kraak

https://ebookfinal.com/download/cartography-visualization-of-
geospatial-data-third-edition-menno-jan-kraak/

The Visual Organization Data Visualization Big Data and


the Quest for Better Decisions 1st Edition Phil Simon

https://ebookfinal.com/download/the-visual-organization-data-
visualization-big-data-and-the-quest-for-better-decisions-1st-edition-
phil-simon/
A Year with Thomas Merton Thomas Merton

https://ebookfinal.com/download/a-year-with-thomas-merton-thomas-
merton/

Data Visualization Part 1 New Directions for Evaluation


Number 139 1st Edition Evergreen

https://ebookfinal.com/download/data-visualization-part-1-new-
directions-for-evaluation-number-139-1st-edition-evergreen/

Minimally Invasive Periodontal Therapy Clinical Techniques


and Visualization Technology 1st Edition Stephen K. Harrel

https://ebookfinal.com/download/minimally-invasive-periodontal-
therapy-clinical-techniques-and-visualization-technology-1st-edition-
stephen-k-harrel/

HTML5 programming with JavaScript for dummies Mueller

https://ebookfinal.com/download/html5-programming-with-javascript-for-
dummies-mueller/

College Algebra with Modeling and Visualization 4th


Edition Gary K. Rockswold

https://ebookfinal.com/download/college-algebra-with-modeling-and-
visualization-4th-edition-gary-k-rockswold/
Data Visualization with JavaScript 1st Edition Stephen A.
Thomas Digital Instant Download
Author(s): Stephen A. Thomas
ISBN(s): 9781593276058, 1593276052
Edition: 1
File Details: PDF, 14.22 MB
Year: 2015
Language: english
DATA
VISUALIZATION
• WITH JAVASCRIPT

STEPHEN A. THOMAS


Data Visualization
with JavaScript
Data Visualization
with JavaScript
Stephen A . thomA S
DATA VISUALIZATION WITH JAVASCRIPT. Copyright © 2015 by Stephen A. Thomas.

All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical,
including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the
copyright owner and the publisher.

Printed in USA
First printing

19 18 17 16 15 123456789

ISBN-10: 1-59327-605-2
ISBN-13: 978-1-59327-605-8

Publisher: William Pollock


Production Editor: Laurel Chun
Cover Illustration: Beth Middleworth
Developmental Editor: Seph Kramer
Technical Reviewer: Christopher Keen
Copyeditor: Rachel Monaghan
Compositor: Lynn L’Heureux
Proofreader: Emelie Burnette
Indexer: BIM Indexing & Proofreading Services

The visualization on the cover is inspired by the work of Mike Bostock.


It is described in “Creating a Unique Visualization” on page 252.

For information on distribution, translations, or bulk sales, please contact No Starch Press, Inc. directly:

No Starch Press, Inc.


245 8th Street, San Francisco, CA 94103
phone: 415.863.9900; [email protected]
www.nostarch.com

The Library of Congress Cataloging-in-Publication Data

Thomas, Stephen A., 1962-


Data visualization with JavaScript / by Stephen A. Thomas.
pages cm
ISBN 978-1-59327-605-8 -- ISBN 1-59327-605-2
1. Information visualization--Data processing. 2. JavaScript (Computer program language) I. Title.
QA76.9.I52T46 2015
005.2'762--dc23
2014039759

No Starch Press and the No Starch Press logo are registered trademarks of No Starch Press, Inc. Other product and company names
mentioned herein may be the trademarks of their respective owners. Rather than use a trademark symbol with every occurrence of a
trademarked name, we are using the names only in an editorial fashion and to the beneit of the trademark owner, with no intention
of infringement of the trademark.

The information in this book is distributed on an “As Is” basis, without warranty. While every precaution has been taken in the
preparation of this work, neither the author nor No Starch Press, Inc. shall have any liability to any person or entity with respect to
any loss or damage caused or alleged to be caused directly or indirectly by the information contained in it.
About the Author
Stephen A. Thomas specializes in frontend development at Georgia Tech’s Depart-
ment of Education Technology and has developed complex JavaScript visualiza-
tions for the health-care and security industries. He writes and speaks about data
visualization in publications and at conferences around the world.

About the Technical Reviewer


Chris Keen resides in Atlanta, Georgia, and has been writing JavaScript since
2004. Chris has had the honor of working on visualizations ranging from an
SVG tweet map at Weather.com to full-blown interactive maps with Leaflet.js at
Endgame Systems. Chris is currently infatuated with making data dashboards
using Backbone, Epoxy, and D3. Chris recently founded Keen Concepts (http://
keenconcepts.io/), and he consults on JavaScript-rich web applications.
Brief Contents
Acknowledgments ..........................................................................................................xvi
Introduction ....................................................................................................................... 1
Chapter 1: Graphing Data ................................................................................................ 5
Chapter 2: Making Charts Interactive ........................................................................... 47
Chapter 3: Integrating Charts on a Page...................................................................... 89
Chapter 4: Creating Specialized Graphs .....................................................................119
Chapter 5: Displaying Timelines ...................................................................................147
Chapter 6: Visualizing Geographic Data .....................................................................179
Chapter 7: Custom Visualizations with D3.js .............................................................. 223
Chapter 8: Managing Data in the Browser ................................................................. 269
Chapter 9: Building Data-Driven Web Applications: Part 1 .................................... 295
Chapter 10: Building Data-Driven Web Applications: Part 2 .................................. 327
Index ............................................................................................................................... 353
Contents in Detail
Acknowledgments ....................................................................................................xvi

Introduction ................................................................................................................... 1
The Book’s Philosophy ..................................................................................................... 2
The Book’s Contents ........................................................................................................ 3
Source Code for Examples .............................................................................................. 4

Chapter 1: Graphing Data ........................................................................................ 5


Creating a Basic Bar Chart ............................................................................................... 6
Step 1: Include the Required JavaScript............................................................... 6
Step 2: Set Aside a <div> Element to Hold the Chart ........................................ 7
Step 3: Deine the Data .......................................................................................... 7
Step 4: Draw the Chart ........................................................................................... 8
Step 5: Fix the Vertical Axis ................................................................................... 9
Step 6: Fix the Horizontal Axis ............................................................................ 10
Step 7: Adjust the Styling ......................................................................................12
Step 8: Vary the Bar Color .....................................................................................13
Step 9: Work Around Flotr2 “Bugs” .................................................................... 14
Plotting Continuous Data with a Line Chart ................................................................ 15
Step 1: Deine the Data ........................................................................................ 15
Step 2: Graph the CO2 Data ................................................................................ 16
Step 3: Add the Temperature Data ......................................................................17
Step 4: Improve the Chart’s Readability ..............................................................17
Step 5: Clarify the Temperature Measurements ............................................... 18
Step 6: Label the Chart ........................................................................................ 20
Step 7: Work Around Flotr2 “Bugs” .................................................................... 21
Emphasizing Fractions Using a Pie Chart ..................................................................... 21
Step 1: Deine the Data ........................................................................................ 23
Step 2: Draw the Chart ......................................................................................... 23
Step 3: Label the Values ....................................................................................... 24
Step 4: Work Around Flotr2 “Bugs” .................................................................... 25
Plotting X/Y Data with a Scatter Chart ......................................................................... 25
Step 1: Deine the Data ........................................................................................ 26
Step 2: Format the Data ....................................................................................... 26
Step 3: Plot the Data ............................................................................................. 26
Step 4: Adjust the Chart’s Axes........................................................................... 27
Step 5: Label the Data .......................................................................................... 28
Step 6: Clarify the X-Axis...................................................................................... 29
Step 7: Answer Users’ Questions ........................................................................ 30
Step 8: Work Around Flotr2 “Bugs” .................................................................... 33
Adding Magnitudes to X/Y Data with a Bubble Chart ............................................... 34
Step 1: Deine the Data ........................................................................................ 34
Step 2: Create a Background for the Chart........................................................ 35
Step 3: Plot the Data ............................................................................................. 36
Step 4: Add the Background ............................................................................... 37
Step 5: Color the Bubbles .................................................................................... 38
Step 6: Adjust the Legend Styles ........................................................................ 40
Step 7: Work Around Flotr2 “Bugs” .................................................................... 41
Displaying Multidimensional Data with a Radar Chart ............................................... 41
Step 1: Deine the Data ........................................................................................ 42
Step 2: Create the Chart ...................................................................................... 44
Step 3: Work Around Flotr2 “Bugs” .................................................................... 45
Summing Up .................................................................................................................... 46

Chapter 2: Making Charts Interactive .............................................................. 47


Selecting Chart Content ................................................................................................ 48
Step 1: Include the Required JavaScript Libraries............................................. 49
Step 2: Set Aside a <div> Element to Hold the Chart ...................................... 50
Step 3: Prepare the Data ...................................................................................... 50
Step 4: Draw the Chart ......................................................................................... 51
Step 5: Add the Controls ..................................................................................... 52
Step 6: Deine the Data Structure for the Interaction ....................................... 54
Step 7: Determine Chart Data Based on the Interaction State........................ 55
Step 8: Add the Controls Using JavaScript ........................................................ 57
Step 9: Respond to the Interaction Controls ..................................................... 58
Zooming In on Charts ..................................................................................................... 59
Step 1: Prepare the Page...................................................................................... 60
Step 2: Draw the Chart ......................................................................................... 60
Step 3: Prepare the Data to Support Interaction ...............................................61
Step 4: Prepare to Accept Interaction Events.................................................... 62
Step 5: Enable the Interaction ............................................................................. 63
Tracking Data Values ...................................................................................................... 65
Step 1: Set Aside a <div> Element to Hold the Charts .................................... 66
Step 2: Prepare the Data ...................................................................................... 67
Step 3: Draw the Charts ....................................................................................... 68
Step 4: Implement the Interaction ...................................................................... 71
Retrieving Data Using AJAX .......................................................................................... 75
Step 1: Understand the Source Data ...................................................................76
Step 2: Get the First Level of Data via AJAX ..................................................... 77
Step 3: Process the First Level of Data ............................................................... 80
Step 4: Get the Real Data ..................................................................................... 81
Step 5: Process the Data ...................................................................................... 84
Step 6: Create the Chart ...................................................................................... 85
Summing Up .................................................................................................................... 88

Chapter 3: Integrating Charts on a Page ........................................................ 89


Creating a Classic Sparkline .......................................................................................... 91
Step 1: Include the Required JavaScript Libraries............................................. 91
Step 2: Create the HTML Markup for the Sparkline .......................................... 91
Step 3: Draw the Sparkline................................................................................... 92
Step 4: Adjust the Chart Style ............................................................................. 93

x | Contents in Detail
Charting Many Variables ................................................................................................ 94
Step 1: Prepare the HTML Markup...................................................................... 94
Step 2: Draw the Charts ....................................................................................... 95
Step 3: Establish a Default Style for the Charts................................................. 96
Step 4: Modify the Default Style for Special Classes ........................................ 97
Step 5: Create a Unique Style for a Speciic Chart ............................................ 99
Annotating Sparklines .................................................................................................. 101
Step 1: Prepare the Data .................................................................................... 102
Step 2: Prepare the HTML Markup ................................................................... 102
Step 3: Add the Chart......................................................................................... 102
Step 4: Add the Primary Annotation ................................................................. 103
Step 5: Provide Additional Information ............................................................ 105
Drawing Composite Charts ......................................................................................... 105
Step 1: Draw the Trading Volume Chart ........................................................... 106
Step 2: Add the Closing Price Chart ................................................................. 106
Step 3: Add the Annotations ............................................................................. 107
Step 4: Show Details as a Chart......................................................................... 108
Responding to Click Events ..........................................................................................110
Step 1: Add the Chart ..........................................................................................110
Step 2: Handle Click Events ................................................................................ 111
Step 3: Improve the Transitions ..........................................................................112
Step 4: Animate ....................................................................................................114
Updating Charts in Real Time.......................................................................................115
Step 1: Retrieve the Data.....................................................................................116
Step 2: Update the Visualization ........................................................................116
Summing Up ...................................................................................................................117

Chapter 4: Creating Specialized Graphs.........................................................119


Visualizing Hierarchies with Tree Maps....................................................................... 120
Step 1: Include the Required Libraries ............................................................. 120
Step 2: Prepare the Data .....................................................................................121
Step 3: Draw the Tree Map .................................................................................121
Step 4: Vary the Shading to Show Additional Data ......................................... 122
Highlighting Regions with a Heat Map ....................................................................... 125
Step 1: Include the Required JavaScript........................................................... 126
Step 2: Deine the Visualization Data................................................................ 127
Step 3: Create the Background Image ............................................................. 127
Step 4: Set Aside an HTML Element to Contain the Visualization ................ 128
Step 5: Format the Data ..................................................................................... 128
Step 6: Draw the Map ......................................................................................... 129
Step 7: Adjust the Heat Map z-index ................................................................ 130
Showing Relationships with Network Graphs ............................................................ 130
Step 1: Include the Required Libraries ............................................................. 130
Step 2: Prepare the Data .....................................................................................131
Step 3: Deine the Graph’s Nodes .................................................................... 132

Contents in Detail | xi
Step 4: Connect the Nodes with Edges ........................................................... 133
Step 5: Automate the Layout ............................................................................. 134
Step 6: Add Interactivity......................................................................................137
Revealing Language Patterns with Word Clouds ...................................................... 138
Step 1: Include the Required Libraries ............................................................. 139
Step 2: Prepare the Data .................................................................................... 140
Step 3: Add the Required Markup .....................................................................141
Step 4: Create a Simple Cloud ...........................................................................142
Step 5: Add Interactivity..................................................................................... 143
Summing Up .................................................................................................................. 146

Chapter 5: Displaying Timelines .........................................................................147


Building Timelines with a Library ................................................................................ 148
Step 1: Include the Required Libraries ............................................................. 148
Step 2: Prepare the Data .....................................................................................149
Step 3: Draw the Timeline .................................................................................. 150
Step 4: Set Chronoline.js Options for the Data ............................................... 150
Building Timelines with JavaScript.............................................................................. 153
Step 1: Prepare the HTML Skeleton .................................................................. 154
Step 2: Start JavaScript Execution .................................................................... 154
Step 3: Create the Timeline in Semantic HTML............................................... 155
Step 4: Include the Supporting Content .......................................................... 157
Step 5: Optionally Take Advantage of jQuery ..................................................159
Step 6: Fix Timeline Problems with CSS ............................................................159
Step 7: Add Styles to Visually Structure the Timeline ......................................161
Step 8: Add Interactivity..................................................................................... 163
Using a Web Component ..............................................................................................167
Step 1: Preview the Standard Component ....................................................... 168
Step 2: Include the Required Components ......................................................170
Step 3: Prepare the Data .....................................................................................170
Step 4: Create a Default Timeline ......................................................................172
Step 5: Adjust the Timeline Styles .....................................................................174
Summing Up ...................................................................................................................177

Chapter 6: Visualizing Geographic Data.........................................................179


Using Map Fonts ........................................................................................................... 180
Step 1: Include the Fonts in the Page ............................................................... 180
Step 2: Display One Country ..............................................................................181
Step 3: Combine Multiple Countries into a Single Map ................................. 182
Step 4: Vary the Countries Based on the Data ................................................ 183
Step 5: Add a Legend ......................................................................................... 185
Working with Scalable Vector Graphics ..................................................................... 186
Step 1: Create the SVG Map .............................................................................. 188
Step 2: Embed the Map in the Page ................................................................. 189
Step 3: Collect the Data ..................................................................................... 190
Step 4: Deine the Color Scheme ...................................................................... 191
Step 5: Color the Map ........................................................................................ 192

xii | Contents in Detail


Step 6: Add a Legend ......................................................................................... 193
Step 7: Add Interactions......................................................................................194
Including Maps for Context ......................................................................................... 197
Step 1: Set Up the Web Page ............................................................................ 198
Step 2: Prepare the Data .................................................................................... 198
Step 3: Choose a Map Style............................................................................... 199
Step 4: Draw the Map ......................................................................................... 199
Step 5: Add the Sightings .................................................................................. 200
Integrating a Full-Featured Mapping Library ............................................................ 201
Step 1: Prepare the Data .................................................................................... 201
Step 2: Set Up the Web Page and Libraries ..................................................... 202
Step 3: Draw the Base Map................................................................................ 203
Step 4: Add the Routes to the Map .................................................................. 205
Step 5: Add an Animation Control .................................................................... 207
Step 6: Prepare the Animation .......................................................................... 210
Step 7: Animate the Routes ................................................................................211
Step 8: Create Labels for the Stops ...................................................................214
Step 9: Build the Label Animation .................................................................... 216
Step 10: Incorporate Label Animation in the Animation Step ....................... 218
Step 11: Add a Title ............................................................................................. 221
Summing Up .................................................................................................................. 222

Chapter 7: Custom Visualizations with D3.js ............................................... 223


Adapting a Traditional Chart Type .............................................................................. 224
Step 1: Prepare the Data .................................................................................... 225
Step 2: Set Up the Web Page ............................................................................ 225
Step 3: Create a Stage for the Visualization ..................................................... 226
Step 4: Control the Chart’s Dimensions ........................................................... 227
Step 5: Draw the Chart Framework ................................................................... 228
Step 6: Add the Data to the Chart .................................................................... 231
Step 7: Answer Users’ Questions ...................................................................... 232
Creating a Force-Directed Network Graph ............................................................... 232
Step 1: Prepare the Data .................................................................................... 233
Step 2: Set Up the Page ..................................................................................... 234
Step 3: Create a Stage for the Visualization ..................................................... 235
Step 4: Draw the Graph’s Nodes....................................................................... 235
Step 5: Draw the Graph’s Edges ....................................................................... 238
Step 6: Position the Elements ............................................................................ 238
Step 7: Add Force Direction to the Graph ....................................................... 240
Step 8: Add Interactivity..................................................................................... 242
Step 9: Experiment with Other Enhancements ............................................... 245
Creating a Scalable Map .............................................................................................. 245
Step 1: Prepare the Data .................................................................................... 245
Step 2: Set Up the Page ..................................................................................... 246
Step 3: Create a Map Projection ....................................................................... 246
Step 4: Initialize the SVG Container .................................................................. 247
Step 5: Retrieve the Map Data........................................................................... 247

Contents in Detail | xiii


Step 6: Draw the Map ......................................................................................... 248
Step 7: Retrieve the Weather Data .................................................................... 249
Step 8: Plot the Data ........................................................................................... 249
Step 9: Add Interactivity .................................................................................... 250
Creating a Unique Visualization................................................................................... 252
Step 1: Prepare the Data .................................................................................... 253
Step 2: Set Up the Page ..................................................................................... 253
Step 3: Create a Stage for the Visualization ..................................................... 254
Step 4: Create Scales .......................................................................................... 254
Step 5: Retrieve the Data ................................................................................... 256
Step 6: Draw the Visualization ........................................................................... 258
Step 7: Color the Areas ...................................................................................... 259
Step 8: Make the Visualization Interactive ....................................................... 262
Summing Up .................................................................................................................. 267

Chapter 8: Managing Data in the Browser ................................................... 269


Using Functional Programming ................................................................................... 270
Step 1: Start with an Imperative Version........................................................... 271
Step 2: Debug the Imperative Code ................................................................ 271
Step 3: Understand the Problems Imperative
Programming May Introduce................................................................ 272
Step 4: Rewrite Using Functional Programming Style .................................... 273
Step 5: Evaluate Performance............................................................................ 273
Step 6: Fix the Performance Problem ................................................................274
Working with Arrays ...................................................................................................... 275
Extracting Elements by Position ....................................................................... 275
Combining Arrays ............................................................................................... 278
Removing Invalid Data Values ........................................................................... 280
Finding Elements in an Array............................................................................. 281
Generating Arrays............................................................................................... 282
Enhancing Objects ....................................................................................................... 283
Working with Keys and Values ........................................................................... 283
Cleaning Up Object Subsets ............................................................................. 285
Updating Attributes............................................................................................ 286
Manipulating Collections ............................................................................................. 288
Working with Iteration Utilities .......................................................................... 289
Finding Elements in a Collection ...................................................................... 290
Testing a Collection ............................................................................................ 292
Rearranging Collections .................................................................................... 292
Summing Up .................................................................................................................. 294

Chapter 9: Building Data-Driven Web Applications: Part 1 ................. 295


Frameworks and Libraries ............................................................................................ 297
Step 1: Select an Application Library ............................................................... 297
Step 2: Install Development Tools .................................................................... 298
Step 3: Deine a New Project ............................................................................. 298
Step 4: Add Our Unique Dependencies .......................................................... 301

xiv | Contents in Detail


Models and Views ......................................................................................................... 302
Step 1: Deine the Application’s Models .......................................................... 303
Step 2: Implement the Model............................................................................ 304
Step 3: Deine the Application’s Collections ................................................... 306
Step 4: Deine the Application’s Main View ..................................................... 307
Step 5: Deine the Main View Templates...........................................................311
Step 6: Reine the Main View ..............................................................................314
Views for Visualizations ..................................................................................................316
Step 1: Deine the Additional Views ..................................................................317
Step 2: Implement the Details View...................................................................317
Step 3: Implement the Properties View.............................................................318
Step 4: Implement the Map View ...................................................................... 322
Step 5: Implement the Charts View .................................................................. 325
Summing Up .................................................................................................................. 326

Chapter 10: Building Data-Driven Web Applications: Part 2 ............... 327


Connecting with the Nike+ Service ............................................................................ 328
Step 1: Authorize Users ...................................................................................... 328
Step 2: Accept the Nike+ Response ................................................................. 330
Step 3: Page the Collection ............................................................................... 330
Step 4: Dynamically Update the View ............................................................... 334
Step 5: Filter the Collection ............................................................................... 335
Step 6: Parse the Response ............................................................................... 336
Step 7: Retrieve Details ...................................................................................... 336
Putting It All Together .................................................................................................. 340
Step 1: Create a Backbone.js Router ................................................................ 340
Step 2: Support Run Models Outside of Any Collection ............................... 342
Step 3: Let Users Change Views ........................................................................ 345
Step 4: Fine-Tune the Application..................................................................... 349
Summing Up .................................................................................................................. 351

Index ............................................................................................................................. 353

Contents in Detail | xv
Acknowledgments
Even though it’s been said many times, there’s no getting around the fact that
a book is the work of many people other than the author. This book certainly
wouldn’t have been possible without the patience of Seph and the other ine folks
at No Starch Press. There simply is no better publisher for technical books. Kudos
also to Chris for the technical review, though, of course, the remaining mistakes
are mine alone. I owe a special thanks to NickC for his generosity; it’s such a plea-
sure to meet folks that appreciate the true community spirit of the Web and web
development. Finally, shout-outs to the team developing the Open Academic
Environment and my colleagues at the Georgia Institute of Technology; working
with them is a true pleasure.
Introduction

It’s getting hard to ignore the importance of


data in our lives. Data is critical to the largest
social organizations in human history (giants
like Facebook and Google), and its collection
has widespread geopolitical implications, as
we all saw with the NSA surveillance scandal.
But it’s also getting easier to ignore the data
itself. One estimate suggests that 99.5% of the
data our systems collect goes to waste.
Data visualization is a tool that addresses this gap. Effective visualizations
clarify; they transform abstract collections of numbers into shapes and forms that
viewers quickly grasp and understand. The best visualizations impart this under-
standing intuitively. Viewers comprehend the data immediately—without thinking.
This frees viewers to more fully consider the implications of the data: the stories it
tells, the insights it reveals, or even the warnings it offers.
If you’re developing websites or web applications today, there’s a good
chance you have data to communicate—data best presented in a good visual-
ization. But how do you know what kind of visualization is appropriate? And even
more importantly, how do you actually create one? In the chapters that follow, we
explore dozens of different visualizations, techniques, and toolkits. Each example
discusses the appropriateness of the visualization (and suggests possible alterna-
tives) and provides step-by-step instructions for adding the visualization to your
web pages.

The Book’s Philosophy


In creating this book, I’ve tried to follow four main principles to make sure it pro-
vides meaningful and practical guidance.

Implementation vs. Design


This book won’t teach you how to design data visualizations. Quite honestly,
there are other authors far better qualified than me for that (Edward Tufte, for
example). Instead, this book will focus on implementing visualizations. When
appropriate, I’ll take a slightly bigger picture view to discuss the strengths and
weaknesses of particular visualization strategies, but the main goal is to show
you how to create a wide range of visualizations. (I recognize that sometimes
the boss absolutely insists on a pie chart.)

Code vs. Styling


As you might guess from the title, this book focuses on how to use Java-
Script code to create visualizations. The examples don’t assume you’re
a JavaScript expert—and I’ll be sure to explain any code more complicated
than a basic jQuery selector—but I won’t spend much time discussing styles
for the visualizations. Fortunately, styling visualizations is pretty much the
same as styling other web content. Basic experience with HTML and CSS
will serve you well when you add visualizations to your pages.

Simple vs. Complex


Most of the book’s examples are simple, straightforward visualizations. Com-
plex visualizations can be engaging and compelling, but studying a lot of
advanced code usually isn’t the best way to learn the craft. In these examples,
I’ll try to stay as simple as possible so you can clearly see how to use the vari-
ous tools and techniques. Simple doesn’t mean boring, however, and even
the simplest visualizations can be enlightening and inspiring.

2 | Introduction
Reality vs. an Ideal World
When you begin building your own visualizations, you’ll discover that the
real world is rarely as kind as you’d wish. Open source libraries have bugs,
third-party servers have security issues, and not every user has updated
to the latest and greatest web browser. I’ve addressed these realities in the
examples in this book. I’ll show you how to accommodate older browsers
when it’s practical, how to comply with security constraints such as Cross-
Origin Resource Sharing (CORS), and how to work around bugs in other
folks’ code.

The Book’s Contents


The chapters that follow cover a variety of visualization techniques and the
JavaScript libraries that we can use to implement them.
> Chapter 1 begins with the most basic visualizations—static charts and
plots—using the Flotr2 library.
> Chapter 2 adds interactivity to the visualizations, giving users the chance
to select content, zoom in, and track values. The chapter also shows how to
retrieve data for visualizations directly from the Web. For variety, its examples
use the Flot library, which is based on jQuery.
> Chapter 3 looks at integrating multiple visualizations and with other content
on a web page; it uses the jQuery sparklines library.
> In Chapter 4, we consider visualizations other than standard charts and
plots, including tree maps, heat maps, network graphs, and word clouds.
Each example focuses on a particular JavaScript library designed specifically
for the visualization type.
> Chapter 5 covers time-based visualizations. It looks at several ways to visual-
ize timelines, including traditional libraries; pure HTML, CSS, and JavaScript;
and full-featured web components.
> In Chapter 6, we consider geographic data as we look at different ways to
incorporate maps into our visualizations.
> Chapter 7 introduces the powerful D3.js library, a flexible and full-featured
toolkit for building custom visualizations of almost any type.
> Beginning in Chapter 8, we consider other aspects of web-based visualiza-
tions. This chapter shows off the Underscore.js library, which makes it easy to
prepare the data that drives our visualizations.
> Finally, Chapters 9 and 10 walk through the development of a complete,
single-page web application that relies on data visualization. Here we’ll see
how to use modern development tools such as Yeoman and the Backbone.js
library.

Introduction | 3
Source Code for Examples
To make the text as clear and readable as possible, examples usually contain iso-
lated snippets of JavaScript, plus occasional fragments of HTML or CSS. Complete
source code for all examples is available on GitHub at http://jsDataV.is/source/.

4 | Introduction
Graphing Data
1

Many people think of data visualization as intri-


cate interactive graphics of dazzling complex-
ity. Creating effective visualizations, however,
doesn’t require Picasso’s artistic skill or Turing’s
programming expertise. In fact, when you con-
sider the ultimate purpose of data visualization—
helping users understand data—simplicity is one
of the most important features of an effective
visualization. Simple, straightforward charts are
often the easiest to understand.
Discovering Diverse Content Through
Random Scribd Documents
Vinones (Fr. Juan Bautista de), 507.

Viñoles (Narcis), 511.

Vivero (D. Luis de), 512.

Vives (Juan Luis), 536.

Vocabulario catalán y alemán, 499.

Yuçuf (Historia de), 228.

Zacuto (Abraham), 464.

Zadik-ben-Zadik, 112.

Zamora (Alfonso de), 540.

Zamora (Juan Gil de), 209.


ERRATAS

PÁGINA LÍNEA DICE


DEBE DECIR

61 15 dodne
donde

65 rótulo popular erudita


popular y erudita

73 7 venementi
vehementi

119 22 101
110

129 4 Beitrâge
Beiträge

129 38 antiquissime
antiquissimi

144 36 métr. poét.


metr. poet.
160 14 romanos
romeros

163 2 Vikins
Vikings

214 39 Saviesa
Saviesa, según la

opinión corriente,

aunque propiamente

no fué D. Jaime su

autor.

222 36 libre
libro

274 35 (1300)
(1390)

294 15 Terencio,
Peno Terencio Peno

303 20 1498
1398

312 29 Jun
Juan
314 37 Herberg
Herbera y

380 5 Osuna
Osma

400 34 Zamburda
Zambardo

420 22 1913
1915

422 31 bulas
buhas

423 38 pestíferas las


pestíferas

463 6 1913
1915
OBRAS DE D. JULIO CEJADOR Y FRAUCA

Gramática Griega, según el sistema histórico


comparado. Pesetas 15—Herederos de Juan Gili:
Cortes, 581, Barcelona.

La Lengua de Cervantes.—Gramática y Diccionario de la


lengua castellana en el "Ingenioso Hidalgo Don
Quijote de la Mancha".—Tomo I: Gramática. En
España, pesetas 10.—Tomo II: Diccionario y
Comentarios. Pesetas 25.—Jubera Hermanos,
Campomanes, 10, Madrid.

Cabos sueltos, Literatura y lingüística. Pesetas 5.—


Perlado, Páez y C.ª, Sucesores de Hernando,
Arenal 11, Madrid.

Nuevo método teórico-práctico para aprender la Lengua


Latina.—Primer curso: Tomo I, Libro de clase;
tomo II, Libro de casa. Pesetas 12.—Segundo
curso: Tomo I, Libro de clase; tomo II, Libro de
casa. Pesetas 12.—Perlado, Páez y C.ª, Sucesores
de Hernando, Arenal, 11, Madrid.
El Lenguaje.—Serie de estudios, de los que van ya
publicados los tomos siguientes:

Tomo I: Introducción á la Ciencia del Lenguaje.—


Segunda edición, enteramente refundida y
aumentada. Pesetas 6.

Tomo II: Los Gérmenes del Lenguaje.—Estudio físico,


fisiológico y psicológico de las voces del lenguaje,
como base para la investigación de sus orígenes.
—En España, pesetas 10.—Jubera Hermanos,
Campomanes, 10, Madrid.

Tomo III: Embriogenia del Lenguaje.—Su estructura y


formación primitivas, sacadas del estudio
comparativo de los elementos demostrativos de
las lenguas.—En España, pesetas 12.—Jubera
Hermanos, Campomanes, 10, Madrid.

Tomo IV: Tesoro de la Lengua Castellana, Origen y vida


del Lenguaje. Pesetas 12.—Tomo A, Ε, I, O, U.
Perlado, Páez y C.ª, Arenal, 11, Madrid.

Tomo V: Tesoro de la Lengua Castellana, etc., etc. Tomo


R.

Tomo VI: Tesoro de la Lengua Castellana, etc., etc.


Tomo N, Ñ.
Tomo VII: Tesoro de la Lengua Castellana, etc., etc.
Tomo L.

Tomo VIII: Tesoro de la Lengua Castellana.—Silbantes.


Primera parte.

Tomo IX: Tesoro de la Lengua Castellana.—Silbantes.


Segunda parte.

Tomo X: Tesoro de la Lengua Castellana.—Silbantes.


Tercera parte.

Tomo XI: Tesoro de la Lengua Castellana.—Silbantes.


Cuarta parte.

Tomo XII: Tesoro de la Lengua Castellana.—Labiales.


(Β. P.). Primera parte.

Tomo XIII: Tesoro de la Lengua Castellana.—Labiales.


(Β. P.). Segunda parte (en prensa).

Oro y oropel, novela. Pesetas 3.—Perlado, Páez y C.ª,


Arenal, 11, Madrid.

Pasavolantes, colección de artículos. Pesetas 3.—


Jubera Hermanos, Campomanes, 10, Madrid.

Mirando á Loyola, novela. Pesetas 3,50.


—"Renacimiento", San Marcos, 42, Madrid.
Arcipreste de Hita, edición, prólogo y comentario: dos
tomos. Pesetas 6.— Paseo de Recoletos, 25, "La
Lectura".

Rojas, "La Celestina", edición, prólogo y comentario:


dos tomos. Pesetas 6.—Paseo de Recoletos, 25,
"La Lectura".

El Lazarillo de Tormes, edición, prólogo y comentario:


un tomo. Pesetas 3.—Paseo de Recoletos, 25, "La
Lectura".

Mateo Alemán, Guzmán de Alfarache, edición y


prólogo: dos tomos. "Renacimiento".

Lorenzo Gracián, El Criticón, edición y prólogo: dos


tomos. "Renacimiento".

¡De la tierra...!,
colección de artículos. Pesetas 3.—
Jubera Hermanos, Campomanes, 10, Madrid.

Trazas del amor, novela.—J. Ratés, plaza de San


Javier, 6, Madrid.

Epítome de Literatura Latina. Pesetas 3.—Victoriano


Suárez, Preciados, 48, Madrid.

En prensa: Historia de la Lengua y Literatura Castellana,


t. II.
Diálogos sobre el nacimiento del Castellano.
*** END OF THE PROJECT GUTENBERG EBOOK HISTORIA DE LA
LENGUA Y LITERATURA CASTELLANA, TOMO 1 ***

Updated editions will replace the previous one—the old editions


will be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States
copyright in these works, so the Foundation (and you!) can copy
and distribute it in the United States without permission and
without paying copyright royalties. Special rules, set forth in the
General Terms of Use part of this license, apply to copying and
distributing Project Gutenberg™ electronic works to protect the
PROJECT GUTENBERG™ concept and trademark. Project
Gutenberg is a registered trademark, and may not be used if
you charge for an eBook, except by following the terms of the
trademark license, including paying royalties for use of the
Project Gutenberg trademark. If you do not charge anything for
copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such
as creation of derivative works, reports, performances and
research. Project Gutenberg eBooks may be modified and
printed and given away—you may do practically ANYTHING in
the United States with eBooks not protected by U.S. copyright
law. Redistribution is subject to the trademark license, especially
commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS
WORK

To protect the Project Gutenberg™ mission of promoting the


free distribution of electronic works, by using or distributing this
work (or any other work associated in any way with the phrase
“Project Gutenberg”), you agree to comply with all the terms of
the Full Project Gutenberg™ License available with this file or
online at www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand,
agree to and accept all the terms of this license and intellectual
property (trademark/copyright) agreement. If you do not agree
to abide by all the terms of this agreement, you must cease
using and return or destroy all copies of Project Gutenberg™
electronic works in your possession. If you paid a fee for
obtaining a copy of or access to a Project Gutenberg™
electronic work and you do not agree to be bound by the terms
of this agreement, you may obtain a refund from the person or
entity to whom you paid the fee as set forth in paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only


be used on or associated in any way with an electronic work by
people who agree to be bound by the terms of this agreement.
There are a few things that you can do with most Project
Gutenberg™ electronic works even without complying with the
full terms of this agreement. See paragraph 1.C below. There
are a lot of things you can do with Project Gutenberg™
electronic works if you follow the terms of this agreement and
help preserve free future access to Project Gutenberg™
electronic works. See paragraph 1.E below.

1.C. The Project Gutenberg Literary Archive Foundation (“the


Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright
law in the United States and you are located in the United
States, we do not claim a right to prevent you from copying,
distributing, performing, displaying or creating derivative works
based on the work as long as all references to Project
Gutenberg are removed. Of course, we hope that you will
support the Project Gutenberg™ mission of promoting free
access to electronic works by freely sharing Project Gutenberg™
works in compliance with the terms of this agreement for
keeping the Project Gutenberg™ name associated with the
work. You can easily comply with the terms of this agreement
by keeping this work in the same format with its attached full
Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside
the United States, check the laws of your country in addition to
the terms of this agreement before downloading, copying,
displaying, performing, distributing or creating derivative works
based on this work or any other Project Gutenberg™ work. The
Foundation makes no representations concerning the copyright
status of any work in any country other than the United States.

1.E. Unless you have removed all references to Project


Gutenberg:
1.E.1. The following sentence, with active links to, or other
immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project
Gutenberg™ work (any work on which the phrase “Project
Gutenberg” appears, or with which the phrase “Project
Gutenberg” is associated) is accessed, displayed, performed,
viewed, copied or distributed:

This eBook is for the use of anyone anywhere in the


United States and most other parts of the world at no cost
and with almost no restrictions whatsoever. You may copy
it, give it away or re-use it under the terms of the Project
Gutenberg License included with this eBook or online at
www.gutenberg.org. If you are not located in the United
States, you will have to check the laws of the country
where you are located before using this eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is


derived from texts not protected by U.S. copyright law (does not
contain a notice indicating that it is posted with permission of
the copyright holder), the work can be copied and distributed to
anyone in the United States without paying any fees or charges.
If you are redistributing or providing access to a work with the
phrase “Project Gutenberg” associated with or appearing on the
work, you must comply either with the requirements of
paragraphs 1.E.1 through 1.E.7 or obtain permission for the use
of the work and the Project Gutenberg™ trademark as set forth
in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is


posted with the permission of the copyright holder, your use and
distribution must comply with both paragraphs 1.E.1 through
1.E.7 and any additional terms imposed by the copyright holder.
Additional terms will be linked to the Project Gutenberg™
License for all works posted with the permission of the copyright
holder found at the beginning of this work.
1.E.4. Do not unlink or detach or remove the full Project
Gutenberg™ License terms from this work, or any files
containing a part of this work or any other work associated with
Project Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute


this electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the
Project Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if
you provide access to or distribute copies of a Project
Gutenberg™ work in a format other than “Plain Vanilla ASCII” or
other format used in the official version posted on the official
Project Gutenberg™ website (www.gutenberg.org), you must,
at no additional cost, fee or expense to the user, provide a copy,
a means of exporting a copy, or a means of obtaining a copy
upon request, of the work in its original “Plain Vanilla ASCII” or
other form. Any alternate format must include the full Project
Gutenberg™ License as specified in paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™
works unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or


providing access to or distributing Project Gutenberg™
electronic works provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project


Gutenberg™ electronic work or group of works on different
terms than are set forth in this agreement, you must obtain
permission in writing from the Project Gutenberg Literary
Archive Foundation, the manager of the Project Gutenberg™
trademark. Contact the Foundation as set forth in Section 3
below.

1.F.
1.F.1. Project Gutenberg volunteers and employees expend
considerable effort to identify, do copyright research on,
transcribe and proofread works not protected by U.S. copyright
law in creating the Project Gutenberg™ collection. Despite these
efforts, Project Gutenberg™ electronic works, and the medium
on which they may be stored, may contain “Defects,” such as,
but not limited to, incomplete, inaccurate or corrupt data,
transcription errors, a copyright or other intellectual property
infringement, a defective or damaged disk or other medium, a
computer virus, or computer codes that damage or cannot be
read by your equipment.

1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except


for the “Right of Replacement or Refund” described in
paragraph 1.F.3, the Project Gutenberg Literary Archive
Foundation, the owner of the Project Gutenberg™ trademark,
and any other party distributing a Project Gutenberg™ electronic
work under this agreement, disclaim all liability to you for
damages, costs and expenses, including legal fees. YOU AGREE
THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT
EXCEPT THOSE PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE
THAT THE FOUNDATION, THE TRADEMARK OWNER, AND ANY
DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE LIABLE
TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL,
PUNITIVE OR INCIDENTAL DAMAGES EVEN IF YOU GIVE
NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.

1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you


discover a defect in this electronic work within 90 days of
receiving it, you can receive a refund of the money (if any) you
paid for it by sending a written explanation to the person you
received the work from. If you received the work on a physical
medium, you must return the medium with your written
explanation. The person or entity that provided you with the
defective work may elect to provide a replacement copy in lieu
of a refund. If you received the work electronically, the person
or entity providing it to you may choose to give you a second
opportunity to receive the work electronically in lieu of a refund.
If the second copy is also defective, you may demand a refund
in writing without further opportunities to fix the problem.

1.F.4. Except for the limited right of replacement or refund set


forth in paragraph 1.F.3, this work is provided to you ‘AS-IS’,
WITH NO OTHER WARRANTIES OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.

1.F.5. Some states do not allow disclaimers of certain implied


warranties or the exclusion or limitation of certain types of
damages. If any disclaimer or limitation set forth in this
agreement violates the law of the state applicable to this
agreement, the agreement shall be interpreted to make the
maximum disclaimer or limitation permitted by the applicable
state law. The invalidity or unenforceability of any provision of
this agreement shall not void the remaining provisions.

1.F.6. INDEMNITY - You agree to indemnify and hold the


Foundation, the trademark owner, any agent or employee of the
Foundation, anyone providing copies of Project Gutenberg™
electronic works in accordance with this agreement, and any
volunteers associated with the production, promotion and
distribution of Project Gutenberg™ electronic works, harmless
from all liability, costs and expenses, including legal fees, that
arise directly or indirectly from any of the following which you
do or cause to occur: (a) distribution of this or any Project
Gutenberg™ work, (b) alteration, modification, or additions or
deletions to any Project Gutenberg™ work, and (c) any Defect
you cause.
Section 2. Information about the Mission
of Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new
computers. It exists because of the efforts of hundreds of
volunteers and donations from people in all walks of life.

Volunteers and financial support to provide volunteers with the


assistance they need are critical to reaching Project
Gutenberg™’s goals and ensuring that the Project Gutenberg™
collection will remain freely available for generations to come. In
2001, the Project Gutenberg Literary Archive Foundation was
created to provide a secure and permanent future for Project
Gutenberg™ and future generations. To learn more about the
Project Gutenberg Literary Archive Foundation and how your
efforts and donations can help, see Sections 3 and 4 and the
Foundation information page at www.gutenberg.org.

Section 3. Information about the Project


Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-
profit 501(c)(3) educational corporation organized under the
laws of the state of Mississippi and granted tax exempt status
by the Internal Revenue Service. The Foundation’s EIN or
federal tax identification number is 64-6221541. Contributions
to the Project Gutenberg Literary Archive Foundation are tax
deductible to the full extent permitted by U.S. federal laws and
your state’s laws.

The Foundation’s business office is located at 809 North 1500


West, Salt Lake City, UT 84116, (801) 596-1887. Email contact
links and up to date contact information can be found at the
Foundation’s website and official page at
www.gutenberg.org/contact

Section 4. Information about Donations to


the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission
of increasing the number of public domain and licensed works
that can be freely distributed in machine-readable form
accessible by the widest array of equipment including outdated
equipment. Many small donations ($1 to $5,000) are particularly
important to maintaining tax exempt status with the IRS.

The Foundation is committed to complying with the laws


regulating charities and charitable donations in all 50 states of
the United States. Compliance requirements are not uniform
and it takes a considerable effort, much paperwork and many
fees to meet and keep up with these requirements. We do not
solicit donations in locations where we have not received written
confirmation of compliance. To SEND DONATIONS or determine
the status of compliance for any particular state visit
www.gutenberg.org/donate.

While we cannot and do not solicit contributions from states


where we have not met the solicitation requirements, we know
of no prohibition against accepting unsolicited donations from
donors in such states who approach us with offers to donate.

International donations are gratefully accepted, but we cannot


make any statements concerning tax treatment of donations
received from outside the United States. U.S. laws alone swamp
our small staff.
Please check the Project Gutenberg web pages for current
donation methods and addresses. Donations are accepted in a
number of other ways including checks, online payments and
credit card donations. To donate, please visit:
www.gutenberg.org/donate.

Section 5. General Information About


Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could
be freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose
network of volunteer support.

Project Gutenberg™ eBooks are often created from several


printed editions, all of which are confirmed as not protected by
copyright in the U.S. unless a copyright notice is included. Thus,
we do not necessarily keep eBooks in compliance with any
particular paper edition.

Most people start at our website which has the main PG search
facility: www.gutenberg.org.

This website includes information about Project Gutenberg™,


including how to make donations to the Project Gutenberg
Literary Archive Foundation, how to help produce our new
eBooks, and how to subscribe to our email newsletter to hear
about new eBooks.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookfinal.com

You might also like