• Stars
    star
    99
  • Rank 343,315 (Top 7 %)
  • Language
    JavaScript
  • License
    GNU General Publi...
  • Created about 9 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An interactive data visualization tool

VizWit

Join the chat at https://gitter.im/timwis/vizwit Stories in Ready Build Status js-standard-style

An interactive data visualization tool. VizWit uses a JSON config file to generate interactive charts that cross-filter one another. It currently supports data hosted in Socrata and Carto, which includes open data provided by cities such as Philadelphia, Chicago, and San Francisco). Data thatโ€™s hosted elsewhere can be supported by adding a new data provider.

screencast

Features

  • Clicking on a chart cross-filters the other charts
  • Multiple datasets on one page
  • Configurable via GUI (work in progress)
  • Fork configurations with a gist
  • Pie chart
  • Callout metric
  • Scrolling bar charts
  • Responsive / mobile-friendly
  • Embeddable (and cross-filtering still works)
  • Free-text search on table
  • 100% client-side
  • Open source / extendable

Examples

Configuration

VizWit cards are configured via JSON objects. The layout is defined using size and order properties on those objects, generated by the Config Builder (work in progress). The resulting JSON file is then hosted on gist.github.com, a free and easy service to share code snippets. The Gist ID is then used in the VizWit URL (ie. vizw.it/?gist=a304ce8fac9c14dfbf16). This allows viewers to fork the Gist and build their own VizWit page.

Configuration Documentation

Build your own

Visit the builder and add a few cards, then configure them using the wrench icon. When you're finished, click Export and copy the configuration code into a new "gist" at gist.github.com. Once you click Create, you should see your new "gist" and the "gist id" of random characters in the URL (ie. 813483da72ac781f8b13). Use that gist id to go to http://vizw.it?gist=YOUR_GIST_ID

Alternatively, use the live editor to edit the raw JSON alongside a live representation of it.

If you'd like to share what you've created, post an issue with a link to it.

Technology

VizWit is a client-side JavaScript application. The application is structured using Backbone. Charts are built using AmCharts. Maps are built using Leaflet. Tables are built using DataTables. Tests (of which there are not nearly enough!) are run using Mocha. The interactive layout is generated by Gridstack. The application is compiled using Browserify. See the full list of dependencies in package.json

How it works

vizwit.js is the primary chart-generating module. It takes a container selector and a config object and uses them to initialize a view (bar chart, map, table, etc.). The views are passed a collection and a filteredCollection, which are identical and allow the view to query the data provider. Views generate the chart/map/table/etc. and listen for user interactions on them. On an interaction, the view triggers the global event object with the filter (ie. state=PA), and all views that use the same dataset receive the event and use their filteredCollection to query the data provider with the filter passed through the event. By using a separate collection, VizWit can show the "filtered value" and the "original value" side-by-side.

The actual entry point is either vizwit-loader.js or vizwit-embed.js. vizwit-loader.js fetches a gist or local file, reads its configuration, and passes it to layout.js to create a layout on the page. Then for each chart in the configuration, layout.js calls init() from vizwit.js as described above. vizwit-embed.js simply finds the parent container of the <script> tag that was embedded, and calls init() from vizwit.js inside of it. This way of embedding allows the VizWit library to only be loaded once on the page with as many charts embedded in any element (example).

Development

  • After cloning the repo, use npm install to install dependencies
  • While developing, use npm start to automatically recompile when changes are made and run a web server at localhost:8080
  • Use npm test to verify code style and run unit tests
  • Use npm run build for a production build, and then use npm run deploy to push the dist/ directory to the gh-pages branch (first make the deploy script executable via chmod +x deploy.sh)

License

GPL-2 (create an issue if that doesn't work for someone)

More Repositories

1

csv-schema

Analyzes a CSV file and generates database table schema, all within the browser
JavaScript
314
star
2

jkan

A lightweight, backend-free open data portal, powered by Jekyll
HTML
219
star
3

markdown-to-google-doc

Converts a markdown file to .docx and then imports it to Google Drive
Shell
189
star
4

leaflet-choropleth

Choropleth plugin for Leaflet (color scale based on value)
JavaScript
168
star
5

eres

Use async/await with [err, result] instead of try/catch.
JavaScript
62
star
6

dataface

Build and manage data with a spreadsheet-like interface
JavaScript
43
star
7

enviar

Chat interface for SMS / text messages
JavaScript
37
star
8

markdown-menubar

Take quick notes from the menubar in markdown. Saves to a file as you type.
JavaScript
33
star
9

static-api

Creates a static API from a CSV file
Ruby
29
star
10

handsontable-postgrest

An excel-like database table editor using Handsontable + PostgREST
JavaScript
28
star
11

form-designer

Drag & drop designer for building forms
JavaScript
19
star
12

choo-leaflet-demo

Example usage of leaflet with choo via cache-element
JavaScript
16
star
13

dataface-electron

Desktop application to manage Postgres databases
JavaScript
15
star
14

ext-postgrest-crud

An Ext.js-powered, spreadsheet-style Grid for Create/Read/Update/Delete against a postgres database with a PostgREST API in front of it
JavaScript
14
star
15

vue-lil-context-menu

A flexible context menu component for Vue
Vue
13
star
16

choo-infinite-list

Proof of concept using choo to render only the rows necessary to display, along with padding above and below to simulate scrolling through a giant list.
JavaScript
10
star
17

github-feed

Mobile-friendly GitHub activity feed. Check who starred what while on the go.
JavaScript
10
star
18

data-digest

Monitors an API for new data and sends digest emails to subscribers.
Elixir
10
star
19

koa-superstruct

Use the superstruct data validation library as middleware for your koa app.
JavaScript
9
star
20

open-collect

Offline-first mobile web app for field data collection
JavaScript
9
star
21

es6-boilerplate

Front-end project boilerplate with es6 build tools. Includes babel, webpack, and npm scripts.
JavaScript
8
star
22

jekyll-travis-gh-pages

Deploy jekyll sites to gh-pages with plugins, etc. using Travis CI
HTML
8
star
23

responsive-map-list-template

HTML template for a map + list application
HTML
8
star
24

node-soda2-parser

Parse Socrata SODA2 API to Abstract Syntax Tree (AST)
JavaScript
8
star
25

soda-geoservices

Query Esri Geoservices using a SODA2-style API
JavaScript
7
star
26

actionable

A GTD-inspired todo list that lets you focus on immediately actionable tasks (tasks with no dependencies).
JavaScript
7
star
27

choo-onload-tests

A few tests to demonstrate expected functionality of on-load in choo
JavaScript
7
star
28

aframe-fps-look-controls-component

A-Frame component to enable FPS-style looking
JavaScript
7
star
29

electoral-calling

The fate of the country is in the hands of these 538 members of the electoral college. Here's who they are.
JavaScript
7
star
30

geoservices-for-humans

Human-friendly documentation of Esri GeoServices
JavaScript
6
star
31

hyperlist-component

Wraps HyperList with Nanocomponent to allow use as a pureish component.
JavaScript
6
star
32

jkan-demo

Demo instance of timwis/jkan
HTML
5
star
33

sheetstat

Spreadsheet driven stats site
HTML
5
star
34

choo-workshop

choo: the good parts of react & redux without the boilerplate
JavaScript
5
star
35

github-directory

Generates a page of your GitHub repositories. Useful for a user/org GitHub Pages site when you're not sure what to put there.
Ruby
5
star
36

OPA-Liberator

JavaScript
4
star
37

arcbishop

Responsive bootstrap map and panel template
JavaScript
4
star
38

choo-starter

A basic starter app for playing around with choo on glitch.
JavaScript
4
star
39

soda-postgres

Use Socrata's SODA2 API to query a postgres database
JavaScript
4
star
40

standards-components

Proof of concept of using custom elements for a style guide
JavaScript
4
star
41

textblast

JavaScript
4
star
42

koop-odata

OData API functionality for esri/koop
JavaScript
4
star
43

PhillySNAP

Find nearby farmers markets and SNAP-accepting retailers via text message
JavaScript
4
star
44

socrata-creator

Create Socrata datasets via API
Python
3
star
45

serverless-data

Edit data files in GitHub with a GUI
JavaScript
3
star
46

georeport

Offline-first map-based reporter (work in progress, proof of concept)
Vue
3
star
47

PhillySNAP-v1

PhillySNAP, an SMS-based application powered by Smsified, aims to connect low-income, technology isolated Philadelphia residents with local fresh food sources. It was developed by Deng-Shun Chang, Mark Headd, Katey Metzroth and Tim Wisniewski.
PHP
3
star
48

couchdb-password-reset

Password reset implementation for CouchDB
JavaScript
3
star
49

koop-soda

This plugin makes it possible to interact with Koop's many providers using a SODA2 API
JavaScript
3
star
50

github-api-demo

Login via GitHub and create/edit a file using a form interface
3
star
51

split-the-distance

Find mutually convenient places to meet
Svelte
2
star
52

gatsby-starter-netlify-cms

JavaScript
2
star
53

vizwit-designer

Design VizWit card configurations with a GUI
JavaScript
2
star
54

file-schema-detector

DEPRECATED - Detect/guess schema of CSV file in the browser
JavaScript
2
star
55

export-jamboard

Bookmarklet to copy the contents of a jamboard as text
HTML
2
star
56

septakey-api

A REST API providing basic functions of septakey.org
JavaScript
2
star
57

hybrid-google-meet

Join Google Meet meetings with the sound and microphone muted so you can use chat and hand raising in-person to create a more equitable experience for those joining virtually.
JavaScript
2
star
58

credit-card-set-asider

Monitors daily credit card activity & sets aside a percentage of it in your savings account, so it's there to pay your balance at the end of the month.
JavaScript
2
star
59

habitat-wp-cli

A habitat package for the WordPress CLI
Shell
1
star
60

whowon-choo

Real-time election results with back-end database (WIP)
JavaScript
1
star
61

timwis.github.io

Personal homepage
CSS
1
star
62

fork-test

Testing what happens to forks and PR functionality when the default branch is renamed upstream
1
star
63

jkan-website

Landing page for timwis/jkan
HTML
1
star
64

beacon-data-importer

Convert person data to a CSV format that can easily be imported to Beacon's database
Python
1
star
65

importui

TypeScript
1
star
66

cloudmine-datatables

Use dataTables.js to display, sort, and paginate CloudMine records, fetching only what's displayed
JavaScript
1
star
67

slugify-headers

A python script to get database_friendly_field_names for a CSV file
Python
1
star
68

property-react

JavaScript
1
star
69

dkan-to-csv

JavaScript
1
star
70

twilio-log-cleaner

Anonymizes twilio SMS logs for use as public sample data or test fixtures.
JavaScript
1
star
71

beacon-qa

Ruby
1
star
72

flic-google-meet

Mute/unmute Google Meet using a flic button
AppleScript
1
star
73

silly-batch-geocoder

Because it's just silly how difficult it is to batch geocode with google's API!
JavaScript
1
star
74

gatekeeper-jkan-demo

JavaScript
1
star
75

qrcard

Vue
1
star
76

react-boilerplate

Fork of timwis/es6-boilerplate for react apps. Just ES6/JSX/Webpack.
JavaScript
1
star
77

github-login-demo

Demonstrate logging in to github through JavaScript
HTML
1
star
78

property-vue

Vue
1
star
79

socrata-pusher

Push database tables to Socrata via DataSync
Python
1
star
80

timsgeocoder

Another modular geocoder
JavaScript
1
star
81

mediawiki-to-jekyll

Python
1
star
82

vizwit-builder

Layout builder tool for VizWit
JavaScript
1
star
83

geopicker

Sometimes the default geocode isn't good enough. This utility allows you to fine tune the latitude/longitude fields after your geocode independent of the address.
JavaScript
1
star