NCEAS / metacatui

MetacatUI: A client-side web interface for DataONE data repositories
https://nceas.github.io/metacatui
Apache License 2.0
42 stars 28 forks source link

Choose a plotting library for the Plot Viewer #2181

Open robyngit opened 1 year ago

robyngit commented 1 year ago

Objective: To select the most appropriate plotting package for the Plot Viewer.

Packages considered so far:

  1. D3

    • Pros:
      • Already in use in MetacatUI (though an older version), no new dependencies
      • Highly customizable and powerful - can create almost any kind of visualization.
      • Has a robust community and abundant resources, is actively maintained, and has been around for many years.
    • Cons:
      • Steeper learning curve.
      • More verbose compared to other libraries.
  2. plot by Observable

    • Pros:
      • Built on top of D3 but offers a higher level API.
      • Easier and faster to get simple plots up and running.
      • Good documentation and community support.
    • Cons:
      • Might have limitations in customizability compared to pure D3.
      • This library is new as of 2021-ish
  3. Vizabi by Gapminder

    • Pros:
      • Can create attractive and familiar animated bubble charts like those popularized by Gapminder.
      • Comes with time slider and play/pause controls.
      • Provide a simplified way to request, fetch and parse data in a unified data schema.
      • Responsive & optimized for both touch and mouse interactions.
    • Cons:
      • Not very flexible. For example, as far as I can tell, it only creates plots that have a time dimension.
      • Designed to display data with fewer points.
      • Has not been updated since 2020

Other packages to consider:

Packages ruled out:

Criteria to consider:

  1. Flexibility: Range of plots and visualizations the library can create.
  2. Learning curve: Simplicity in implementation - how long will it take to develop the plot viewer given this library?
  3. Performance: Efficiency in rendering, especially with large datasets.
  4. Package size: How much time will this add to the page load?
  5. Integration: Compatibility with MetacatUI.
  6. Longevity & Support:
    • Library's activity, release frequency, and history
    • Community activity and backing organization strength.
  7. Data Handling:
    • Capability for real-time data updates.
    • Data transformation and aggregation features.
    • Integration with data sources.
  8. Mobile Responsiveness:
    • Visualization rendering on mobile devices.
    • Adaptability to various screen sizes.
  9. Accessibility:
    • Features like ARIA tags, keyboard navigation, and alternative text options.
  10. ...?

Tasks (suggested):

robyngit commented 1 year ago

Another package consideration:

Interesting point: It has a geohash layer! https://deck.gl/docs/api-reference/geo-layers/geohash-layer