top | item 9224776

Show HN: Textures.js, SVG Patterns for Data Visualization

404 points| ricsca | 11 years ago |riccardoscalco.github.io | reply

61 comments

order
[+] anoother|11 years ago|reply
This is lovely. When I see this, I don't think 'patterns', rather, 'hatches'.

Makes me wonder what the state of modern SVG is w.r.t. real-world units - something like this really makes SVG look useful for for technical drawing, but pixels are not the best unit to draw to...

[+] hardmath123|11 years ago|reply
Hmm, an Asymptote to SVG renderer would be pretty useful for displaying mathematical diagrams on the web.
[+] ttty|11 years ago|reply
I never like how they chain methods. A better way would be:

    texture({lines: true, heavier: true, stroke: 'red'})
Is easier to configure if you need reusable textures.
[+] mbostock|11 years ago|reply
Aren’t these textures already reusable? The constructed texture object (the result of textures.lines(), e.g.) can be called on as many selections as you like to reuse it.

I feel it’s a matter of taste, but one practical reason I prefer chaining to configuration objects is that you get a runtime error when you misspell a property, rather than it being silently ignored.

[+] bennstancil|11 years ago|reply
This is pretty cool. I made a really basic example, but in doing it, I could imagine playing around with having the colors or orientation change with the data as well. And it might make for cool transitions too. That obviously get way too complicated pretty quickly, but it'd be fun to see what you could come up with that might work.

https://modeanalytics.com/benn/reports/a4515d9b9024

[+] collyw|11 years ago|reply
Looks just like the old Mac before they got colour.
[+] marxidad|11 years ago|reply
Isn't this what Tufte refers to as "chartjunk"?
[+] jweir|11 years ago|reply
Tufte points out 1 + 1 is 3 or more visually. The two lines create two elements, then the space is another, then the space on either is potentially another.

http://csarven.ca/one-plus-one-equals-three-or-more

These textures are noisy. There can be occasions to use textures, but these examples would work just as well with shades of gray.

[+] ncza|11 years ago|reply
Tufte is not that omnipotent, did he even ever consider colorblindness? Hatches are awesome substitution for color.
[+] Hytosys|11 years ago|reply
Awesome for colorblind people! Looking forward to using this.
[+] jweir|11 years ago|reply
Shades of gray would work as well.

Also checkout http://colorbrewer2.org/

It has an option for creating color sets which are "colorblind safe."

[+] Fiahil|11 years ago|reply
Very good attention to details! (like the position of circle patterns on edges of shapes)

Have a star, you deserve it :)

[+] dylanrw|11 years ago|reply
Masterful use of contrast and texture. Data vis can stand to have more of this.
[+] matt4077|11 years ago|reply
Loving the retro look. But I'm not sure if patterns are as good as colors in communicating data. As soon as the data has even an ordinal scale, gradients or hues should work better.
[+] detaro|11 years ago|reply
Patterns are useful if it is intended to be printed (or for other b/w media). For good color prints or screen usage I agree, colors often can do a better job.
[+] kenbellows|11 years ago|reply
You are probably right if the data you're representing is scaled, but this sort of solution is fantastic for categorical data. Also, see other comments re: accessibility for colorblindness. Not necessarily a silver bullet, but possibly a solid solution in some circumstances.
[+] Normangorman|11 years ago|reply
Patterns are actually much better for colour-blind people like myself.
[+] ricsca|11 years ago|reply
Textures and colors can be combined, for example if you need to select according two different group of categories/variables.
[+] swah|11 years ago|reply
I wish we could have written the documentation for my current project in the browser instead of LaTeX.

But the need to produce good PDFs killed the idea.

[+] gearhart|11 years ago|reply
We've had good success with wkhtmltopdf

All of our invoices and reports are built for the web and then converted on the fly to pdfs and emailed out to clients who prefer them that way. You lose the interactivity, which is a shame for some d3 reports, and you have to be a little careful (design for page breaks, test it as if it's a slightly fickle browser that you have to support, ensure that everything is visible without requiring interaction) but it keeps all of your development within the same tool stack and gives you web versions of them all for free.

For reference, I ran it on the textures.js page and put the results here: https://drive.google.com/file/d/0B5BP6Na7GalZOXdWdlh6MElWTDQ...

It's pretty good.

[+] reverius42|11 years ago|reply
Check out GitBook. They build from Markdown/HTML and can produce interactive HTML and/or PDF.
[+] sairion|11 years ago|reply
It reminds me of Semiology of Graphics by Bertin. Nice work! I would like to work on React port, only if I have a spare time...
[+] OliverM|11 years ago|reply
This is lovely. I've hand-coded solutions before to show two variables by region simultaneously (e.g. voting patterns by socio-economic levels:http://imgur.com/ww1WV66). Colour and texture are nicely independent for showing this stuff.
[+] neumann|11 years ago|reply
very nice. One tangential question, the example svg maps are not created in the browser. How are these typically created?

When I make SVGs they are typically either plots made with a plotting tool, or paths created from tracing or done purely by hand.

[+] BaconJuice|11 years ago|reply
Thank you for sharing this! Can't wait to use this soon :)

Slightly off topic but maybe some SVG expert can help me out with a quick question! Is there a way to identify and automatically recognize all numbers in an image.svg file?

[+] ygra|11 years ago|reply
What kind of numbers? Those appearing alone in attributes, such as <rect width='10' height='5'/>? Those appearing in path or polygon data are more complicated, as the syntax allows whitespace, commas, etc. as separators, but they're not needed in some cases. E.g.

    M0-1.2.5-3
is perfectly valid (AFAIR, not sure about the decimal points now), but not really nice to parse or extract.

The main point would be what your use case is? If you just need to transform something, e.g. translate or scale a shape it's easier to put a group around it and apply a transform on that.

[+] mmf|11 years ago|reply
This library is fantastic. These patterns are essential in the production of print-ready and print-like contents.

With the high resolution screens available today these make for stunning graphical presentation.

[+] emehrkay|11 years ago|reply
Thanks for this. I need to learn SVG for something that I am working on now, this library looks like it has a great interface for me to learn from.
[+] pdknsk|11 years ago|reply
I just want to point out that many of the line textures can also be made with repeating-linear-gradient() from CSS, perhaps more efficiently so.
[+] jwiley|11 years ago|reply
This is lovely, congrats to the author
[+] jpatel3|11 years ago|reply
Wonderful! What are the best use case for using this patterns apart from geo graph representation?