---
title: Custom Data Visualizations Using D3 and React- Part 1
description: Learn about creating custom data visualizations using D3 and react, as well as the challenges this may present.
image: https://info.keylimeinteractive.com/hubfs/0.jpg
---

[![Key Lime Logo](https://info.keylimeinteractive.com/hs-fs/hubfs/Key%20Lime%20Logo.png?width=200&height=39&name=Key%20Lime%20Logo.png "Key Lime Logo")](https://keylimeinteractive.com/)

- SERVICES 
    - [All Services](https://keylimeinteractive.com/services)
    - [UX Strategy](https://keylimeinteractive.com/ux-strategy-design/)
    - [User Research](https://keylimeinteractive.com/user-research/)
    - [UX/UI Design](https://keylimeinteractive.com/ux-design-strategy/)
    - [EmTech Strategy](https://keylimeinteractive.com/emerging-technology/)
- OUR WORK 
    - [Our Approach](https://dev.keylimeinteractive.com/our-approach/)
    - [Enterprise Clients](https://keylimeinteractive.com/work/)
    - [Public Sector](https://keylimeinteractive.com/public-sector-gsa-schedule/)
- [ABOUT US](https://keylimeinteractive.com/about-us/) 
    - [Who We Are](https://keylimeinteractive.com/about-us/)
    - [People](https://keylimeinteractive.com/our-team/)
    - [Careers](https://workforcenow.adp.com/mascsr/default/mdf/recruitment/recruitment.html?cid=1eb079d3-bb50-438a-a731-eaa18a982193&ccId=19000101_000001&lang=en_US)
- INSIGHTS 
    - [CX Blog](https://info.keylimeinteractive.com)
    - [Events](https://keylimeinteractive.com/upcoming-events/)
    - [Competitive Indexes](https://keylimeinteractive.com/reports/#rankings)
    - [White Papers](https://keylimeinteractive.com/reports/)
- [CONTACT US](https://keylimeinteractive.com/contact/)

[![](https://keylimeinteractive.com/wp-content/uploads/2024/02/key-lime-interactive.svg)](https://info.keylimeinteractive.com/)

- [What We Do](https://keylimeinteractive.com/ux-research-services/) 
    - [Proven Process](https://keylimeinteractive.com/proven-process/)
- [About Us](https://keylimeinteractive.com/about-us/) 
    - [Meet Our Team](https://keylimeinteractive.com/our-team/)
    - [Careers](https://keylimeinteractive.com/careers/)
    - [News](https://keylimeinteractive.com/news/)
- [Blog](https://info.keylimeinteractive.com/)
- Resources 
    - [Case Studies](https://keylimeinteractive.com/case-studies/)
    - [Events](https://info.keylimeinteractive.com/events)

- [What We Do](https://keylimeinteractive.com/ux-research-services/) 
    - [Proven Process](https://keylimeinteractive.com/proven-process/)
- [About Us](https://keylimeinteractive.com/about-us/) 
    - [Meet Our Team](https://keylimeinteractive.com/our-team/)
    - [Careers](https://keylimeinteractive.com/careers/)
    - [News](https://keylimeinteractive.com/news/)
- [Blog](https://info.keylimeinteractive.com/)
- Resources 
    - [Case Studies](https://keylimeinteractive.com/case-studies/)
    - [Events](https://info.keylimeinteractive.com/events)

[Contact us](https://info.keylimeinteractive.com/contact)

[![](https://keylimeinteractive.com/wp-content/uploads/2024/02/key-lime-interactive.svg)](https://info.keylimeinteractive.com/)

- [What We Do](https://keylimeinteractive.com/ux-research-services/) 
    - [Proven Process](https://keylimeinteractive.com/proven-process/)
- [About Us](https://keylimeinteractive.com/about-us/) 
    - [Meet Our Team](https://keylimeinteractive.com/our-team/)
    - [Careers](https://keylimeinteractive.com/careers/)
    - [News](https://keylimeinteractive.com/news/)
- [Blog](https://info.keylimeinteractive.com/)
- Resources 
    - [Case Studies](https://keylimeinteractive.com/case-studies/)
    - [Events](https://info.keylimeinteractive.com/events)

- [What We Do](https://keylimeinteractive.com/ux-research-services/) 
    - [Proven Process](https://keylimeinteractive.com/proven-process/)
- [About Us](https://keylimeinteractive.com/about-us/) 
    - [Meet Our Team](https://keylimeinteractive.com/our-team/)
    - [Careers](https://keylimeinteractive.com/careers/)
    - [News](https://keylimeinteractive.com/news/)
- [Blog](https://info.keylimeinteractive.com/)
- Resources 
    - [Case Studies](https://keylimeinteractive.com/case-studies/)
    - [Events](https://info.keylimeinteractive.com/events)

[Contact us](https://info.keylimeinteractive.com/contact)

- <https://twitter.com/intent/tweet?url={url}&text={title}>
- <https://www.linkedin.com/shareArticle?mini=true&url={url}&title={title}>
- <https://www.facebook.com/sharer.php?u={url}>

# Custom Data Visualizations Using D3 and React- Part 1

[By Key Lime Interactive](https://info.keylimeinteractive.com/author/key-lime-interactive)

 February 21, 2020

- [Tweet](https://twitter.com/share)

![](https://info.keylimeinteractive.com/hubfs/0.jpg)

       Anyone who’s spoken with me in the last six months has found out that D3.js is my new favorite obsession. I recently got the opportunity to use D3.js to create a customized data visualization for the current client. This client handles large, complicated, and unique data sets. Therefore, there are many occasions where standard data visualizations won’t suffice. There were several unique challenges when creating this data visualization.

## **Challenge #1: React + D3.js**

      The first challenge is that the client is using React. React and D3 both want to manipulate the DOM, so there have to be very clear boundaries on when React stops and D3 takes over. For instance, if you wrap a \<rect\> for a  bar chart with a \<Tooltip\>, both React and D3 want to control it and it ends up crashing the site once the mouse enters the \<rect\>.

      The React portion creates the main SVG, then maps the data to create the rectangles, lines, icon groups, or whatever else your data visualization needs. D3 can create all of the rectangle elements, but with the challenge of multiple data values as presented below, D3 would have to map through the array multiple times. That’s not a problem if you have a small data set, but when you have large data sets, multiple passes through the data array can cause a lag. Place the following code in the return statement in React:

`<svg ref={svgRef}>   {data.map((d, index) => (     <>        <line key={d.line} />       <g class=”icons” key={d.icon}></g>     </>   ))} </svg>```

      This creates the main SVG, along with empty elements for the line and icons. The rest of the magic is done using D3. This particular data visualization has filters that change the parameters of the data. In order for the visualization to change when the filters change, and without refreshing the page, D3 needs to be called with the React hook useEffect(). This hook replaces both componentDidMount() and componentDidUpdate(). Call this hook inside the function, before the return statement.

`useEffect(() => {    draw(); }, [props.data]);`

      All of the D3 happens inside the draw const. This keeps D3 and React in their separate corners, not fighting with each other to control the DOM. With each d3.select function, it’s important to first select svgRef.current. This will only select the most current data selection if you have filters on your timeline that change the data. When selecting an element using D3, you start with the outer element, then you can keep selecting until you get the inner element you want to add to. You can then add classes, attributes, etc, using the format of the example below. In this example, x1, y1 are the starting point for the line, x2, y2 are the ending points for the line. I’m using a simple conditional statement to check if the data item is the last item in the data array. This will prevent the x2 and y2 values from being null, which will return an unknown error. The xScale and yScale references will be covered in detail in a later blog post.

`const draw = () => {   d3.select(svgRef.current)     .select(“line”)     .data(data)     .attr(“x1”, (d, index) => index < data.length – 1 ? xScale(data[index].date): “0”)     .attr(“y1”, (d, index) => index < data.lenth – 1 ? yScale(data[index].line)     .attr(“x2”, (d, index) => index < data.length – 1 ? xScale(data[index + 1].date): “0”)     .attr(“y2”, (d, index) => index < data.lenth – 1 ? yScale(data[index + 1].line)     .attr(“stroke-width”, “2”)     .style(“stroke”, “blue”) }`

````

      The code given here will give you a simple line graph, with D3 handling all of the drawing, and React providing a container for the D3 drawing. Subsequent blog articles will cover transitions (animations), working with more complicated data sets, handling icons, and x and y scales.

 

**READ MORE: **[The Fundamental Differences of GraphQL and REST API's](https://info.keylimeinteractive.com/the-fundamental-differences-between-graphql-and-rest-apis), [Smart Technology in Our Daily Lives](https://info.keylimeinteractive.com/smart-technology-in-our-daily-lives), [Creating a Custom Material UI Theme Part 1: Customizing a Color Scheme](https://info.keylimeinteractive.com/creating-a-custom-material-ui-theme), [UX Measures and Methods to Evaluate Video Game Interfaces](https://info.keylimeinteractive.com/ux-measures-and-methods-to-evaluate-video-game-interfaces)

###### More by this Author

[Key Lime Interactive](https://info.keylimeinteractive.com/author/key-lime-interactive)

#### Comments

[Add Comment](https://info.keylimeinteractive.com/custom-data-visualizations-using-d3-and-react-part-1#comment-form)

ABOUT KLI

[Key Lime Interactive](https://keylimeinteractive.com/about-us)is a user experience research and service design agency, with a sweet spot for emerging technology. As UX experts, our goal is to make your life easier, optimize user experiences, and make the world a better place.

- [Recent](https://info.keylimeinteractive.com/custom-data-visualizations-using-d3-and-react-part-1#tabs-0)
- [Popular](https://info.keylimeinteractive.com/custom-data-visualizations-using-d3-and-react-part-1#tabs-1)

![Upsell with Purpose: Fueling SaaS Growth Through User Insight](https://info.keylimeinteractive.com/hubfs/Multiethnic%20group%20of%20young%20people%20sitting%20in%20conference%20room%20and%20brainstorming%20on%20business%20meeting.jpeg)

[Upsell with Purpose: Fueling SaaS Growth Through User Insight](https://info.keylimeinteractive.com/upselling-in-a-saas-environment-with-a-user-centric-approach)

Aug 22, 2024

![5 Ways to Get the Most Out of Working with a UX Research Consultant](https://info.keylimeinteractive.com/hubfs/Attractive%20businessman%20speaking%20with%20fellow%20coworkers.jpeg)

[5 Ways to Get the Most Out of Working with a UX Research Consultant](https://info.keylimeinteractive.com/5-ways-to-get-the-most-out-of-working-with-a-ux-research-consultant)

Aug 22, 2024

![Designing Engagement Through Micro-Interactions](https://info.keylimeinteractive.com/hubfs/AI-Generated%20Media/Images/A%20closeup%20shot%20of%20a%20finger%20gently%20tapping%20a%20digital%20button%20on%20a%20sleek%2c%20modern%20interface.jpeg)

[Designing Engagement Through Micro-Interactions](https://info.keylimeinteractive.com/the-significance-of-micro-interactions-in-shaping-user-engagement-and-experience)

Aug 22, 2024

![What is the Keystroke-Level Model?](https://info.keylimeinteractive.com/hubfs/Keystroke.jpg)

[What is the Keystroke-Level Model?](https://info.keylimeinteractive.com/what-is-the-keystroke-level-model)

Aug 22, 2024

![Current-State vs. Future-State Journey Mapping](https://info.keylimeinteractive.com/hubfs/destination-2386255_1280.jpg)

[Current-State vs. Future-State Journey Mapping](https://info.keylimeinteractive.com/current-state-vs.-future-state-journey-mapping)

Aug 22, 2024

![A History of Voice Technology](https://info.keylimeinteractive.com/hubfs/Screen%20Shot%202020-08-11%20at%2012.18.34%20PM.png)

[A History of Voice Technology](https://info.keylimeinteractive.com/history-of-voice-technology)

Aug 22, 2024

Create a UX Strategy

[![key-lime-interactive-ux](https://info.keylimeinteractive.com/hs-fs/hubfs/key-lime-interactive-ux.png?width=635&height=634&name=key-lime-interactive-ux.png)](https://keylimeinteractive.com/ux-strategy-design)

### Post By Topics

- [Research Methods](https://info.keylimeinteractive.com/topic/research-methods)
- [UX Strategy](https://info.keylimeinteractive.com/topic/ux-strategy)
- [Events & News](https://info.keylimeinteractive.com/topic/events-news)
- [UX Research](https://info.keylimeinteractive.com/topic/ux-research)
- [User Experience](https://info.keylimeinteractive.com/topic/user-experience)
- [User Interface](https://info.keylimeinteractive.com/topic/user-interface)
- [UX](https://info.keylimeinteractive.com/topic/ux)
- [News](https://info.keylimeinteractive.com/topic/news)
- [Mobile UX](https://info.keylimeinteractive.com/topic/mobile-ux)
- [Usability Testing](https://info.keylimeinteractive.com/topic/usability-testing)
- [Competitive Research](https://info.keylimeinteractive.com/topic/competitive-research)
- [UX Design](https://info.keylimeinteractive.com/topic/ux-design)
- [Eye tracking & Biometrics](https://info.keylimeinteractive.com/topic/eye-tracking-biometrics)
- [Qualitative Research](https://info.keylimeinteractive.com/topic/qualitative-research)
- [Customer Experience](https://info.keylimeinteractive.com/topic/customer-experience)
- [Journey Mapping](https://info.keylimeinteractive.com/topic/journey-mapping)
- [DEI](https://info.keylimeinteractive.com/topic/dei)
- [Remote Testing](https://info.keylimeinteractive.com/topic/remote-testing)
- [User Experience Consultant](https://info.keylimeinteractive.com/topic/user-experience-consultant)
- [VR](https://info.keylimeinteractive.com/topic/vr)
- [XR](https://info.keylimeinteractive.com/topic/xr)
- [Multicultural UX](https://info.keylimeinteractive.com/topic/multicultural-ux)
- [Mobile Banking](https://info.keylimeinteractive.com/topic/mobile-banking)
- [Quantitative Research](https://info.keylimeinteractive.com/topic/quantitative-research)
- [App Development](https://info.keylimeinteractive.com/topic/app-development)
- [User Experience Research Studies](https://info.keylimeinteractive.com/topic/user-experience-research-studies)
- [Diversity Equity Inclusion](https://info.keylimeinteractive.com/topic/diversity-equity-inclusion)
- [UI](https://info.keylimeinteractive.com/topic/ui)
- [Voice Technology](https://info.keylimeinteractive.com/topic/voice-technology)
- [Accessibility](https://info.keylimeinteractive.com/topic/accessibility)
- [Behavioral Personas](https://info.keylimeinteractive.com/topic/behavioral-personas)
- [Diary Study & Ethnography](https://info.keylimeinteractive.com/topic/diary-study-ethnography)
- [Global Research](https://info.keylimeinteractive.com/topic/global-research)
- [Inclusivity Index](https://info.keylimeinteractive.com/topic/inclusivity-index)
- [User Testing](https://info.keylimeinteractive.com/topic/user-testing)
- [Card Sort & Tree Test](https://info.keylimeinteractive.com/topic/card-sort-tree-test)
- [Human-first Approach](https://info.keylimeinteractive.com/topic/human-first-approach)
- [Personalization](https://info.keylimeinteractive.com/topic/personalization)
- [CX](https://info.keylimeinteractive.com/topic/cx)
- [Diary Study](https://info.keylimeinteractive.com/topic/diary-study)
- [In-Depth Interviews](https://info.keylimeinteractive.com/topic/in-depth-interviews)
- [Inclusivity](https://info.keylimeinteractive.com/topic/inclusivity)
- [A/B Testing](https://info.keylimeinteractive.com/topic/a-b-testing)
- [CX Research](https://info.keylimeinteractive.com/topic/cx-research)
- [IDIs](https://info.keylimeinteractive.com/topic/idis)
- [Bias](https://info.keylimeinteractive.com/topic/bias)
- [Personas](https://info.keylimeinteractive.com/topic/personas)
- [Research Participant Recruitment](https://info.keylimeinteractive.com/topic/research-participant-recruitment)
- [Usability](https://info.keylimeinteractive.com/topic/usability)
- [Women in UX](https://info.keylimeinteractive.com/topic/women-in-ux)
- [Workshops](https://info.keylimeinteractive.com/topic/workshops)
- [Customer Journey Mapping](https://info.keylimeinteractive.com/topic/customer-journey-mapping)
- [Remote Research](https://info.keylimeinteractive.com/topic/remote-research)
- [Research Analysis](https://info.keylimeinteractive.com/topic/research-analysis)
- [UX Methods](https://info.keylimeinteractive.com/topic/ux-methods)
- [Webinars](https://info.keylimeinteractive.com/topic/webinars)
- [Anthropology](https://info.keylimeinteractive.com/topic/anthropology)
- [Competitive Benchmarking](https://info.keylimeinteractive.com/topic/competitive-benchmarking)
- [Competitive Insights](https://info.keylimeinteractive.com/topic/competitive-insights)
- [Competitive Intelligence](https://info.keylimeinteractive.com/topic/competitive-intelligence)
- [Confirmation Bias](https://info.keylimeinteractive.com/topic/confirmation-bias)
- [Ethnography](https://info.keylimeinteractive.com/topic/ethnography)
- [Gaming](https://info.keylimeinteractive.com/topic/gaming)
- [Healthcare CX Design](https://info.keylimeinteractive.com/topic/healthcare-cx-design)
- [Healthcare Customer Experience Design](https://info.keylimeinteractive.com/topic/healthcare-customer-experience-design)
- [Heuristics](https://info.keylimeinteractive.com/topic/heuristics)
- [Unmoderated](https://info.keylimeinteractive.com/topic/unmoderated)
- [sample size calculation](https://info.keylimeinteractive.com/topic/sample-size-calculation)
- [AI development](https://info.keylimeinteractive.com/topic/ai-development)
- [Biometrics](https://info.keylimeinteractive.com/topic/biometrics)
- [Communication](https://info.keylimeinteractive.com/topic/communication)
- [Competitive Intelligence Analysis](https://info.keylimeinteractive.com/topic/competitive-intelligence-analysis)
- [Concept Testing](https://info.keylimeinteractive.com/topic/concept-testing)
- [Consultant](https://info.keylimeinteractive.com/topic/consultant)
- [Custom Projects](https://info.keylimeinteractive.com/topic/custom-projects)
- [Dedicated Services](https://info.keylimeinteractive.com/topic/dedicated-services)
- [Digital Divide](https://info.keylimeinteractive.com/topic/digital-divide)
- [Impact](https://info.keylimeinteractive.com/topic/impact)
- [Keystroke Level Model](https://info.keylimeinteractive.com/topic/keystroke-level-model)
- [Literature Review](https://info.keylimeinteractive.com/topic/literature-review)
- [Negotiation in UX](https://info.keylimeinteractive.com/topic/negotiation-in-ux)
- [Nonprofit UX](https://info.keylimeinteractive.com/topic/nonprofit-ux)
- [Presentation](https://info.keylimeinteractive.com/topic/presentation)
- [Rapid Research](https://info.keylimeinteractive.com/topic/rapid-research)
- [Report](https://info.keylimeinteractive.com/topic/report)
- [SaaS](https://info.keylimeinteractive.com/topic/saas)
- [UX Templates](https://info.keylimeinteractive.com/topic/ux-templates)
- [World Usability Day](https://info.keylimeinteractive.com/topic/world-usability-day)
- [digital design](https://info.keylimeinteractive.com/topic/digital-design)
- [persona](https://info.keylimeinteractive.com/topic/persona)
- [user engagement](https://info.keylimeinteractive.com/topic/user-engagement)

![ ](https://keylimeinteractive.com/wp-content/uploads/2024/05/aicpa-soc-certified.png)

![Logo of the National Minority Supplier Development Council with colorful abstract shapes and text.](https://keylimeinteractive.com/wp-content/uploads/2024/05/NMSDC-Logo-NATIONAL-1024x716.jpg)

![Logo with the text "Insights Association" and colorful squares forming a pattern above the text.](https://keylimeinteractive.com/wp-content/uploads/2024/02/insights-association-logo-v2.png)

![](https://keylimeinteractive.com/wp-content/uploads/2024/02/key-lime-interactive.svg)

Your Trusted Partner for UX Research

Key Lime Interactive

- [What We Do](https://keylimeinteractive.com/ux-research-services/)
- [Proven Process](https://keylimeinteractive.com/proven-process/)

Resources

- [Case Studies](https://info.keylimeinteractive.com/case-studies)
- [Events + Workshops](https://info.keylimeinteractive.com/events)
- [Blog](https://info.keylimeinteractive.com/)

Company

- [About Us](https://keylimeinteractive.com/about-us/)
- [Meet Our Team](https://keylimeinteractive.com/our-team/)
- [Careers](https://keylimeinteractive.com/careers/)
- [News](https://keylimeinteractive.com/news/)
- [Security & Compliance](https://app.vanta.com/keylimeinteractive.com/trust/cylnxu23wx6pzvej7bloh9)
- [Public Sector GSA](https://keylimeinteractive.com/public-sector-gsa-schedule/)

Get in touch

- [Contact Us](https://keylimeinteractive.com/contact)

<https://www.linkedin.com/company/key-lime-interactive/mycompany> <https://www.facebook.com/pages/Key-Lime-Interactive-LLC/247944346084> <https://www.youtube.com/channel/UC_2BwK4p_KTJCj85NGtee3Q>

© 2025 All Rights Reserved.

- [Privacy Policy](https://keylimeinteractive.com/privacy-policy/)

- [Terms of Use](https://keylimeinteractive.com/terms/)