Skip to content

Instantly share code, notes, and snippets.

@logycon
Last active August 29, 2015 14:00
Show Gist options
  • Save logycon/11318596 to your computer and use it in GitHub Desktop.
Save logycon/11318596 to your computer and use it in GitHub Desktop.
Opportunity Map
<html>
<head>
<title>Attribute Ratings Map</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.5/d3.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>
<script src="word_wrap.js"></script>
<script src="opportunitymap.js"></script>
<style>
body {
font: 12px 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;
}
path {
stroke: steelblue;
stroke-width: 2;
fill: none;
}
.axis path, .axis line {
fill: none;
stroke: #ddd; /* change grid lines color here*/
shape-rendering: crispEdges;
}
.y .tick {
stroke: #ddd;
stroke-width: 0;
stroke-dasharray: 3;
}
.x .tick {
stroke: #ddd;
stroke-width: 0;
}
.axis .grid-line {
stroke: black;
shape-rendering: crispEdges;
stroke-opacity: .2;
}
.axis .grid-line-y {
stroke: black;
shape-rendering: crispEdges;
stroke-opacity: .2;
}
.axis .grid-line-x {
stroke: black;
shape-rendering: crispEdges;
}
.axis text {
font-size:10px;
}
.axis path,
.axis line {
fill: none;
stroke: grey;
stroke-width: 1;
shape-rendering: crispEdges;
}
.importance {
fill: white;
}
</style>
</head>
<body>
<div id="chart" style="width:100%; margin:auto;">
<div id="chartDiv" style=" width:850px; height:500px; min-height: 500px; min-width:750px;">
</div>
</div>
<a style="display:none;" id="download-png" style="cursor:hand; cursor:pointer;">download png</a>
<script type="text/javascript">
var data = [{ "id": "qh01_10", "text": "Lowest running costs (e.g., ink/toner, energy usage, etc.)", "ri": 140.53316889227151, "columns": [{ "caption": "BROTHER", "value": 3.69760900140647 }, { "caption": "CANON", "value": 3.7523584905660377 }, { "caption": "EPSON", "value": 3.6369969040247678 }, { "caption": "HP", "value": 3.8415730337078653 }, { "caption": "KONICA MINOLTA", "value": 3.5543478260869565 }, { "caption": "KYOCERA MITA", "value": 3.5884244372990355 }, { "caption": "LENOVO", "value": 3.7384615384615385 }, { "caption": "LEXMARK", "value": 3.4138755980861246 }, { "caption": "RICOH GROUP", "value": 3.6988636363636362 }, { "caption": "SAMSUNG", "value": 3.7617689015691869 }, { "caption": "SHARP", "value": 3.5878787878787879 }, { "caption": "TOSHIBA", "value": 3.7006802721088436 }, { "caption": "XEROX", "value": 3.6661698956780926 }, { "caption": "Professional/Specialty", "value": 3.5723140495867769 }, { "caption": "Neighborhood Shops", "value": 3.2915851272015657 }, { "caption": "Online Printing", "value": 3.6418918918918921 }] }, { "id": "qh01_11", "text": "Lowest price per page for printing", "ri": 139.40147789386285, "columns": [{ "caption": "BROTHER", "value": 3.6813353566009104 }, { "caption": "CANON", "value": 3.7437395659432386 }, { "caption": "EPSON", "value": 3.6686291000841043 }, { "caption": "HP", "value": 3.8198482932996209 }, { "caption": "KONICA MINOLTA", "value": 3.5793650793650795 }, { "caption": "KYOCERA MITA", "value": 3.5813253012048194 }, { "caption": "LENOVO", "value": 3.7177914110429446 }, { "caption": "LEXMARK", "value": 3.3787465940054497 }, { "caption": "RICOH GROUP", "value": 3.70392749244713 }, { "caption": "SAMSUNG", "value": 3.7786032689450222 }, { "caption": "SHARP", "value": 3.573248407643312 }, { "caption": "TOSHIBA", "value": 3.782258064516129 }, { "caption": "XEROX", "value": 3.6139767054908485 }, { "caption": "Professional/Specialty", "value": 3.4873294346978558 }, { "caption": "Neighborhood Shops", "value": 3.2924528301886791 }, { "caption": "Online Printing", "value": 3.5376106194690267 }] }, { "id": "qh01_4", "text": "Easy to set up and get started", "ri": 138.53575866602083, "columns": [{ "caption": "BROTHER", "value": 3.9550072568940493 }, { "caption": "CANON", "value": 4.24109173616376 }, { "caption": "EPSON", "value": 4.1036632891660174 }, { "caption": "HP", "value": 4.4260387811634345 }, { "caption": "KONICA MINOLTA", "value": 3.8197278911564627 }, { "caption": "KYOCERA MITA", "value": 3.8684210526315788 }, { "caption": "LENOVO", "value": 3.9655172413793105 }, { "caption": "LEXMARK", "value": 3.9047619047619047 }, { "caption": "RICOH GROUP", "value": 3.9488636363636362 }, { "caption": "SAMSUNG", "value": 4.0665778961384822 }, { "caption": "SHARP", "value": 3.9593023255813953 }, { "caption": "TOSHIBA", "value": 3.9015544041450778 }, { "caption": "XEROX", "value": 4.0832116788321171 }, { "caption": "Professional/Specialty", "value": 4.0061728395061724 }, { "caption": "Neighborhood Shops", "value": 3.6420664206642068 }, { "caption": "Online Printing", "value": 3.8294736842105261 }] }, { "id": "qh01_31", "text": "All of the things I need are in one device (can scan, copy, print, fax, etc. all in one)", "ri": 137.70326299038263, "columns": [{ "caption": "BROTHER", "value": 4.07095926412615 }, { "caption": "CANON", "value": 4.2735229759299784 }, { "caption": "EPSON", "value": 4.1032308904649328 }, { "caption": "HP", "value": 4.4133030130756108 }, { "caption": "KONICA MINOLTA", "value": 3.9137931034482758 }, { "caption": "KYOCERA MITA", "value": 3.9944598337950139 }, { "caption": "LENOVO", "value": 3.9097472924187726 }, { "caption": "LEXMARK", "value": 3.9611111111111112 }, { "caption": "RICOH GROUP", "value": 3.9861751152073732 }, { "caption": "SAMSUNG", "value": 4.1484771573604062 }, { "caption": "SHARP", "value": 4.0 }, { "caption": "TOSHIBA", "value": 3.9835390946502058 }, { "caption": "XEROX", "value": 4.1018131101813111 }, { "caption": "Professional/Specialty", "value": 4.0361663652802893 }, { "caption": "Neighborhood Shops", "value": 3.7934027777777777 }, { "caption": "Online Printing", "value": 3.755381604696673 }] }, { "id": "qh01_46", "text": "Designed and built to last for a long time", "ri": 134.76829585553176, "columns": [{ "caption": "BROTHER", "value": 3.9270833333333335 }, { "caption": "CANON", "value": 4.1054888507718692 }, { "caption": "EPSON", "value": 3.9044309296264119 }, { "caption": "HP", "value": 4.205408886027044 }, { "caption": "KONICA MINOLTA", "value": 3.8956834532374103 }, { "caption": "KYOCERA MITA", "value": 3.8193979933110369 }, { "caption": "LENOVO", "value": 3.9872611464968153 }, { "caption": "LEXMARK", "value": 3.6649214659685865 }, { "caption": "RICOH GROUP", "value": 3.9705882352941178 }, { "caption": "SAMSUNG", "value": 4.0276497695852536 }, { "caption": "SHARP", "value": 3.9808917197452227 }, { "caption": "TOSHIBA", "value": 4.1029411764705879 }, { "caption": "XEROX", "value": 4.1210287443267779 }, { "caption": "Professional/Specialty", "value": 3.9658792650918637 }, { "caption": "Neighborhood Shops", "value": 3.7268170426065161 }, { "caption": "Online Printing", "value": 3.8620689655172415 }] }, { "id": "qh01_9", "text": "Lowest initial price (e.g., the purchase price of the printer)", "ri": 127.9663052653428, "columns": [{ "caption": "BROTHER", "value": 3.8038869257950529 }, { "caption": "CANON", "value": 3.882136279926335 }, { "caption": "EPSON", "value": 3.856060606060606 }, { "caption": "HP", "value": 4.0357142857142856 }, { "caption": "KONICA MINOLTA", "value": 3.6294642857142856 }, { "caption": "KYOCERA MITA", "value": 3.6349809885931559 }, { "caption": "LENOVO", "value": 3.8074866310160429 }, { "caption": "LEXMARK", "value": 3.8128834355828221 }, { "caption": "RICOH GROUP", "value": 3.746031746031746 }, { "caption": "SAMSUNG", "value": 3.8166383701188455 }, { "caption": "SHARP", "value": 3.6556291390728477 }, { "caption": "TOSHIBA", "value": 3.6715328467153285 }, { "caption": "XEROX", "value": 3.62748643761302 }, { "caption": "Professional/Specialty", "value": 3.6454767726161368 }, { "caption": "Neighborhood Shops", "value": 3.4558139534883723 }, { "caption": "Online Printing", "value": 3.6045340050377832 }] }, { "id": "qh01_5", "text": "Intuitive and simple to use", "ri": 125.86570400608873, "columns": [{ "caption": "BROTHER", "value": 4.074702886247878 }, { "caption": "CANON", "value": 4.1910946196660479 }, { "caption": "EPSON", "value": 4.0969807868252515 }, { "caption": "HP", "value": 4.3798342541436464 }, { "caption": "KONICA MINOLTA", "value": 3.7321428571428572 }, { "caption": "KYOCERA MITA", "value": 3.7867647058823528 }, { "caption": "LENOVO", "value": 3.9737991266375547 }, { "caption": "LEXMARK", "value": 3.964630225080386 }, { "caption": "RICOH GROUP", "value": 3.858490566037736 }, { "caption": "SAMSUNG", "value": 4.057784911717496 }, { "caption": "SHARP", "value": 4.0362318840579707 }, { "caption": "TOSHIBA", "value": 3.894179894179894 }, { "caption": "XEROX", "value": 4.0504347826086953 }, { "caption": "Professional/Specialty", "value": 4.0440528634361232 }, { "caption": "Neighborhood Shops", "value": 3.6440677966101696 }, { "caption": "Online Printing", "value": 3.7560975609756095 }] }, { "id": "qh01_44", "text": "Reliable completion of print jobs without stopping (no jams, disconnections, errors) ", "ri": 125.80750778385118, "columns": [{ "caption": "BROTHER", "value": 3.9388111888111887 }, { "caption": "CANON", "value": 4.1471471471471473 }, { "caption": "EPSON", "value": 3.9441517386722866 }, { "caption": "HP", "value": 4.1949541284403669 }, { "caption": "KONICA MINOLTA", "value": 3.765625 }, { "caption": "KYOCERA MITA", "value": 3.8718861209964412 }, { "caption": "LENOVO", "value": 3.9417040358744395 }, { "caption": "LEXMARK", "value": 3.8305084745762712 }, { "caption": "RICOH GROUP", "value": 3.9390243902439024 }, { "caption": "SAMSUNG", "value": 4.0192982456140349 }, { "caption": "SHARP", "value": 4.0847457627118642 }, { "caption": "TOSHIBA", "value": 3.9404761904761907 }, { "caption": "XEROX", "value": 4.0557620817843869 }, { "caption": "Professional/Specialty", "value": 4.2367149758454108 }, { "caption": "Neighborhood Shops", "value": 3.8225806451612905 }, { "caption": "Online Printing", "value": 4.0 }] }, { "id": "qh01_1", "text": "The printed output looks exactly like what I expect (accurate color match, crisp black text, formatting )", "ri": 124.42000276759156, "columns": [{ "caption": "BROTHER", "value": 4.0378006872852232 }, { "caption": "CANON", "value": 4.3080524344569291 }, { "caption": "EPSON", "value": 4.1055179090029039 }, { "caption": "HP", "value": 4.4176939811457574 }, { "caption": "KONICA MINOLTA", "value": 3.945525291828794 }, { "caption": "KYOCERA MITA", "value": 3.8758620689655174 }, { "caption": "LENOVO", "value": 3.827027027027027 }, { "caption": "LEXMARK", "value": 3.8775510204081631 }, { "caption": "RICOH GROUP", "value": 3.98993288590604 }, { "caption": "SAMSUNG", "value": 4.1143317230273748 }, { "caption": "SHARP", "value": 4.08 }, { "caption": "TOSHIBA", "value": 3.9072847682119205 }, { "caption": "XEROX", "value": 4.2033333333333331 }, { "caption": "Professional/Specialty", "value": 4.182017543859649 }, { "caption": "Neighborhood Shops", "value": 3.6520833333333331 }, { "caption": "Online Printing", "value": 3.8701923076923075 }] }, { "id": "qh01_2", "text": "Seamlessly works with all of my devices (PCs, Laptops, Smartphone, tablets)", "ri": 117.23018404483497, "columns": [{ "caption": "BROTHER", "value": 3.9734345351043645 }, { "caption": "CANON", "value": 4.2334419109663406 }, { "caption": "EPSON", "value": 4.1025641025641022 }, { "caption": "HP", "value": 4.4048442906574392 }, { "caption": "KONICA MINOLTA", "value": 3.8484848484848486 }, { "caption": "KYOCERA MITA", "value": 3.8866666666666667 }, { "caption": "LENOVO", "value": 3.8966942148760331 }, { "caption": "LEXMARK", "value": 3.7699530516431925 }, { "caption": "RICOH GROUP", "value": 3.9621451104100944 }, { "caption": "SAMSUNG", "value": 4.1585760517799351 }, { "caption": "SHARP", "value": 4.08411214953271 }, { "caption": "TOSHIBA", "value": 3.890995260663507 }, { "caption": "XEROX", "value": 4.0838206627680309 }, { "caption": "Professional/Specialty", "value": 4.0 }, { "caption": "Neighborhood Shops", "value": 3.582441113490364 }, { "caption": "Online Printing", "value": 3.88641975308642 }] }, { "id": "qh01_41", "text": "Always ready when I need it, even after not having used it for a long period (settings not forgotten, ink/toner never dries up, etc.)", "ri": 115.63684702137962, "columns": [{ "caption": "BROTHER", "value": 3.9766355140186915 }, { "caption": "CANON", "value": 4.0820793433652529 }, { "caption": "EPSON", "value": 3.883008356545961 }, { "caption": "HP", "value": 4.0882647943831492 }, { "caption": "KONICA MINOLTA", "value": 3.921875 }, { "caption": "KYOCERA MITA", "value": 3.9815668202764978 }, { "caption": "LENOVO", "value": 3.9034482758620688 }, { "caption": "LEXMARK", "value": 3.9081632653061225 }, { "caption": "RICOH GROUP", "value": 3.91025641025641 }, { "caption": "SAMSUNG", "value": 3.9932584269662921 }, { "caption": "SHARP", "value": 4.0 }, { "caption": "TOSHIBA", "value": 3.9663865546218489 }, { "caption": "XEROX", "value": 3.98974358974359 }, { "caption": "Professional/Specialty", "value": 4.0 }, { "caption": "Neighborhood Shops", "value": 3.7675840978593271 }, { "caption": "Online Printing", "value": 3.986348122866894 }] }, { "id": "qh01_51", "text": "The ability to make copies of documents that I need", "ri": 113.80804815609214, "columns": [{ "caption": "BROTHER", "value": 4.1648351648351651 }, { "caption": "CANON", "value": 4.3236151603498545 }, { "caption": "EPSON", "value": 4.1617210682492578 }, { "caption": "HP", "value": 4.4322580645161294 }, { "caption": "KONICA MINOLTA", "value": 3.9395973154362416 }, { "caption": "KYOCERA MITA", "value": 4.0914285714285716 }, { "caption": "LENOVO", "value": 4.0298507462686564 }, { "caption": "LEXMARK", "value": 4.2 }, { "caption": "RICOH GROUP", "value": 4.0958083832335328 }, { "caption": "SAMSUNG", "value": 4.2549019607843137 }, { "caption": "SHARP", "value": 4.1941747572815533 }, { "caption": "TOSHIBA", "value": 4.0 }, { "caption": "XEROX", "value": 4.3675 }, { "caption": "Professional/Specialty", "value": 4.2390572390572387 }, { "caption": "Neighborhood Shops", "value": 4.0625 }, { "caption": "Online Printing", "value": 3.9583333333333335 }] }, { "id": "qh01_42", "text": "Professional quality photo printing", "ri": 112.36454715284023, "columns": [{ "caption": "BROTHER", "value": 4.0263157894736841 }, { "caption": "CANON", "value": 4.32334581772784 }, { "caption": "EPSON", "value": 4.1535532994923861 }, { "caption": "HP", "value": 4.2464065708418888 }, { "caption": "KONICA MINOLTA", "value": 4.0420560747663554 }, { "caption": "KYOCERA MITA", "value": 3.9613899613899615 }, { "caption": "LENOVO", "value": 3.9194630872483223 }, { "caption": "LEXMARK", "value": 3.82122905027933 }, { "caption": "RICOH GROUP", "value": 4.0114068441064639 }, { "caption": "SAMSUNG", "value": 4.1233140655105975 }, { "caption": "SHARP", "value": 3.902173913043478 }, { "caption": "TOSHIBA", "value": 4.04 }, { "caption": "XEROX", "value": 4.117924528301887 }, { "caption": "Professional/Specialty", "value": 4.2387706855791958 }, { "caption": "Neighborhood Shops", "value": 3.8481927710843373 }, { "caption": "Online Printing", "value": 4.02319587628866 }] }, { "id": "qh01_48", "text": "CON - Safe and environmentally friendly without sacrificing quality/SMB - Quiet and energy efficient", "ri": 111.84081782328929, "columns": [{ "caption": "BROTHER", "value": 3.9162679425837319 }, { "caption": "CANON", "value": 4.0307917888563054 }, { "caption": "EPSON", "value": 3.9582089552238804 }, { "caption": "HP", "value": 4.16331096196868 }, { "caption": "KONICA MINOLTA", "value": 3.9305555555555554 }, { "caption": "KYOCERA MITA", "value": 3.8132780082987554 }, { "caption": "LENOVO", "value": 4.042553191489362 }, { "caption": "LEXMARK", "value": 3.6783216783216783 }, { "caption": "RICOH GROUP", "value": 3.9006849315068495 }, { "caption": "SAMSUNG", "value": 4.0506607929515415 }, { "caption": "SHARP", "value": 3.9594594594594597 }, { "caption": "TOSHIBA", "value": 4.0235294117647058 }, { "caption": "XEROX", "value": 3.951841359773371 }, { "caption": "Professional/Specialty", "value": 3.9129213483146068 }, { "caption": "Neighborhood Shops", "value": 3.6270718232044197 }, { "caption": "Online Printing", "value": 3.9102167182662537 }] }, { "id": "qh01_37", "text": "Quick completion of print jobs for any type of content (photos, PDF files, business documents, etc.)", "ri": 111.3, "columns": [{ "caption": "BROTHER", "value": 3.988425925925926 }, { "caption": "CANON", "value": 4.1931506849315072 }, { "caption": "EPSON", "value": 4.0516499282639886 }, { "caption": "HP", "value": 4.2950819672131146 }, { "caption": "KONICA MINOLTA", "value": 3.9275362318840581 }, { "caption": "KYOCERA MITA", "value": 3.8931623931623931 }, { "caption": "LENOVO", "value": 3.9520958083832336 }, { "caption": "LEXMARK", "value": 3.8578680203045685 }, { "caption": "RICOH GROUP", "value": 3.9520295202952029 }, { "caption": "SAMSUNG", "value": 4.1108597285067869 }, { "caption": "SHARP", "value": 3.9746835443037973 }, { "caption": "TOSHIBA", "value": 3.9389312977099236 }, { "caption": "XEROX", "value": 4.072 }, { "caption": "Professional/Specialty", "value": 4.0621468926553677 }, { "caption": "Neighborhood Shops", "value": 3.736842105263158 }, { "caption": "Online Printing", "value": 3.8012232415902139 }] }, { "id": "qh01_21", "text": "The flexibility to print on any type of paper in any size that I need", "ri": 110.95294956064494, "columns": [{ "caption": "BROTHER", "value": 3.9209932279909707 }, { "caption": "CANON", "value": 4.1228533685601061 }, { "caption": "EPSON", "value": 3.99039780521262 }, { "caption": "HP", "value": 4.1984978540772531 }, { "caption": "KONICA MINOLTA", "value": 3.8672985781990521 }, { "caption": "KYOCERA MITA", "value": 3.856 }, { "caption": "LENOVO", "value": 3.9320987654320989 }, { "caption": "LEXMARK", "value": 3.8545454545454545 }, { "caption": "RICOH GROUP", "value": 3.935483870967742 }, { "caption": "SAMSUNG", "value": 4.0166666666666666 }, { "caption": "SHARP", "value": 3.8390804597701149 }, { "caption": "TOSHIBA", "value": 3.920863309352518 }, { "caption": "XEROX", "value": 4.0075949367088608 }, { "caption": "Professional/Specialty", "value": 4.1405405405405409 }, { "caption": "Neighborhood Shops", "value": 3.7025641025641027 }, { "caption": "Online Printing", "value": 3.8809523809523809 }] }, { "id": "qh01_24", "text": "Scanning features that meet my needs for quality, volume, and accuracy (legible, properly aligned, no missed pages)", "ri": 110.3402573860098, "columns": [{ "caption": "BROTHER", "value": 3.9978540772532187 }, { "caption": "CANON", "value": 4.2419146183699867 }, { "caption": "EPSON", "value": 4.10443864229765 }, { "caption": "HP", "value": 4.3828125 }, { "caption": "KONICA MINOLTA", "value": 3.9176954732510287 }, { "caption": "KYOCERA MITA", "value": 3.842911877394636 }, { "caption": "LENOVO", "value": 3.9323671497584542 }, { "caption": "LEXMARK", "value": 4.0662983425414367 }, { "caption": "RICOH GROUP", "value": 3.9793103448275864 }, { "caption": "SAMSUNG", "value": 4.1315280464216633 }, { "caption": "SHARP", "value": 4.096385542168675 }, { "caption": "TOSHIBA", "value": 4.0893854748603351 }, { "caption": "XEROX", "value": 4.1647331786542923 }, { "caption": "Professional/Specialty", "value": 4.1522842639593911 }, { "caption": "Neighborhood Shops", "value": 3.7468030690537084 }, { "caption": "Online Printing", "value": 3.9134078212290504 }] }, { "id": "qh01_43", "text": "The ability to print high quality documents that make me look professional and stand out", "ri": 109.16459835328308, "columns": [{ "caption": "BROTHER", "value": 4.0114503816793894 }, { "caption": "CANON", "value": 4.3379629629629628 }, { "caption": "EPSON", "value": 4.1143200962695552 }, { "caption": "HP", "value": 4.3907103825136611 }, { "caption": "KONICA MINOLTA", "value": 3.97972972972973 }, { "caption": "KYOCERA MITA", "value": 3.8989898989898988 }, { "caption": "LENOVO", "value": 3.9159663865546217 }, { "caption": "LEXMARK", "value": 4.0048543689320386 }, { "caption": "RICOH GROUP", "value": 4.0267062314540061 }, { "caption": "SAMSUNG", "value": 4.1366906474820144 }, { "caption": "SHARP", "value": 4.1061946902654869 }, { "caption": "TOSHIBA", "value": 3.9035532994923856 }, { "caption": "XEROX", "value": 4.1549893842887471 }, { "caption": "Professional/Specialty", "value": 4.20995670995671 }, { "caption": "Neighborhood Shops", "value": 3.73568281938326 }, { "caption": "Online Printing", "value": 3.9014423076923075 }] }, { "id": "qh01_39", "text": "Manufactured by a company with a proven track record of providing reliable products and solutions", "ri": 107.06689407043524, "columns": [{ "caption": "BROTHER", "value": 4.0902777777777777 }, { "caption": "CANON", "value": 4.3430379746835444 }, { "caption": "EPSON", "value": 4.17654986522911 }, { "caption": "HP", "value": 4.4932920536635708 }, { "caption": "KONICA MINOLTA", "value": 4.0 }, { "caption": "KYOCERA MITA", "value": 3.8906882591093117 }, { "caption": "LENOVO", "value": 4.0348837209302326 }, { "caption": "LEXMARK", "value": 4.0218579234972678 }, { "caption": "RICOH GROUP", "value": 4.0804597701149428 }, { "caption": "SAMSUNG", "value": 4.2480620155038764 }, { "caption": "SHARP", "value": 4.2650602409638552 }, { "caption": "TOSHIBA", "value": 4.1409395973154366 }, { "caption": "XEROX", "value": 4.2785714285714285 }, { "caption": "Professional/Specialty", "value": 4.0878787878787879 }, { "caption": "Neighborhood Shops", "value": 3.6955223880597017 }, { "caption": "Online Printing", "value": 3.90625 }] }, { "id": "qh01_47", "text": "Printed photos and documents that will last for a lifetime (will not fade, discolor, archive-ready, etc.)", "ri": 106.26171798242586, "columns": [{ "caption": "BROTHER", "value": 3.8968253968253967 }, { "caption": "CANON", "value": 4.1735294117647062 }, { "caption": "EPSON", "value": 3.9575757575757575 }, { "caption": "HP", "value": 4.147165259348613 }, { "caption": "KONICA MINOLTA", "value": 3.8333333333333335 }, { "caption": "KYOCERA MITA", "value": 3.8025210084033612 }, { "caption": "LENOVO", "value": 3.9252873563218391 }, { "caption": "LEXMARK", "value": 3.7692307692307692 }, { "caption": "RICOH GROUP", "value": 3.9019607843137254 }, { "caption": "SAMSUNG", "value": 4.0636363636363635 }, { "caption": "SHARP", "value": 3.9736842105263159 }, { "caption": "TOSHIBA", "value": 4.0069444444444446 }, { "caption": "XEROX", "value": 4.0909090909090908 }, { "caption": "Professional/Specialty", "value": 4.0534124629080122 }, { "caption": "Neighborhood Shops", "value": 3.702247191011236 }, { "caption": "Online Printing", "value": 3.9378698224852071 }] }, { "id": "qh01_16", "text": "Easy and fast repairs, if I need them (on-site repairs, convenient drop off locations, etc.)", "ri": 104.73666159274887, "columns": [{ "caption": "BROTHER", "value": 3.8918918918918921 }, { "caption": "CANON", "value": 4.0140105078809105 }, { "caption": "EPSON", "value": 3.8961748633879782 }, { "caption": "HP", "value": 4.1436031331592691 }, { "caption": "KONICA MINOLTA", "value": 3.7797619047619047 }, { "caption": "KYOCERA MITA", "value": 3.8418367346938775 }, { "caption": "LENOVO", "value": 3.9206349206349205 }, { "caption": "LEXMARK", "value": 3.6451612903225805 }, { "caption": "RICOH GROUP", "value": 3.9860465116279071 }, { "caption": "SAMSUNG", "value": 4.0481283422459891 }, { "caption": "SHARP", "value": 3.8125 }, { "caption": "TOSHIBA", "value": 3.8278688524590163 }, { "caption": "XEROX", "value": 3.9364548494983276 }, { "caption": "Professional/Specialty", "value": 3.9039145907473309 }, { "caption": "Neighborhood Shops", "value": 3.6713780918727914 }, { "caption": "Online Printing", "value": 3.837037037037037 }] }, { "id": "qh01_14", "text": "The ability to use ink/toner cartridges that are not from the printer manufacturer, including refilled ink/toner cartridges", "ri": 103.79279734311217, "columns": [{ "caption": "BROTHER", "value": 3.8246575342465752 }, { "caption": "CANON", "value": 3.9575856443719415 }, { "caption": "EPSON", "value": 3.8051529790660226 }, { "caption": "HP", "value": 3.9618696186961868 }, { "caption": "KONICA MINOLTA", "value": 3.7516339869281046 }, { "caption": "KYOCERA MITA", "value": 3.7391304347826089 }, { "caption": "LENOVO", "value": 3.8504672897196262 }, { "caption": "LEXMARK", "value": 3.4645161290322579 }, { "caption": "RICOH GROUP", "value": 3.8263157894736843 }, { "caption": "SAMSUNG", "value": 3.8514588859416445 }, { "caption": "SHARP", "value": 3.8823529411764706 }, { "caption": "TOSHIBA", "value": 3.8043478260869565 }, { "caption": "XEROX", "value": 3.7547770700636942 }, { "caption": "Professional/Specialty", "value": 3.8297872340425534 }, { "caption": "Neighborhood Shops", "value": 3.6147540983606556 }, { "caption": "Online Printing", "value": 3.7056277056277058 }] }, { "id": "qh01_35", "text": "The ability to print large volumes without needing to pay attention or constantly monitor (has high capacity cartridges and paper trays)", "ri": 103.59404275928873, "columns": [{ "caption": "BROTHER", "value": 3.9586563307493541 }, { "caption": "CANON", "value": 4.1059701492537313 }, { "caption": "EPSON", "value": 3.9272445820433437 }, { "caption": "HP", "value": 4.11318553092182 }, { "caption": "KONICA MINOLTA", "value": 3.9213483146067416 }, { "caption": "KYOCERA MITA", "value": 3.9218106995884772 }, { "caption": "LENOVO", "value": 3.9281045751633985 }, { "caption": "LEXMARK", "value": 3.8456375838926173 }, { "caption": "RICOH GROUP", "value": 4.0447154471544717 }, { "caption": "SAMSUNG", "value": 3.9976190476190476 }, { "caption": "SHARP", "value": 4.125 }, { "caption": "TOSHIBA", "value": 4.0151515151515156 }, { "caption": "XEROX", "value": 4.0909090909090908 }, { "caption": "Professional/Specialty", "value": 4.1273291925465836 }, { "caption": "Neighborhood Shops", "value": 3.852760736196319 }, { "caption": "Online Printing", "value": 4.042553191489362 }] }, { "id": "qh01_15", "text": "Dependable customer support and service available when I need it", "ri": 101.47400608870122, "columns": [{ "caption": "BROTHER", "value": 3.9440993788819876 }, { "caption": "CANON", "value": 4.1799242424242422 }, { "caption": "EPSON", "value": 4.0547169811320751 }, { "caption": "HP", "value": 4.3099730458221028 }, { "caption": "KONICA MINOLTA", "value": 3.9103448275862069 }, { "caption": "KYOCERA MITA", "value": 3.8870967741935485 }, { "caption": "LENOVO", "value": 4.0270270270270272 }, { "caption": "LEXMARK", "value": 3.8602941176470589 }, { "caption": "RICOH GROUP", "value": 3.9295774647887325 }, { "caption": "SAMSUNG", "value": 4.0670241286863273 }, { "caption": "SHARP", "value": 4.046875 }, { "caption": "TOSHIBA", "value": 4.03030303030303 }, { "caption": "XEROX", "value": 4.0888157894736841 }, { "caption": "Professional/Specialty", "value": 4.0574712643678161 }, { "caption": "Neighborhood Shops", "value": 3.7951388888888888 }, { "caption": "Online Printing", "value": 3.786290322580645 }] }, { "id": "qh01_17", "text": "Minimal downtime so I can always print if I need to (automatically reconnects itself, easy to self-diagnose and repair problems)", "ri": 99.256498996748007, "columns": [{ "caption": "BROTHER", "value": 3.9052924791086352 }, { "caption": "CANON", "value": 4.0375670840787121 }, { "caption": "EPSON", "value": 3.9442446043165469 }, { "caption": "HP", "value": 4.188933873144399 }, { "caption": "KONICA MINOLTA", "value": 3.8895027624309391 }, { "caption": "KYOCERA MITA", "value": 3.8082901554404147 }, { "caption": "LENOVO", "value": 3.8125 }, { "caption": "LEXMARK", "value": 3.7173913043478262 }, { "caption": "RICOH GROUP", "value": 3.883408071748879 }, { "caption": "SAMSUNG", "value": 3.997311827956989 }, { "caption": "SHARP", "value": 3.9272727272727272 }, { "caption": "TOSHIBA", "value": 3.8372093023255816 }, { "caption": "XEROX", "value": 3.9304635761589406 }, { "caption": "Professional/Specialty", "value": 4.0590405904059041 }, { "caption": "Neighborhood Shops", "value": 3.7545787545787546 }, { "caption": "Online Printing", "value": 3.856 }] }, { "id": "qh01_34", "text": "Has only the features that I need and will use", "ri": 96.572615373970791, "columns": [{ "caption": "BROTHER", "value": 3.9701986754966887 }, { "caption": "CANON", "value": 4.2043222003929275 }, { "caption": "EPSON", "value": 4.10042735042735 }, { "caption": "HP", "value": 4.2665662650602414 }, { "caption": "KONICA MINOLTA", "value": 3.9915254237288136 }, { "caption": "KYOCERA MITA", "value": 3.8867924528301887 }, { "caption": "LENOVO", "value": 4.0357142857142856 }, { "caption": "LEXMARK", "value": 3.8881118881118879 }, { "caption": "RICOH GROUP", "value": 3.9936708860759493 }, { "caption": "SAMSUNG", "value": 4.1197411003236244 }, { "caption": "SHARP", "value": 3.925925925925926 }, { "caption": "TOSHIBA", "value": 3.96 }, { "caption": "XEROX", "value": 3.9855072463768115 }, { "caption": "Professional/Specialty", "value": 3.97787610619469 }, { "caption": "Neighborhood Shops", "value": 3.7592592592592591 }, { "caption": "Online Printing", "value": 3.9487179487179489 }] }, { "id": "qh01_33", "text": "Designed to fit well into the place I want to put it in my home or office (flexible placement, stackable, is small enough to be moved around and put away, etc.)", "ri": 95.347451048225253, "columns": [{ "caption": "BROTHER", "value": 3.9054054054054053 }, { "caption": "CANON", "value": 4.1556503198294239 }, { "caption": "EPSON", "value": 3.9873417721518987 }, { "caption": "HP", "value": 4.2857142857142856 }, { "caption": "KONICA MINOLTA", "value": 3.8633093525179856 }, { "caption": "KYOCERA MITA", "value": 3.792134831460674 }, { "caption": "LENOVO", "value": 3.9743589743589744 }, { "caption": "LEXMARK", "value": 3.9090909090909092 }, { "caption": "RICOH GROUP", "value": 3.9095477386934672 }, { "caption": "SAMSUNG", "value": 4.0924092409240922 }, { "caption": "SHARP", "value": 4.03030303030303 }, { "caption": "TOSHIBA", "value": 4.0337078651685392 }, { "caption": "XEROX", "value": 3.9738805970149254 }, { "caption": "Professional/Specialty", "value": 3.8037383177570092 }, { "caption": "Neighborhood Shops", "value": 3.5887850467289719 }, { "caption": "Online Printing", "value": 3.9691629955947136 }] }, { "id": "qh01_8", "text": "CON - Optimization of print settings with the push of a button (use less paper and ink)/SMB - Central control of printers in my business (limit use of color, limit who can use and how much they print)", "ri": 94.910154293226284, "columns": [{ "caption": "BROTHER", "value": 3.9009900990099009 }, { "caption": "CANON", "value": 4.1765873015873014 }, { "caption": "EPSON", "value": 4.058943089430894 }, { "caption": "HP", "value": 4.2820121951219514 }, { "caption": "KONICA MINOLTA", "value": 3.8511904761904763 }, { "caption": "KYOCERA MITA", "value": 3.8469945355191255 }, { "caption": "LENOVO", "value": 4.0072463768115938 }, { "caption": "LEXMARK", "value": 3.991304347826087 }, { "caption": "RICOH GROUP", "value": 3.8454106280193239 }, { "caption": "SAMSUNG", "value": 3.985632183908046 }, { "caption": "SHARP", "value": 4.2586206896551726 }, { "caption": "TOSHIBA", "value": 3.9272727272727272 }, { "caption": "XEROX", "value": 4.1764705882352944 }, { "caption": "Professional/Specialty", "value": 3.996078431372549 }, { "caption": "Neighborhood Shops", "value": 3.6692015209125475 }, { "caption": "Online Printing", "value": 3.9224137931034484 }] }, { "id": "qh01_3", "text": "Direct printing from any mobile device (phone, tablet, etc.) with no extra steps", "ri": 94.699041721441887, "columns": [{ "caption": "BROTHER", "value": 3.9657320872274142 }, { "caption": "CANON", "value": 4.1675675675675672 }, { "caption": "EPSON", "value": 4.0914285714285716 }, { "caption": "HP", "value": 4.4109195402298846 }, { "caption": "KONICA MINOLTA", "value": 3.8633093525179856 }, { "caption": "KYOCERA MITA", "value": 3.8402061855670104 }, { "caption": "LENOVO", "value": 4.0970149253731343 }, { "caption": "LEXMARK", "value": 3.7966101694915255 }, { "caption": "RICOH GROUP", "value": 3.7767441860465114 }, { "caption": "SAMSUNG", "value": 4.1162790697674421 }, { "caption": "SHARP", "value": 3.9571428571428573 }, { "caption": "TOSHIBA", "value": 3.8739495798319328 }, { "caption": "XEROX", "value": 3.9765886287625416 }, { "caption": "Professional/Specialty", "value": 3.9855595667870034 }, { "caption": "Neighborhood Shops", "value": 3.6143344709897609 }, { "caption": "Online Printing", "value": 3.8936170212765959 }] }, { "id": "qh01_40", "text": "The peace of mind of an industry-leading warranty", "ri": 93.980041513872521, "columns": [{ "caption": "BROTHER", "value": 4.0493827160493829 }, { "caption": "CANON", "value": 4.1980769230769228 }, { "caption": "EPSON", "value": 4.1264367816091951 }, { "caption": "HP", "value": 4.343032159264931 }, { "caption": "KONICA MINOLTA", "value": 3.9352941176470586 }, { "caption": "KYOCERA MITA", "value": 3.935483870967742 }, { "caption": "LENOVO", "value": 4.0136986301369859 }, { "caption": "LEXMARK", "value": 4.0 }, { "caption": "RICOH GROUP", "value": 4.0081967213114753 }, { "caption": "SAMSUNG", "value": 4.1715039577836412 }, { "caption": "SHARP", "value": 4.08641975308642 }, { "caption": "TOSHIBA", "value": 3.9024390243902438 }, { "caption": "XEROX", "value": 4.1672473867595823 }, { "caption": "Professional/Specialty", "value": 4.0307167235494878 }, { "caption": "Neighborhood Shops", "value": 3.6642066420664205 }, { "caption": "Online Printing", "value": 3.8458781362007168 }] }, { "id": "qh01_38", "text": "The ability to save things I want to print in one spot so I can easily print them later", "ri": 92.736578565003811, "columns": [{ "caption": "BROTHER", "value": 3.958174904942966 }, { "caption": "CANON", "value": 4.1438053097345131 }, { "caption": "EPSON", "value": 4.0456521739130435 }, { "caption": "HP", "value": 4.2220183486238536 }, { "caption": "KONICA MINOLTA", "value": 4.0234375 }, { "caption": "KYOCERA MITA", "value": 3.8994413407821229 }, { "caption": "LENOVO", "value": 4.019047619047619 }, { "caption": "LEXMARK", "value": 3.847457627118644 }, { "caption": "RICOH GROUP", "value": 4.00561797752809 }, { "caption": "SAMSUNG", "value": 4.1100323624595472 }, { "caption": "SHARP", "value": 4.05 }, { "caption": "TOSHIBA", "value": 4.0319148936170217 }, { "caption": "XEROX", "value": 4.116935483870968 }, { "caption": "Professional/Specialty", "value": 3.9873949579831933 }, { "caption": "Neighborhood Shops", "value": 3.6420233463035019 }, { "caption": "Online Printing", "value": 3.9913793103448274 }] }, { "id": "qh01_29", "text": "The ability to print from my mobile devices anytime, no matter where I am", "ri": 92.54354459281808, "columns": [{ "caption": "BROTHER", "value": 3.9379084967320264 }, { "caption": "CANON", "value": 4.0748440748440746 }, { "caption": "EPSON", "value": 3.9497716894977168 }, { "caption": "HP", "value": 4.15979381443299 }, { "caption": "KONICA MINOLTA", "value": 3.9182389937106916 }, { "caption": "KYOCERA MITA", "value": 3.9481865284974091 }, { "caption": "LENOVO", "value": 3.9191176470588234 }, { "caption": "LEXMARK", "value": 3.8723404255319149 }, { "caption": "RICOH GROUP", "value": 3.9447236180904524 }, { "caption": "SAMSUNG", "value": 4.0306748466257671 }, { "caption": "SHARP", "value": 3.9655172413793105 }, { "caption": "TOSHIBA", "value": 3.9230769230769229 }, { "caption": "XEROX", "value": 3.9853479853479854 }, { "caption": "Professional/Specialty", "value": 4.0868055555555554 }, { "caption": "Neighborhood Shops", "value": 3.7490347490347489 }, { "caption": "Online Printing", "value": 3.8951310861423223 }] }, { "id": "qh01_53", "text": "Strong security and protection against intrusion from outside my home or office network", "ri": 91.053435272953749, "columns": [{ "caption": "BROTHER", "value": 4.019305019305019 }, { "caption": "CANON", "value": 4.1351981351981353 }, { "caption": "EPSON", "value": 4.0955882352941178 }, { "caption": "HP", "value": 4.2599620493358632 }, { "caption": "KONICA MINOLTA", "value": 3.971830985915493 }, { "caption": "KYOCERA MITA", "value": 3.968944099378882 }, { "caption": "LENOVO", "value": 4.0 }, { "caption": "LEXMARK", "value": 3.9885057471264367 }, { "caption": "RICOH GROUP", "value": 3.9456521739130435 }, { "caption": "SAMSUNG", "value": 4.0888157894736841 }, { "caption": "SHARP", "value": 3.8888888888888888 }, { "caption": "TOSHIBA", "value": 4.0 }, { "caption": "XEROX", "value": 4.1673819742489266 }, { "caption": "Professional/Specialty", "value": 3.8448275862068964 }, { "caption": "Neighborhood Shops", "value": 3.5041666666666669 }, { "caption": "Online Printing", "value": 3.7782608695652176 }] }, { "id": "qh01_23", "text": "The ability to easily use and modify content and photos I scanned or captured with my mobile device", "ri": 88.8954078737978, "columns": [{ "caption": "BROTHER", "value": 3.9644128113879002 }, { "caption": "CANON", "value": 4.2265795206971681 }, { "caption": "EPSON", "value": 4.0725623582766444 }, { "caption": "HP", "value": 4.2335115864527628 }, { "caption": "KONICA MINOLTA", "value": 3.971830985915493 }, { "caption": "KYOCERA MITA", "value": 3.9675675675675675 }, { "caption": "LENOVO", "value": 3.9487179487179489 }, { "caption": "LEXMARK", "value": 4.0412371134020617 }, { "caption": "RICOH GROUP", "value": 3.9748743718592965 }, { "caption": "SAMSUNG", "value": 4.1183431952662719 }, { "caption": "SHARP", "value": 3.9607843137254903 }, { "caption": "TOSHIBA", "value": 4.0384615384615383 }, { "caption": "XEROX", "value": 3.9927536231884058 }, { "caption": "Professional/Specialty", "value": 3.9958333333333331 }, { "caption": "Neighborhood Shops", "value": 3.7008196721311477 }, { "caption": "Online Printing", "value": 3.9795081967213113 }] }, { "id": "qh01_25", "text": "Scanning from the camera on my mobile phone", "ri": 87.687002006503789, "columns": [{ "caption": "BROTHER", "value": 3.928270042194093 }, { "caption": "CANON", "value": 4.0386473429951693 }, { "caption": "EPSON", "value": 3.9464285714285716 }, { "caption": "HP", "value": 4.1884920634920633 }, { "caption": "KONICA MINOLTA", "value": 3.8803418803418803 }, { "caption": "KYOCERA MITA", "value": 3.863905325443787 }, { "caption": "LENOVO", "value": 3.879032258064516 }, { "caption": "LEXMARK", "value": 3.7604166666666665 }, { "caption": "RICOH GROUP", "value": 3.9265536723163841 }, { "caption": "SAMSUNG", "value": 4.1488673139158578 }, { "caption": "SHARP", "value": 4.1276595744680851 }, { "caption": "TOSHIBA", "value": 3.9411764705882355 }, { "caption": "XEROX", "value": 4.0686695278969953 }, { "caption": "Professional/Specialty", "value": 3.930327868852459 }, { "caption": "Neighborhood Shops", "value": 3.7509433962264151 }, { "caption": "Online Printing", "value": 3.9066666666666667 }] }, { "id": "qh01_13", "text": "The ability to pay only for what I want to print at any given time", "ri": 87.349192555178831, "columns": [{ "caption": "BROTHER", "value": 3.9402390438247012 }, { "caption": "CANON", "value": 4.1100478468899517 }, { "caption": "EPSON", "value": 3.9834515366430261 }, { "caption": "HP", "value": 4.2417582417582418 }, { "caption": "KONICA MINOLTA", "value": 3.9487179487179489 }, { "caption": "KYOCERA MITA", "value": 3.9176470588235293 }, { "caption": "LENOVO", "value": 4.03921568627451 }, { "caption": "LEXMARK", "value": 3.8037383177570092 }, { "caption": "RICOH GROUP", "value": 3.8611111111111112 }, { "caption": "SAMSUNG", "value": 4.0912052117263844 }, { "caption": "SHARP", "value": 4.0161290322580649 }, { "caption": "TOSHIBA", "value": 3.7738095238095237 }, { "caption": "XEROX", "value": 4.0653061224489795 }, { "caption": "Professional/Specialty", "value": 3.9961389961389959 }, { "caption": "Neighborhood Shops", "value": 3.8117647058823527 }, { "caption": "Online Printing", "value": 4.01304347826087 }] }, { "id": "qh01_22", "text": "The ability to get my content onto other media, not just paper (stickers, t-shirts, etc.)", "ri": 85.696962568324892, "columns": [{ "caption": "BROTHER", "value": 3.894160583941606 }, { "caption": "CANON", "value": 4.0854503464203233 }, { "caption": "EPSON", "value": 3.9616368286445014 }, { "caption": "HP", "value": 4.0871369294605806 }, { "caption": "KONICA MINOLTA", "value": 3.8543046357615895 }, { "caption": "KYOCERA MITA", "value": 3.8556701030927836 }, { "caption": "LENOVO", "value": 3.9186991869918697 }, { "caption": "LEXMARK", "value": 3.8275862068965516 }, { "caption": "RICOH GROUP", "value": 3.9516129032258065 }, { "caption": "SAMSUNG", "value": 4.1071428571428568 }, { "caption": "SHARP", "value": 4.15 }, { "caption": "TOSHIBA", "value": 4.0084745762711869 }, { "caption": "XEROX", "value": 4.0836820083682008 }, { "caption": "Professional/Specialty", "value": 4.0072463768115938 }, { "caption": "Neighborhood Shops", "value": 3.7007874015748032 }, { "caption": "Online Printing", "value": 4.0038314176245207 }] }, { "id": "qh01_45", "text": "Designed to work well in extreme environments (e.g., excessive dust, humidity, heat, or cold)", "ri": 85.154604580363952, "columns": [{ "caption": "BROTHER", "value": 4.020161290322581 }, { "caption": "CANON", "value": 4.1139240506329111 }, { "caption": "EPSON", "value": 3.9624060150375939 }, { "caption": "HP", "value": 4.1890243902439028 }, { "caption": "KONICA MINOLTA", "value": 4.0 }, { "caption": "KYOCERA MITA", "value": 3.970414201183432 }, { "caption": "LENOVO", "value": 3.8640776699029127 }, { "caption": "LEXMARK", "value": 3.975609756097561 }, { "caption": "RICOH GROUP", "value": 3.9942528735632186 }, { "caption": "SAMSUNG", "value": 4.063380281690141 }, { "caption": "SHARP", "value": 4.134615384615385 }, { "caption": "TOSHIBA", "value": 3.8444444444444446 }, { "caption": "XEROX", "value": 3.9495798319327733 }, { "caption": "Professional/Specialty", "value": 3.9672897196261681 }, { "caption": "Neighborhood Shops", "value": 3.8341463414634145 }, { "caption": "Online Printing", "value": 4.0233644859813085 }] }, { "id": "qh01_36", "text": "Automatic organization of my output (e.g., sorting, stapling, etc.)", "ri": 84.53237805299932, "columns": [{ "caption": "BROTHER", "value": 3.8577405857740588 }, { "caption": "CANON", "value": 4.1308900523560208 }, { "caption": "EPSON", "value": 4.0136612021857925 }, { "caption": "HP", "value": 4.0932754880694144 }, { "caption": "KONICA MINOLTA", "value": 3.9172932330827068 }, { "caption": "KYOCERA MITA", "value": 3.8915662650602409 }, { "caption": "LENOVO", "value": 3.8804347826086958 }, { "caption": "LEXMARK", "value": 3.7682926829268291 }, { "caption": "RICOH GROUP", "value": 3.9100529100529102 }, { "caption": "SAMSUNG", "value": 4.014869888475836 }, { "caption": "SHARP", "value": 4.1707317073170733 }, { "caption": "TOSHIBA", "value": 3.8404255319148937 }, { "caption": "XEROX", "value": 4.0509259259259256 }, { "caption": "Professional/Specialty", "value": 4.0925925925925926 }, { "caption": "Neighborhood Shops", "value": 3.7248908296943233 }, { "caption": "Online Printing", "value": 3.9425837320574164 }] }, { "id": "qh01_49", "text": "Sensitive material I print is kept confidential (e.g., with a pin code that must be entered to retrieve documents)", "ri": 83.334056597246189, "columns": [{ "caption": "BROTHER", "value": 3.9004329004329006 }, { "caption": "CANON", "value": 4.06951871657754 }, { "caption": "EPSON", "value": 3.9679300291545188 }, { "caption": "HP", "value": 4.2078521939953815 }, { "caption": "KONICA MINOLTA", "value": 3.918032786885246 }, { "caption": "KYOCERA MITA", "value": 3.9337748344370862 }, { "caption": "LENOVO", "value": 3.9534883720930232 }, { "caption": "LEXMARK", "value": 3.8351648351648353 }, { "caption": "RICOH GROUP", "value": 3.9743589743589744 }, { "caption": "SAMSUNG", "value": 4.0078431372549019 }, { "caption": "SHARP", "value": 4.1428571428571432 }, { "caption": "TOSHIBA", "value": 3.986842105263158 }, { "caption": "XEROX", "value": 3.9744897959183674 }, { "caption": "Professional/Specialty", "value": 3.7488151658767772 }, { "caption": "Neighborhood Shops", "value": 3.4952830188679247 }, { "caption": "Online Printing", "value": 3.6666666666666665 }] }, { "id": "qh01_50", "text": "The ability to access, share, print, and collaborate on documents with others no matter where I am", "ri": 83.235559399432674, "columns": [{ "caption": "BROTHER", "value": 3.9757085020242915 }, { "caption": "CANON", "value": 4.1168478260869561 }, { "caption": "EPSON", "value": 4.013812154696133 }, { "caption": "HP", "value": 4.2336244541484715 }, { "caption": "KONICA MINOLTA", "value": 3.964028776978417 }, { "caption": "KYOCERA MITA", "value": 3.85 }, { "caption": "LENOVO", "value": 3.8214285714285716 }, { "caption": "LEXMARK", "value": 4.0561797752808992 }, { "caption": "RICOH GROUP", "value": 3.855614973262032 }, { "caption": "SAMSUNG", "value": 3.9890909090909092 }, { "caption": "SHARP", "value": 4.1132075471698117 }, { "caption": "TOSHIBA", "value": 3.8989898989898988 }, { "caption": "XEROX", "value": 4.0315315315315319 }, { "caption": "Professional/Specialty", "value": 3.9656652360515023 }, { "caption": "Neighborhood Shops", "value": 3.7983193277310923 }, { "caption": "Online Printing", "value": 4.0482456140350873 }] }, { "id": "qh01_19", "text": "Access to tools and resources to help me express myself (templates, forms, etc.)", "ri": 82.54897599114372, "columns": [{ "caption": "BROTHER", "value": 4.0245901639344259 }, { "caption": "CANON", "value": 4.2307692307692308 }, { "caption": "EPSON", "value": 4.057291666666667 }, { "caption": "HP", "value": 4.3227848101265822 }, { "caption": "KONICA MINOLTA", "value": 3.976 }, { "caption": "KYOCERA MITA", "value": 3.8484848484848486 }, { "caption": "LENOVO", "value": 3.9411764705882355 }, { "caption": "LEXMARK", "value": 4.03125 }, { "caption": "RICOH GROUP", "value": 3.8406593406593408 }, { "caption": "SAMSUNG", "value": 4.1263157894736846 }, { "caption": "SHARP", "value": 3.8039215686274508 }, { "caption": "TOSHIBA", "value": 4.01 }, { "caption": "XEROX", "value": 4.0215517241379306 }, { "caption": "Professional/Specialty", "value": 4.0389610389610393 }, { "caption": "Neighborhood Shops", "value": 3.6577777777777776 }, { "caption": "Online Printing", "value": 3.7880184331797233 }] }, { "id": "qh01_18", "text": "Dependable delivery of supplies directly to my home or office", "ri": 81.071151318065432, "columns": [{ "caption": "BROTHER", "value": 3.8831775700934581 }, { "caption": "CANON", "value": 4.1386430678466075 }, { "caption": "EPSON", "value": 4.02760736196319 }, { "caption": "HP", "value": 4.336363636363636 }, { "caption": "KONICA MINOLTA", "value": 3.7663551401869158 }, { "caption": "KYOCERA MITA", "value": 3.8243243243243241 }, { "caption": "LENOVO", "value": 3.9452054794520546 }, { "caption": "LEXMARK", "value": 4.086021505376344 }, { "caption": "RICOH GROUP", "value": 3.92258064516129 }, { "caption": "SAMSUNG", "value": 4.0158730158730158 }, { "caption": "SHARP", "value": 4.0169491525423728 }, { "caption": "TOSHIBA", "value": 3.8484848484848486 }, { "caption": "XEROX", "value": 4.0423280423280428 }, { "caption": "Professional/Specialty", "value": 3.9411764705882355 }, { "caption": "Neighborhood Shops", "value": 3.7403846153846154 }, { "caption": "Online Printing", "value": 3.88265306122449 }] }, { "id": "qh01_32", "text": "The most appealing design available (color, materials, shape, etc.)", "ri": 80.909470698124949, "columns": [{ "caption": "BROTHER", "value": 3.9875 }, { "caption": "CANON", "value": 4.28125 }, { "caption": "EPSON", "value": 4.0451977401129939 }, { "caption": "HP", "value": 4.2404255319148936 }, { "caption": "KONICA MINOLTA", "value": 3.9847328244274811 }, { "caption": "KYOCERA MITA", "value": 3.9273743016759775 }, { "caption": "LENOVO", "value": 3.9411764705882355 }, { "caption": "LEXMARK", "value": 3.8170731707317072 }, { "caption": "RICOH GROUP", "value": 4.0113636363636367 }, { "caption": "SAMSUNG", "value": 4.1734317343173428 }, { "caption": "SHARP", "value": 3.925925925925926 }, { "caption": "TOSHIBA", "value": 3.96875 }, { "caption": "XEROX", "value": 4.06140350877193 }, { "caption": "Professional/Specialty", "value": 4.0657894736842106 }, { "caption": "Neighborhood Shops", "value": 3.7333333333333334 }, { "caption": "Online Printing", "value": 3.9539170506912442 }] }, { "id": "qh01_20", "text": "CON - Printed content, tools and resources to support and enhance my child's education/SMB - The printer/print solution is part of a document management system (version control, searching, sorting, etc.)", "ri": 79.405646578564941, "columns": [{ "caption": "BROTHER", "value": 4.0259259259259261 }, { "caption": "CANON", "value": 4.2424242424242422 }, { "caption": "EPSON", "value": 4.0480769230769234 }, { "caption": "HP", "value": 4.362035225048924 }, { "caption": "KONICA MINOLTA", "value": 3.896551724137931 }, { "caption": "KYOCERA MITA", "value": 3.7643979057591621 }, { "caption": "LENOVO", "value": 4.0964912280701755 }, { "caption": "LEXMARK", "value": 3.9603960396039604 }, { "caption": "RICOH GROUP", "value": 3.8473684210526318 }, { "caption": "SAMSUNG", "value": 4.1432926829268295 }, { "caption": "SHARP", "value": 4.0746268656716422 }, { "caption": "TOSHIBA", "value": 4.0 }, { "caption": "XEROX", "value": 4.137096774193548 }, { "caption": "Professional/Specialty", "value": 3.9831223628691985 }, { "caption": "Neighborhood Shops", "value": 3.7625 }, { "caption": "Online Printing", "value": 3.903225806451613 }] }, { "id": "qh01_12", "text": "Consistent running costs over time with payment in regular installments (e.g., subscribing to a supplies replenishment service or leasing a device)", "ri": 78.7743990866948, "columns": [{ "caption": "BROTHER", "value": 3.9163179916317992 }, { "caption": "CANON", "value": 4.0894736842105264 }, { "caption": "EPSON", "value": 3.9643916913946589 }, { "caption": "HP", "value": 4.20995670995671 }, { "caption": "KONICA MINOLTA", "value": 3.80327868852459 }, { "caption": "KYOCERA MITA", "value": 3.8917197452229297 }, { "caption": "LENOVO", "value": 4.0370370370370372 }, { "caption": "LEXMARK", "value": 3.8017241379310347 }, { "caption": "RICOH GROUP", "value": 3.8963414634146343 }, { "caption": "SAMSUNG", "value": 4.104 }, { "caption": "SHARP", "value": 3.9365079365079363 }, { "caption": "TOSHIBA", "value": 3.9610389610389611 }, { "caption": "XEROX", "value": 3.9954337899543377 }, { "caption": "Professional/Specialty", "value": 3.9137931034482758 }, { "caption": "Neighborhood Shops", "value": 3.7932692307692308 }, { "caption": "Online Printing", "value": 3.8693467336683418 }] }, { "id": "qh01_6", "text": "Easy access to printing even if I don’t own a printer (e.g., print shop, pay per use, online)", "ri": 78.680412371133954, "columns": [{ "caption": "BROTHER", "value": 4.0315315315315319 }, { "caption": "CANON", "value": 4.2391304347826084 }, { "caption": "EPSON", "value": 4.0609418282548475 }, { "caption": "HP", "value": 4.4162895927601813 }, { "caption": "KONICA MINOLTA", "value": 3.9072164948453607 }, { "caption": "KYOCERA MITA", "value": 3.8289473684210527 }, { "caption": "LENOVO", "value": 3.9350649350649349 }, { "caption": "LEXMARK", "value": 3.9555555555555557 }, { "caption": "RICOH GROUP", "value": 3.9006622516556293 }, { "caption": "SAMSUNG", "value": 4.0944881889763778 }, { "caption": "SHARP", "value": 3.7450980392156863 }, { "caption": "TOSHIBA", "value": 3.7936507936507935 }, { "caption": "XEROX", "value": 4.1858407079646014 }, { "caption": "Professional/Specialty", "value": 3.9683257918552037 }, { "caption": "Neighborhood Shops", "value": 3.7709251101321586 }, { "caption": "Online Printing", "value": 3.9463414634146341 }] }, { "id": "qh01_30", "text": "The printer can be taken with me so I can print on the go", "ri": 77.504386632532984, "columns": [{ "caption": "BROTHER", "value": 3.7254901960784315 }, { "caption": "CANON", "value": 3.8911174785100289 }, { "caption": "EPSON", "value": 3.7976190476190474 }, { "caption": "HP", "value": 3.9162995594713657 }, { "caption": "KONICA MINOLTA", "value": 3.6904761904761907 }, { "caption": "KYOCERA MITA", "value": 3.664705882352941 }, { "caption": "LENOVO", "value": 3.8545454545454545 }, { "caption": "LEXMARK", "value": 3.4772727272727271 }, { "caption": "RICOH GROUP", "value": 3.7660818713450293 }, { "caption": "SAMSUNG", "value": 3.8888888888888888 }, { "caption": "SHARP", "value": 3.7555555555555555 }, { "caption": "TOSHIBA", "value": 3.68 }, { "caption": "XEROX", "value": 3.644144144144144 }, { "caption": "Professional/Specialty", "value": 3.7844036697247705 }, { "caption": "Neighborhood Shops", "value": 3.5023696682464456 }, { "caption": "Online Printing", "value": 3.7703349282296652 }] }, { "id": "qh01_28", "text": "CON - Exciting and fun sharing features on my printer (sharing what I print on social networks, sharing prints in the moment like a polaroid, etc.)/SMB - A trusted partner to manage printers for my business", "ri": 74.84378883276824, "columns": [{ "caption": "BROTHER", "value": 4.1182266009852215 }, { "caption": "CANON", "value": 4.2823529411764705 }, { "caption": "EPSON", "value": 4.1034482758620694 }, { "caption": "HP", "value": 4.4092009685230025 }, { "caption": "KONICA MINOLTA", "value": 3.9920634920634921 }, { "caption": "KYOCERA MITA", "value": 3.9733333333333332 }, { "caption": "LENOVO", "value": 4.1368421052631579 }, { "caption": "LEXMARK", "value": 3.8717948717948718 }, { "caption": "RICOH GROUP", "value": 3.9887640449438204 }, { "caption": "SAMSUNG", "value": 4.199170124481328 }, { "caption": "SHARP", "value": 4.25531914893617 }, { "caption": "TOSHIBA", "value": 4.0 }, { "caption": "XEROX", "value": 4.1893203883495147 }, { "caption": "Professional/Specialty", "value": 4.0926829268292684 }, { "caption": "Neighborhood Shops", "value": 3.7878787878787881 }, { "caption": "Online Printing", "value": 3.8768472906403941 }] }, { "id": "qh01_52", "text": "Works with “the Cloud” to help improve document management (e.g., scan to Cloud, access/print from Cloud)", "ri": 74.826223621393424, "columns": [{ "caption": "BROTHER", "value": 3.9547738693467336 }, { "caption": "CANON", "value": 4.125 }, { "caption": "EPSON", "value": 4.0807692307692305 }, { "caption": "HP", "value": 4.2857142857142856 }, { "caption": "KONICA MINOLTA", "value": 3.7339449541284404 }, { "caption": "KYOCERA MITA", "value": 3.7867647058823528 }, { "caption": "LENOVO", "value": 3.9642857142857144 }, { "caption": "LEXMARK", "value": 3.8125 }, { "caption": "RICOH GROUP", "value": 3.8775510204081631 }, { "caption": "SAMSUNG", "value": 4.21608040201005 }, { "caption": "SHARP", "value": 3.9210526315789473 }, { "caption": "TOSHIBA", "value": 4.070422535211268 }, { "caption": "XEROX", "value": 3.9691358024691357 }, { "caption": "Professional/Specialty", "value": 3.9560439560439562 }, { "caption": "Neighborhood Shops", "value": 3.7513812154696131 }, { "caption": "Online Printing", "value": 3.8846153846153846 }] }, { "id": "qh01_7", "text": "The ability to monitor use of printers in my home (who uses, how much they use, etc.)", "ri": 74.385993219400788, "columns": [{ "caption": "BROTHER", "value": 3.9752475247524752 }, { "caption": "CANON", "value": 4.131832797427653 }, { "caption": "EPSON", "value": 4.0369127516778525 }, { "caption": "HP", "value": 4.421836228287841 }, { "caption": "KONICA MINOLTA", "value": 3.8529411764705883 }, { "caption": "KYOCERA MITA", "value": 3.847826086956522 }, { "caption": "LENOVO", "value": 3.9848484848484849 }, { "caption": "LEXMARK", "value": 3.8823529411764706 }, { "caption": "RICOH GROUP", "value": 3.9720279720279721 }, { "caption": "SAMSUNG", "value": 4.2088888888888887 }, { "caption": "SHARP", "value": 3.9464285714285716 }, { "caption": "TOSHIBA", "value": 3.806451612903226 }, { "caption": "XEROX", "value": 4.0111111111111111 }, { "caption": "Professional/Specialty", "value": 3.9085714285714284 }, { "caption": "Neighborhood Shops", "value": 3.6647398843930636 }, { "caption": "Online Printing", "value": 3.7988826815642458 }] }, { "id": "qh01_27", "text": "Apps that are accessed from the printer display screen (coloring pages, crossword puzzles, meal planners, etc.)", "ri": 74.320389538504074, "columns": [{ "caption": "BROTHER", "value": 4.02 }, { "caption": "CANON", "value": 4.0650684931506849 }, { "caption": "EPSON", "value": 4.109154929577465 }, { "caption": "HP", "value": 4.2 }, { "caption": "KONICA MINOLTA", "value": 3.7416666666666667 }, { "caption": "KYOCERA MITA", "value": 3.8013698630136985 }, { "caption": "LENOVO", "value": 4.11340206185567 }, { "caption": "LEXMARK", "value": 3.6025641025641026 }, { "caption": "RICOH GROUP", "value": 3.8851351351351351 }, { "caption": "SAMSUNG", "value": 4.1033057851239674 }, { "caption": "SHARP", "value": 4.0 }, { "caption": "TOSHIBA", "value": 3.7619047619047619 }, { "caption": "XEROX", "value": 3.9722222222222223 }, { "caption": "Professional/Specialty", "value": 4.0869565217391308 }, { "caption": "Neighborhood Shops", "value": 3.7243243243243245 }, { "caption": "Online Printing", "value": 3.9846153846153847 }] }, { "id": "qh01_26", "text": "Linking printed things to online content (e.g., a QR code on a calendar/flyer that pulls up a video online)", "ri": 71.222935030789415, "columns": [{ "caption": "BROTHER", "value": 3.9705882352941178 }, { "caption": "CANON", "value": 4.1063122923588038 }, { "caption": "EPSON", "value": 4.0144404332129966 }, { "caption": "HP", "value": 4.2529761904761907 }, { "caption": "KONICA MINOLTA", "value": 4.0409836065573774 }, { "caption": "KYOCERA MITA", "value": 3.7777777777777777 }, { "caption": "LENOVO", "value": 3.9166666666666665 }, { "caption": "LEXMARK", "value": 3.6842105263157894 }, { "caption": "RICOH GROUP", "value": 3.8734177215189876 }, { "caption": "SAMSUNG", "value": 4.0343347639484977 }, { "caption": "SHARP", "value": 3.9714285714285715 }, { "caption": "TOSHIBA", "value": 4.0114942528735629 }, { "caption": "XEROX", "value": 3.953757225433526 }, { "caption": "Professional/Specialty", "value": 4.015625 }, { "caption": "Neighborhood Shops", "value": 3.7443181818181817 }, { "caption": "Online Printing", "value": 4.0611111111111109 }] }];
function loadBrandPerformance() {
$("#chartDiv").html("");
$("#chartLegend").html("");
var bpg = new BrandPerformanceGraph();
bpg.init("#chartDiv", data, { mode: "average" });
bpg.display(0, 10);
}
$(window).on("resize", function () {
//loadBrandPerformance();
//loadOpportunityMap();
});
//loadBrandPerformance();
function loadOpportunityMap() {
$("#chartDiv").html("");
var om = new OpportunityMap();
om.init("#chartDiv", data, {});
om.display();
}
loadOpportunityMap();
function downloadPNG() {
var svgHtml = d3.select("svg")
.attr("title", "test2")
.attr("version", 1.1)
.attr("xmlns", "http://www.w3.org/2000/svg")
.node().parentNode.innerHTML;
var encoded = unescape(encodeURIComponent(svgHtml));
d3.select("body").append("div")
.attr("id", "download")
.append("img")
.attr("src", "data:image/svg+xml;base64," + btoa(encoded));
d3.select("#download")
.on("click", function () {
if (event.button == 0) {
d3.select(this).transition()
.style("opacity", 0)
.remove();
}
})
.transition()
.duration(500)
.style("opacity", 1);
}
d3.select("#download-png").on("click", downloadPNG);
</script>
</body>
</html>
d3.selection.prototype.moveToFront = function () {
return this.each(function () {
this.parentNode.appendChild(this);
});
}
function OpportunityMap() {
var instance = {};
var parent_hash, data, options;
var height, width;
var svg, chartArea, chartBody, chartLegend;
var margin = { left: 10, top: 10, bottom: 10, right: 250 };
var maxImportance, minImportance;
var maxScore, minScore;
var colors, colors10, colors20;
var x, y, y2, y120;
var xAxis, yAxis, yAxis2, yAxis120;
var tooltip;
var legendDrawn = false;
var selectedBrand = -1, prevBrand = -1;
var selectedAttributeIndex = -1;
var tooltipSet = false;
var gradient;
/*
* initialize all variables
*/
instance.init = function (_parent_hash, _data, _options) {
parent_hash = _parent_hash;
data = _data;
options = _options;
var parent = $(parent_hash);
height = parent.height();
width = parent.width();
if (width < 300) width = 600;
if (height < 200) height = 400;
var numAttributes = data.length;
maxImportance = -9999999, minImportance = 9999999;
for (var i = 0; i < numAttributes; i++) {
var d = data[i];
var ri = d.ri;
if (ri > maxImportance) maxImportance = ri;
if (ri < minImportance) minImportance = ri;
}
maxImportance *= 1.10, minImportance *= 0.90;
maxScore = -999999, minScore = 999999;
avgScores = [];
allScores = [];
for (var ir = 0; ir < data.length; ir++) {
var avgScore = d3.mean(data[ir].columns, function (d) { return d.value; });
for (var ic = 0; ic < data[ir].columns.length; ic++) {
allScores.push(data[ir].columns[ic].value);
}
avgScores.push(avgScore);
/*
for (var ic = 0; ic < data[ir].columns.length; ic++) {
var colValue = +data[ir].columns[ic].value;
if (colValue != 0) {
if (colValue > maxScore) maxScore = colValue;
if (colValue < minScore) minScore = colValue;
}
}*/
}
minScore = d3.min(allScores) * 0.98;
maxScore = d3.max(allScores) * 1.02;
//console.log("importance = {" + minImportance + ", " + maxImportance + "}");
//console.log("score = {" + minScore + ", " + maxScore + "}");
y = d3.scale.log()
.domain([Math.exp(minScore), Math.exp(maxScore)])
.range([height - margin.top - margin.bottom - 35, 35]);
yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10);
y2 = d3.scale.log()
.domain([Math.exp(minScore), Math.exp(maxScore)])
.range([height - margin.top - margin.bottom - 35, 35]); // height of boxes
yAxis2 = d3.svg.axis()
.scale(y)
.orient("left")
.ticks(10);
x = d3.scale.linear()
.domain([minImportance, maxImportance])
.range([0, width - margin.left - margin.right]);
xAxis = d3.svg.axis().scale(x).orient("middle").ticks(20);
colors = d3.scale.linear().domain([minImportance, maxImportance * 1.05]).range(["red", "green"]);
colors10 = d3.scale.category10();
colors20 = d3.scale.category20();
instance.drawBase();
return instance;
}
/*
* Draw base shapes, axes, etc.
*/
instance.drawBase = function () {
svg = d3.select(parent_hash).append("svg")
.attr("height", height)
.attr("width", width)
.attr("preserveAspectRatio", "xMidYMid meet");
gradient = svg.append("svg:defs")
.append("svg:linearGradient")
.attr("id", "gradient")
.attr("x1", "0%")
.attr("y1", "0%")
.attr("x2", "0%")
.attr("y2", "100%")
.attr("spreadMethod", "pad");
gradient.append("svg:stop")
.attr("offset", "0%")
.attr("stop-color", "green")
.attr("stop-opacity", 1);
gradient.append("svg:stop")
.attr("offset", "50%")
.attr("stop-color", "yellow")
.attr("stop-opacity", 1);
gradient.append("svg:stop")
.attr("offset", "100%")
.attr("stop-color", "red")
.attr("stop-opacity", 1);
// main G
mainG = svg.append("g")
.classed("mainG", true)
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
var borderPath = mainG.append("rect")
.attr("x", 0)
.attr("y", 0)
.attr("height", height - margin.top - margin.bottom)
.attr("width", width - margin.right - margin.left)
.style("stroke", "#ccc")
.style("fill", "none")
.style("stroke-width", 1);
// append y axis
mainG.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + ((width - margin.left - margin.right) / 2) + ", 0)")
.call(yAxis.tickFormat(function (d) {
return "";
if (d == 0) return;
return d.toFixed(1);
}));
mainG.append("line")
.attr("x1", function () { return x(120); })
.attr("y1", function () { return y(Math.exp(minScore)); })
.attr("x2", function () { return x(120); })
.attr("y2", function () { return y(Math.exp(maxScore)); })
.style("stroke", "green")
.style("stroke-width", 2)
.style("stroke-dasharray", ("3, 3"))
.style("opacity", "0.2");
mainG.append("g")
.attr("class", "y2 axis")
.attr("transform", "translate(" + (width - margin.left - margin.right) + ", 0)")
.style({ "line-stroke": "red" })
.call(yAxis2.tickFormat(function (d) {
if (d == 0) return
return Math.log(d).toFixed(2);
}));
mainG.append("rect")
.attr("x", function () { return width - margin.right - 10; })
.attr("y", function () { return y(Math.exp(maxScore)); })
.attr("width", function () { return 5; })
.attr("height", function () { return y(Math.exp(minScore)) - y(Math.exp(maxScore)); })
.style("fill", "url(#gradient)")
.style("stroke-width", 2)
//.style("stroke-dasharray", ("3, 3"))
.style("opacity", "0.5");
// append x axis
mainG.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0, " + ((height - margin.top - margin.bottom) / 2) + ")")
.style({ "stroke-width": 0 })
.call(xAxis.tickFormat(function (d) {
return d.toFixed(0);
}));
// create drawing areas
chartArea = mainG.append("g")
.classed("chartArea", true)
.attr("transform", "translate(0,0)");
chartBody = chartArea.append("g")
.classed("chartBody", true)
.attr("transform", "translate(0,0)");
chartLegend = chartArea.append("g")
.classed("chartLegend", true)
.attr("transform", function () {
var x = width - margin.right - 10;
return "translate(" + x + ", 0)";
})
// ********************
// add mouseover events
d3.selectAll(".brandchart-tooltip").remove();
tooltip = d3.select("body")
.append("div")
.classed("brandchart-tooltip", true)
.classed("draggable", true)
.style("position", "absolute")
.style("z-index", "10")
.style("visibility", "hidden")
.style({
"font-family": "'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;",
"background-color": "gold",
"font-size": "10px",
"border": "1px solid #aaa",
"border-radius": "4px",
"padding": "11px",
"max-width": "350px",
"word-wrap": "break-word",
"cursor": "pointer",
"cursor": "hand"
});
instance.drawBoxes();
$(".draggable").draggable();
return instance;
}
/*
* Add descriptive boxes around the perimeter of the draw area
*/
instance.drawBoxes = function () {
// bottom left
var bottomLeft = mainG.append("g")
.attr("transform", function () {
return "translate(5, " + (height - 40) + ")"
});
bottomLeft.append("rect")
.attr("x", -5)
.attr("y", -15)
.attr("width", (width - margin.left - margin.right) / 2)
.attr("height", 35)
.attr("fill", "red")
.attr("opacity", 0.25);
bottomLeft.append("text")
.text("Market Development")
.style({ "font-size": "12px", "font-weight": "bold", "fill": "#333" });
bottomLeft.append("text")
.text("Less Important Attributes with Lower Ratings")
.attr("dy", 15)
.attr("width", (width - margin.left - margin.right - 20) / 2)
.attr("text-anchor", "left")
.style({ "text-align": "right", "font-size": "11px", "font-weight": "normal", "fill": "#555" });
// bottom Right
var bottomRight = mainG.append("g")
.attr("transform", function () {
return "translate(" + (width - (width + margin.right + margin.left - 10) / 2) + ", " + (height - 40) + ")"
});
bottomRight.append("rect")
.attr("x", -5)
.attr("y", -15)
.attr("width", (width - (width + margin.right + margin.left) / 2))
.attr("height", 35)
.attr("fill", "#01BB29")
.attr("opacity", 0.25);
bottomRight.append("text")
.text("Build Differentiation")
.attr("text-anchor", "right")
.attr("dx", function () {
var boxWidth = width - (width + margin.right + margin.left) / 2;
var textLength = this.getComputedTextLength();
var dx = boxWidth - this.getComputedTextLength() - 32;
return dx;
})
.style({ "font-size": "12px", "font-weight": "bold", "fill": "#333" });
bottomRight.append("text")
.text("More Important Attributes with Lower Ratings")
.attr("dy", 15)
.attr("dx", function () {
var boxWidth = width - (width + margin.right + margin.left) / 2;
var textLength = this.getComputedTextLength();
var dx = boxWidth - this.getComputedTextLength() + 8;
return dx;
})
.attr("text-anchor", "right")
.style({ "text-align": "right", "font-size": "11px", "font-weight": "normal", "fill": "#555" });
// topRight
var topRight = mainG.append("g")
.attr("transform", function () {
return "translate(" + (width - (width + margin.right + margin.left - 10) / 2) + ", " + (margin.top + 5) + ")"
});
topRight.append("rect")
.attr("x", -5)
.attr("y", -15)
.attr("width", (width - (width + margin.right + margin.left) / 2))
.attr("height", 35)
.attr("fill", "#69ABFD")
.attr("opacity", 0.25);
topRight.append("text")
.text("Immediate Transformation")
.attr("text-anchor", "right")
.attr("dx", function () {
var boxWidth = width - (width + margin.right + margin.left) / 2;
var textLength = this.getComputedTextLength();
var dx = boxWidth - this.getComputedTextLength() - 32;
return dx;
})
.style({ "font-size": "12px", "font-weight": "bold", "fill": "#333" });
topRight.append("text")
.text("More Important Attributes with Higher Ratings")
.attr("dy", 15)
.attr("dx", function () {
var boxWidth = width - (width + margin.right + margin.left) / 2;
var textLength = this.getComputedTextLength();
var dx = boxWidth - this.getComputedTextLength() + 8;
return dx;
})
.attr("text-anchor", "right")
.style({ "text-align": "right", "font-size": "11px", "font-weight": "normal", "fill": "#555" });
// topleft
var topLeft = mainG.append("g")
.attr("transform", function () {
return "translate(5, " + (margin.top + 5) + ")"
});
topLeft.append("rect")
.attr("x", -5)
.attr("y", -15)
.attr("width", (width - margin.left - margin.right) / 2)
.attr("height", 35)
.attr("fill", "yellow")
.attr("opacity", 0.25);
topLeft.append("text")
.text("Maintain Parity")
.style({ "font-size": "12px", "font-weight": "bold", "fill": "#333" });
topLeft.append("text")
.text("Less Important Attributes with Higher Ratings")
.attr("dy", 15)
.attr("width", (width - margin.left - margin.right - 20) / 2)
.attr("text-anchor", "left")
.style({ "text-align": "right", "font-size": "11px", "font-weight": "normal", "fill": "#555" });
}
instance.updateTooltip = function () {
// update tooltip
if (selectedAttributeIndex >= 0) {
var a = d3.select(".attribute-" + selectedAttributeIndex)
var title = a.attr("title");
var importance = a.attr("imp");
var avgScore = a.attr("avgScore");
var code = "<table style='font-size:10px;'>"
code += "<tr><td colspan='2' style='font-weight:bold; font-size:11px;'>" + title + "</td></tr>";
code += "<tr><td>Importance</td><td>" + parseFloat(importance).toFixed(0) + "</td></tr>";
var ratingTitle = "Overall Rating";
var rating = parseFloat(avgScore).toFixed(2);
if (selectedBrand >= 0) {
var brand = data[0].columns[selectedBrand];
//console.log(brand);
ratingTitle = data[0].columns[selectedBrand].caption + " Rating ";
rating = parseFloat(avgScore).toFixed(2);
}
code += "<tr><td>" + ratingTitle + "</td><td>" + rating + "</td></tr>";
code += "</table>";
tooltip.html(code);
}
else {
}
}
instance.getScaleColor = function (cur, min, max, colorArray) {
var scale = d3.scale.log().domain([min, max]);
scale.domain([0, .5, 1].map(scale.invert));
scale.range(colorArray);
var val = scale(cur);
return scale(cur);
}
instance.getCircleColor = function(circle, d) {
var thisScore = parseFloat(d3.select(circle).attr("avgScore")); // this brand's rating
var minScore = d3.min(d.columns, function (d) {
return d.value;
});
var maxScore = d3.max(d.columns, function (d) {
return d.value;
});
return instance.getScaleColor(thisScore, minScore, maxScore, ["red", "yellow", "green"])
}
// ***************
// initial display
instance.display = function () {
var numAttributes = data.length;
chartBody.selectAll("circle").remove();
// draw the attribute circles
chartBody.selectAll(".attribute")
.data(data)
.enter()
.append("circle")
.attr("class", function (d, i) {
return "attribute attribute-" + i;
})
.attr("attributeId", function (d) { return d.id; })
.attr("attributeIndex", function (d, i) { return i; })
.attr("title", function (d) { return d.text; })
.attr("imp", function (d) { return d.ri; })
.attr("avgScore", function (d) {
if (selectedBrand == -1) {
var avgScore = d3.mean(d.columns, function (d) {
return d.value;
});
return avgScore;
}
else {
var avgScore = d.columns[selectedBrand].value;
return avgScore;
}
})
.style({ "stroke": "#FFFF00", "stroke-width": 2 })
.style({ "cursor": "pointer", "cursor": "hand" })
.style("fill", function (d, i) {
//console.log(selectedBrand);
if (selectedBrand >= 0) {
return instance.getCircleColor(this, d);
}
else {
var attrIndex = d3.select(this).attr("attributeIndex");
if (attrIndex == selectedAttributeIndex) {
return "#0099FF";
}
else {
return "#777";
}
}
})
.attr("cx", function (d) { return x(d.ri); })
.attr("cy", function (d, i) {
if (prevBrand >= 0) {
var val = data[i].columns[prevBrand].value;
return y(Math.exp(val));
}
else {
var avgScore = d3.mean(d.columns, function (d) {
return d.value;
});
return (y(Math.exp(avgScore)));
}
})
.attr("r", function () {
var attrIndex = d3.select(this).attr("attributeIndex");
if (attrIndex == selectedAttributeIndex) {
return 15;
}
else {
return 10;
}
})
.transition()
.duration(700)
.ease("linear")
.attr("cy", function (d, i) {
var avgScore = parseFloat(d3.select(this).attr("avgScore"));
return (y(Math.exp(avgScore)));
})
.attr("opacity", 0.5)
.attr("r", function (d, i) {
if (selectedBrand >= 0) {
var baseSize = 10; // corresponds to average rating of OTHER brands
var thisScore = parseFloat(d3.select(this).attr("avgScore")); // this brand's rating
var sumScore = d3.sum(d.columns, function (d) {
return d.value;
});
var othersScore = sumScore - thisScore;
var othersCount = d.columns.length - 1;
var othersAverage = othersScore / othersCount;
// equation
// thisScore = x
// othersScore = othersAverafge
var ratio = thisScore / othersAverage;
var r = baseSize * ratio;
//console.log("r = " + r)
return r;
}
else {
var attrIndex = d3.select(this).attr("attributeIndex");
if (attrIndex == selectedAttributeIndex) {
return 15;
}
else {
return 10;
}
}
});
instance.updateTooltip();
d3.selectAll(".attribute")
.on("click", function () {
//if (selectedBrand >= 0) return;
var attr = d3.select(this);
var attributeIndex = parseInt(attr.attr("attributeIndex"));
if (attributeIndex == selectedAttributeIndex) {
// deselect
selectedAttributeIndex = -1;
tooltip.style("visibility", "hidden");
attr
.transition()
.duration(500)
.ease("linear")
.attr("opacity", function () {
if (selectedBrand >= 0)
return 0.5;
else return 0.3;
})
.attr("r", 10)
.style("fill", function (d, i) {
if (selectedBrand >= 0) {
return instance.getCircleColor(this, d);
}
else return "#333";
});
}
else {
if (selectedAttributeIndex >= 0) {
// deselect
selectedAttributeIndex = -1;
tooltip.style("visibility", "hidden");
d3.selectAll(".attribute")
.attr("opacity", function () {
if (selectedBrand >= 0)
return 0.5;
else return 0.3;
})
.attr("r", 10)
.style("fill", function (d, i) {
if (selectedBrand >= 0) {
return instance.getCircleColor(this, d);
}
else return "#333";
});
}
selectedAttributeIndex = attributeIndex;
if (!tooltipSet) {
tooltip.style("top", (event.pageY - 20) + "px").style("left", (event.pageX + 15) + "px");
}
tooltipSet = true;
tooltip.style("visibility", "visible");
instance.updateTooltip();
attr.moveToFront();
attr
.transition()
.duration(500)
.ease("linear")
.attr("opacity", 0.5)
.attr("r", 15)
.style("fill", function (d, i) {
if (selectedBrand >= 0) {
return instance.getCircleColor(this, d);
}
else return "#0099FF";
});
}
instance.drawLegend();
})
.on("mouseout", function () {
});
instance.drawLegend();
return instance;
}
//**************
// draw the legend
instance.drawLegend = function () {
chartLegend.selectAll("g").remove();
var g = chartLegend.append("g");
// legends
var firstAttribute = data[0];
var numBrands = firstAttribute.columns.length;
var legendBarX = 0;
var numColumns = firstAttribute.columns.length;
for (var c = 0; c < numColumns; c++) {
var col = firstAttribute.columns[c];
var avgRating = 0;
if (selectedAttributeIndex == -1) {
var avgRating = d3.mean(data, function (d, i) {
return d.columns[c].value;
})
}
else {
avgRating = data[selectedAttributeIndex].columns[c].value;
}
var brandIndex = c;
var brandClass = "brand-" + brandIndex;
var circle = g.append("circle")
.classed("brand", true)
.classed("legend", true)
.classed("brandCircle", true)
.classed(brandClass, true)
.attr("brandIndex", brandIndex)
.attr("is_selected", "y") // initially all are selected
.style({ "cursor": "hand", "cursor": "pointer" })
.attr("r", 4)
.attr("transform", function (d) {
return "translate(" + (legendBarX + 15) + "," + (y(Math.exp(avgRating))) + ")";
})
.attr("d", d3.svg.symbol().type("diamond"))
.style("fill", "white")
.style("stroke-width", "2")
.attr("opacity", function () {
if (selectedBrand == -1) return 1;
if (selectedBrand == brandIndex) return 1;
return 0.5;
})
.style("stroke", function () {
return colors20(numColumns - c - 1);
});
var lines = [];
var imp = g.append("text")
.classed("legend", true)
.classed("legend-" + brandClass, true)
.attr("brandIndex", brandIndex)
.attr("is_selected", "y") // initially all are selected
.attr("transform", function (d) {
return "translate(" + (legendBarX + 25) + "," + (y2(Math.exp(avgRating)) + 3) + ")";
})
.style("stroke-width", 1)
.style("fill", "#333")
.style({ "font-size": "12px", "z-index": "99999", "cursor": "hand", "cursor": "pointer" })
.style("text-anchor", "left")
.style("font-weight", function () {
if (selectedBrand == brandIndex) return "bold";
return "normal";
})
.attr("opacity", function () {
if (selectedBrand == -1) return 1;
if (selectedBrand == brandIndex) return 1;
return 0.5;
})
.text(function (d) {
return col.caption + " ( " + avgRating.toFixed(2) + " )";
});
}
legendDrawn = true;
// legend clicks
d3.selectAll(".legend")
.on("click", function () {
//if (selectedAttributeIndex >= 0) return;
var item = d3.select(this);
prevBrand = selectedBrand;
selectedBrand = item.attr("brandIndex");
d3.selectAll(".legend")
.attr("opacity", function () {
var itm = d3.select(this);
var bi = parseInt(itm.attr("brandIndex"));
if (bi == selectedBrand) {
return 1;
}
else {
return 0.1;
}
});
// deselecting
if (selectedBrand == prevBrand) {
selectedBrand = -1;
instance.display();
//tooltip.style("visibility", "hidden");
d3.selectAll(".legend")
.style({ "font-weight": "normal" })
.attr("opacity", 1);
}
else {
//tooltip.style("visibility", "hidden");
instance.drawSelectedBrand();
}
});
return instance;
}
instance.drawSelectedBrand = function () {
// hide stuff
chartBody.selectAll("g").remove();
// redraw stuff
instance.display();
}
return instance;
}
data:image/png;base64,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
//http://plnkr.co/edit/YBCAc3?p=preview
d3.util = d3.util || {};
d3.util.wrap = function (_wrapW, lines) {
return function (d, i) {
var that = this;
function tspanify() {
var lineH = this.node().getBBox().height;
this.text('')
.selectAll('tspan')
.data(lineArray)
.enter().append('tspan')
.attr({
x: 0,
y: function (d, i) { return (i + 1) * lineH; }
})
.text(function (d, i) { return d.join(' '); })
}
function checkW(_text) {
var textTmp = that
.style({ visibility: 'hidden' })
.text(_text);
var textW = textTmp.node().getBBox().width;
that.style({ visibility: 'visible' }).text(text);
return textW;
}
var text = this.text();
var parentNode = this.node().parentNode;
var textSplitted = text.split(' ');
var lineArray = [[]];
var count = 0;
textSplitted.forEach(function (d, i) {
if (checkW(lineArray[count].concat(d).join(' '), parentNode) >= _wrapW) {
count++;
lineArray[count] = [];
}
lineArray[count].push(d)
});
for (var i = 0; i < lineArray.length; i++) lines.push(lineArray[i]);
this.call(tspanify)
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment