CINXE.COM
Deep Dive on Sankey Diagrams
<!DOCTYPE html><html><head><meta charSet="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/><title>Deep Dive on Sankey Diagrams</title><meta name="title" content="Deep Dive on Sankey Diagrams"/><meta name="description" content="By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article."/><meta name="twitter:title" content="Deep Dive on Sankey Diagrams"/><meta name="twitter:description" content="By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article."/><meta name="twitter:image" content="https://images.prismic.io/plotly-marketing-website-2/f919e5d3-0f05-42b6-8f3f-d9072a5cd7b6_Sankey_desktop.png?auto=compress,format"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@plotlygraphs"/><meta name="twitter:creator" content="plotly"/><meta property="og:title" content="Deep Dive on Sankey Diagrams"/><meta property="og:description" content="By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article."/><meta property="og:url" content="blog/sankey-diagrams"/><meta property="og:type" content="website"/><meta property="og:image" content="https://images.prismic.io/plotly-marketing-website-2/f919e5d3-0f05-42b6-8f3f-d9072a5cd7b6_Sankey_desktop.png?auto=compress,format"/><meta property="og:image:type" content="image/jpg"/><meta property="og:image:url" content="https://images.prismic.io/plotly-marketing-website-2/f919e5d3-0f05-42b6-8f3f-d9072a5cd7b6_Sankey_desktop.png?auto=compress,format"/><meta property="og:image:secure_url" content="https://images.prismic.io/plotly-marketing-website-2/f919e5d3-0f05-42b6-8f3f-d9072a5cd7b6_Sankey_desktop.png?auto=compress,format"/><meta name="robots" content="index, follow"/><meta property="og:image:alt" content="Plotly"/><meta property="og:image:width" content="50"/><meta property="og:image:height" content="50"/><meta property="og:locale" content="en_IE"/><link rel="icon" type="image/x-icon" href="favicon.ico"/><link rel="icon" id="favicon" type="image/svg+xml" href="https://images.prismic.io/plotly-marketing-website-2/798854a2-209b-4e03-959f-965613354c4f_favicon_new_white.png?auto=compress,format"/><script type="application/ld+json">{"@context":"https://schema.org","@type":"Corporation","name":"Plotly","url":"https://plotly.com/","description":"Plotly is a software company whose mission is to enable every company, around the world, to build data apps.","logo":"https://images.prismic.io/plotly-marketing-website-2/a8e0a665-64b3-4d45-8f06-36ab5c165a65_google-search-logo.png","sameAs":["https://www.facebook.com/Plotly/","https://twitter.com/plotlygraphs","https://www.linkedin.com/company/plotly/","https://www.instagram.com/plotly/","https://github.com/plotly"]}</script><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":"1","name":"Blog","item":"https://plotly.com/blog/"},{"@type":"ListItem","position":"2","name":"Deep Dive on Sankey Diagrams","item":"https://plotly.com/blog/sankey-diagrams/"}]}</script><meta name="next-head-count" content="28"/><meta name="robots" content="index,follow"/><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"pageData":{"id":"ZNFlLRUAACYAXyk4","uid":"sankey-diagrams","url":null,"type":"blog_page","href":"https://plotly-marketing-website-2.cdn.prismic.io/api/v2/documents/search?ref=Z0ZkvREAACAAtL1G\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22ZNFlLRUAACYAXyk4%22%29+%5D%5D","tags":[],"first_publication_date":"2023-08-29T18:56:57+0000","last_publication_date":"2024-06-22T02:16:20+0000","slugs":["deep-dive-on-sankey-diagrams","build-python-web-apps-for-scikit-learn-models-with-plotly-dash"],"linked_documents":[],"lang":"en-us","alternate_languages":[],"data":{"body":[{"primary":{"animation":true,"color_1":null,"color_2":null,"color_3":null,"static_background":false},"items":[{}],"id":"subtle_animation$8b9d1de8-c109-4fa4-858f-9c319fef58dc","slice_type":"subtle_animation","slice_label":null},{"primary":{"image":{"dimensions":{"width":872,"height":880},"alt":null,"copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/ca895715-4e6e-4b9d-82d9-3da7ca09c57a_Clea.png?auto=compress,format","id":"ZOkBWRAAAB4AiivM","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"name":"Cléa Aumont","date___time":[{"type":"paragraph","text":"August 29, 2023","spans":[]}]},"items":[{}],"id":"author_section$fb66730a-0cab-4975-aba3-4e9381d99a0d","slice_type":"author_section","slice_label":null},{"primary":{"user_story":false},"items":[{"section":[{"type":"heading1","text":"Deep Dive on Sankey Diagrams","spans":[]},{"type":"heading2","text":"Introduction","spans":[]},{"type":"paragraph","text":"A Sankey Diagram is a powerful data visualization tool when used correctly. These visuals represent the flow of values from one stage to another using nodes and links, but can often be misused. This article aims to provide guidance on best practices for choosing a Sankey diagram, offering diverse examples to illustrate its potential. This article will guide the reader in choosing an appropriate dataset to create an effective Sankey Diagram by looking at the nature and the structure of the data. This article also provides starter code that enables the transformation of a dataframe into usable Sankey data for visualization using Plotly Express. By following these best practices and leveraging the provided code, readers can effectively use Sankey Diagrams to gain valuable insights from their data.","spans":[{"start":31,"end":49,"type":"strong"},{"start":235,"end":249,"type":"strong"},{"start":635,"end":649,"type":"strong"}]},{"type":"heading2","text":"What is a Sankey \u0026 Use Case","spans":[]},{"type":"paragraph","text":"Sankey diagrams can be compared to those of flow networks, with a tendency to be acyclic and directed, where the links and nodes are proportional to the flow they carry. The three parameters that make up a Sankey are the nodes, the links, and the link weights. In this article, I will be referring to a set of nodes on the same level as a tier, where a tier can be a column in a dataframe for example, representing a stage in the Sankey.","spans":[{"start":44,"end":57,"type":"strong"}]},{"type":"paragraph","text":"As a member of the Professional Services team, I first came across the Sankey Diagram on a client project that required a way to visualize the flow of a specific resource on a global scale. The goal was to see where a specific resource came from, where it was converted, and where it was shipped off. Supply chain is a great example of when to use a Sankey diagram as it naturally contains a set of stages to visualize. The complexity of coding this Sankey diagram came with allowing the user to select which columns of a pandas dataframe were to be used in the Sankey, meaning the Sankey could have anywhere from 2 to 8 tiers. The user was also able to filter the Sankey by node, change the link weights, which would vary by year, and group the tiers to only display a fixed number of nodes and aggregate the remaining ones into a single node. The following recording shows this particular Dash app in action.","spans":[{"start":19,"end":45,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/consulting-and-oem/"}},{"start":301,"end":313,"type":"strong"}]}]}],"id":"blog_section$0c713019-d5c9-4884-9310-c782ae357058","slice_type":"blog_section","slice_label":null},{"primary":{},"items":[{"video_thumbnail":{"dimensions":{"width":1408,"height":630},"alt":"Sankey","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/82284e97-8910-4f76-9204-275d450b87e8_Sankey.png?auto=compress,format","id":"ZOfTihAAACEAhWjk","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"video_description":[{"type":"paragraph","text":"Screen recording of Dash app displaying Sankey chart","spans":[]}],"video_media":{"link_type":"Web","url":"https://youtu.be/nuSHaBWJg7U"}}],"id":"blog_video$a7be932e-4b5d-4c08-83d7-ca32a2183be9","slice_type":"blog_video","slice_label":null},{"primary":{"user_story":false},"items":[{"section":[{"type":"paragraph","text":"This was difficult to accomplish because the parameters to code a Sankey Diagram are complex. The outcome of this project was a highly generalized code for generating Sankey diagrams, empowering users to customize every aspect of the Sankey, making this code reusable for any other project.","spans":[]},{"type":"heading2","text":"Useful Sankey Diagrams ","spans":[]},{"type":"paragraph","text":"Sankeys are best used to visualize the flow of data from one stage to another, but more specifically, to represent how that flow is subdivided at each stage. For example, this could be the flow of resources, money, energy, or information and how it circulates within a country, business, company, or network, respectively. This type of visualization can help highlight bottlenecks, or identify areas of high significance. For instance, consider the example below which demonstrates the distribution of a country’s tax resources. The diagram portrays each sector of the distribution along with its respective subcategories, showcasing the movement of money across different stages. This visual example offers readers a clear understanding of the intricate flow of funds with a simple glance at the diagram. For example, one can quickly see how little is spent on Education compared to other categories, or how much is spent on national defense in comparison to veterans benefits.","spans":[{"start":449,"end":456,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.sankey-diagrams.com/where-does-a-familys-tax-money-go/"}}]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/74ea1b85-154d-4ccc-a656-104351ba44eb_sankey2.png?auto=compress,format","alt":"Sankey Diagram","copyright":null,"dimensions":{"width":1200,"height":1215},"id":"ZNFs3BUAAHv9X0sR","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},{"type":"paragraph","text":"Another example of a useful Sankey Diagram is Apple’s or Lululemon’s Income Statement. Here, we can easily identify which are the major sources of income for Apple or Lululemon, the proportion of income allocated to expenses, and how the gross profit compares to expenses. Even a quick glance at these diagrams provide a remarkably insightful overview.","spans":[{"start":46,"end":53,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.sankeyart.com/content/blog/why-a-sankey-diagram-is-the-best-way-to-visualize-an-income-statement/"}},{"start":57,"end":68,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.reddit.com/r/dataisbeautiful/comments/12c47wb/oc_lululemons_2022_income_statement_visualized/"}}]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/69d9c0bb-38b1-4b52-8966-e53bb30c0907_Sankey_side3.png?auto=compress,format","alt":"Sankey Diagram","copyright":null,"dimensions":{"width":2940,"height":1060},"id":"ZOkCKBAAAB8Aii9c","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},{"type":"heading2","text":"When to avoid Sankeys","spans":[]},{"type":"paragraph","text":"Sankeys should be avoided in a number of cases. For one, if there isn’t a natural flow of data, a Sankey is probably not the best visualization. As an example, the following Sankey shows a mapping of countries to Olympic medal distribution. This isn’t ideal as the more data there is the more convoluted this chart will be. It's fairly difficult to gain insightful information from this diagram, other than which countries won the most medals and which sport awarded the most medals. In this particular case, a histogram may be more efficient to represent the distribution of medals.","spans":[]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/ba413bd3-94c4-4ae5-b55b-bc1a90cb183c_sankey5.png?auto=compress,format","alt":"Sankey Diagram","copyright":null,"dimensions":{"width":1004,"height":902},"id":"ZNFtLhUAAHv9X0x9","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},{"type":"paragraph","text":"The following example shows another Sankey that doesn’t tell much of a story. Again, a mapping of students to grades to classes to grades does not represent a natural flow of data and gets increasingly complex with the number of data points. Also, every student takes every class, which creates a link between every single one of these combinations. There is not much use for a Sankey if all of the nodes are connected.","spans":[{"start":14,"end":21,"type":"hyperlink","data":{"link_type":"Web","url":"https://ppcexpo.com/blog/visualizing-customer-journey-with-sankey-diagram"}}]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/23d429f8-bea6-401e-bf40-3e2022e70372_sankey6.png?auto=compress,format","alt":"Sankey Diagram","copyright":null,"dimensions":{"width":531,"height":311},"id":"ZNFtPRUAAPcPX0zA","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},{"type":"paragraph","text":"Sankeys should also be avoided for any kind of continuous data, such as time data, unless this has been turned into categorical or discrete data, such as years, or specific time periods. Any dataset that is too large or too sparse should also be avoided.","spans":[]},{"type":"paragraph","text":"","spans":[]}]}],"id":"blog_section$d8a229a6-8e92-4263-89dd-1e9df8c7db8e","slice_type":"blog_section","slice_label":null},{"primary":{"user_story":false},"items":[{"section":[{"type":"heading2","text":"Natural Structure of Data","spans":[]},{"type":"paragraph","text":"Now, having data that represents a natural set of stages between data points, this doesn't necessarily mean that a Sankey Diagram is always the best visual to use. A reason could be that there are too many data points, which would create a convoluted diagram, or too little. Also, there could just be no natural grouping of data points resulting in a diagram with links from every source node to every target node, creating too much cross over. In the following example, there is a sufficient amount of data to make a decent Sankey Diagram. However, once generated, it seems like all of the stores ship to all of the listed countries. This Diagram does not provide much information even though there are sufficient data points and the data has a natural flow.","spans":[]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/ae225678-b187-4e09-943c-5593aa5a3949_sankey8.png?auto=compress,format","alt":"Sankey Diagram","copyright":null,"dimensions":{"width":985,"height":525},"id":"ZNFtVxUAACYAX00v","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},{"type":"paragraph","text":"Instead, it may make more sense to have a stacked bar chart to display the breakdown of each company and the countries it ships to. Alternatively, a Sankey could still be used by adding an intermediary group, or a second layer of grouping. By breaking down the data in this fashion we can already start to get more insights on the companies and where they ship to. This way, we can easily see the distinction between domestic and international sales, and their respective breakdowns.","spans":[]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/e752374a-96a3-4b6b-979c-77c69904c8f6_Sankey_side2.png?auto=compress,format","alt":"Sankey","copyright":null,"dimensions":{"width":2940,"height":782},"id":"ZOkCRRAAACAAii_d","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}}]}],"id":"blog_section$d886e3ce-e33b-4873-9e80-e585b49f6611","slice_type":"blog_section","slice_label":null},{"primary":{"user_story":false},"items":[{"section":[{"type":"heading2","text":"Creating a Sankey Diagram in Plotly","spans":[]},{"type":"paragraph","text":"To create a Sankey diagram using Plotly Express, you can use the graph_objects.Sankey function. The function accepts 4 critical arguments to define the diagram:","spans":[{"start":33,"end":47,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/python/sankey-diagram/"}}]},{"type":"list-item","text":"The label which in actuality are the nodes (i.e: in the previous example a node is “Canada”)","spans":[{"start":4,"end":10,"type":"em"}]},{"type":"list-item","text":"The sources, a list of numbers that indicate the starting point of a link","spans":[{"start":4,"end":11,"type":"em"}]},{"type":"list-item","text":"The targets, a list of numbers that indicate the endpoint of a link","spans":[{"start":4,"end":11,"type":"em"}]},{"type":"list-item","text":"The values, a list of numbers that indicate the line thickness of each link. If this is left blank, no links will show up.","spans":[{"start":4,"end":10,"type":"em"}]},{"type":"paragraph","text":"Each node is identified by a unique number, and the link between each node is defined with the source and target properties. As an example, the Sankey diagram on the left with two nodes ‘A’ and ‘B’ with one link connecting the two will require the following properties:","spans":[]},{"type":"list-item","text":"label must be [‘A’, ’B’], this will automatically assign a number value to each node; 0 for A and 1 for B. ","spans":[{"start":0,"end":5,"type":"em"}]},{"type":"list-item","text":"To add the link between those 2 nodes, one must supply [0] to the source property ","spans":[{"start":66,"end":72,"type":"em"}]},{"type":"list-item","text":"And [1] to the target property. ","spans":[{"start":15,"end":21,"type":"em"}]},{"type":"list-item","text":"The value in this case needs to be a list of the same length as the sources and targets and can be any positive number. ","spans":[{"start":4,"end":9,"type":"em"},{"start":68,"end":75,"type":"em"},{"start":80,"end":87,"type":"em"}]},{"type":"heading3","text":"Common Issues","spans":[]},{"type":"paragraph","text":"This can be a little bit tricky to implement with larger datasets, but this is code that chat GPT can generate. The tricky part comes with the case where duplicate nodes must be viewed as distinct nodes, which is fairly common, as seen on the right. If not specifically accounted for, this will result in a node looping around itself, instead of creating a direct link.","spans":[]},{"type":"image","url":"https://images.prismic.io/plotly-marketing-website-2/e483bc78-2d96-471c-be10-cb9f89b587e1_Sankey_side1.png?auto=compress,format","alt":"Sankey","copyright":null,"dimensions":{"width":2484,"height":596},"id":"ZOkCchAAAB8AijCk","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}}]}],"id":"blog_section$ef5fb7e8-06d7-45ef-887a-1a4890323dc6","slice_type":"blog_section","slice_label":null},{"primary":{},"items":[{"section_description":[{"type":"heading2","text":"Getting Started: Code Sample","spans":[]}],"code_snippet":"def generate_sankey_chart_data(df: pd.Dataframe, columns: list, sankey_link_weight: str):\n\n# list of list: each list are the set of nodes in each tier/column\ncolumn_values = [df[col] for col in columns]\n\n# this generates the labels for the sankey by taking all the unique values\nlabels = sum([list(node_values.unique()) for node_values in column_values],[])\n\n# initializes a dict of dicts (one dict per tier) \nlink_mappings = {col: {} for col in columns}\n\n# each dict maps a node to unique number value (same node in different tiers\n# will have different nubmer values\ni = 0\nfor col, nodes in zip(columns, column_values):\n for node in nodes.unique():\n link_mappings[col][node] = i\n i = i + 1\n\n# specifying which coluns are serving as sources and which as sources\n# ie: given 3 df columns (col1 is a source to col2, col2 is target to col1 and \n# a source to col 3 and col3 is a target to col2\nsource_nodes = column_values[: len(columns) - 1]\ntarget_nodes = column_values[1:]\nsource_cols = columns[: len(columns) - 1]\ntarget_cols = columns[1:]\nlinks = []\n\n# loop to create a list of links in the format [((src,tgt),wt),(),()...]\nfor source, target, source_col, target_col in zip(source_nodes, target_nodes, source_cols, target_cols):\n for val1, val2, link_weight in zip(source, target, df[sankey_link_weight]):\n links.append(\n (\n (\n link_mappings[source_col][val1],\n link_mappings[target_col][val2]\n ),\n link_weight,\n)\n )\n\n# creating a dataframe with 2 columns: for the links (src, tgt) and weights\ndf_links = pd.DataFrame(links, columns=[\"link\", \"weight\"])\n\n# aggregating the same links into a single link (by weight)\ndf_links = df_links.groupby(by=[\"link\"], as_index=False).agg({\"weight\": sum})\n\n# generating three lists needed for the sankey visual\nsources = [val[0] for val in df_links[\"link\"]]\ntargets = [val[1] for val in df_links[\"link\"]]\nweights = df_links[\"weight\"]\n\nreturn labels, sources, targets, weights"}],"id":"blog_syntax_highlighter$2692def6-c619-4439-bc04-e5b08faad2e8","slice_type":"blog_syntax_highlighter","slice_label":null},{"primary":{"user_story":false},"items":[{"section":[{"type":"heading2","text":"Conclusion","spans":[]},{"type":"paragraph","text":"Sankey diagrams are a powerful data visualization tool used to represent the flow of values between stages, offering valuable insights into the flow of data. When used with well-structured data, they can help identify patterns, bottlenecks, and significant resource allocation trends. It is important to consider the nature of the dataset and whether it naturally lends itself to a Sankey diagram. With the right data, Sankey diagrams can be a valuable asset in data representation by facilitating the understanding of complex processes and distributions. With the sample Sankey code provided I hope this helps in better understanding how to code a Sankey Diagram as well as when to use a Sankey Diagram.","spans":[]}]}],"id":"blog_section$2a30c1ba-aba0-425f-bf0e-b51d5cd49bfe","slice_type":"blog_section","slice_label":null}],"seo_title":[{"type":"paragraph","text":"Deep Dive on Sankey Diagrams","spans":[]}],"seo_description":[{"type":"paragraph","text":"By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article.","spans":[]}],"seo_keywords":null,"seo_link":[{"type":"paragraph","text":"blog/sankey-diagrams","spans":[]}],"canonical_url":null,"twitter_title":[{"type":"paragraph","text":"Deep Dive on Sankey Diagrams","spans":[]}],"twitter_description":[{"type":"paragraph","text":"By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article.","spans":[]}],"twitter_image":{"dimensions":{"width":1000,"height":565},"alt":"Deep Dive on Sankey Diagrams","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/f919e5d3-0f05-42b6-8f3f-d9072a5cd7b6_Sankey_desktop.png?auto=compress,format","id":"ZNFwExUAACkAX1lg","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"twitter_card":[{"type":"paragraph","text":"summary_large_image","spans":[]}],"twitter_site":[{"type":"paragraph","text":"@plotlygraphs","spans":[]}],"twitter_creator":[{"type":"paragraph","text":"plotly","spans":[]}],"og_title":[{"type":"paragraph","text":"Deep Dive on Sankey Diagrams","spans":[]}],"og_description":[{"type":"paragraph","text":"By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article.","spans":[]}],"og_url":[{"type":"paragraph","text":"blog/sankey-diagrams","spans":[]}],"og_image":{"dimensions":{"width":1000,"height":565},"alt":"Deep Dive on Sankey Diagrams","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/f919e5d3-0f05-42b6-8f3f-d9072a5cd7b6_Sankey_desktop.png?auto=compress,format","id":"ZNFwExUAACkAX1lg","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"breadscrumbs":[{"breadcrumb_position":[{"type":"paragraph","text":"1","spans":[]}],"breadcrumbs_name":[{"type":"paragraph","text":"Blog","spans":[]}],"breadcrumbs_url":[{"type":"paragraph","text":"https://plotly.com/blog/","spans":[]}]},{"breadcrumb_position":[{"type":"paragraph","text":"2","spans":[]}],"breadcrumbs_name":[{"type":"paragraph","text":"Deep Dive on Sankey Diagrams","spans":[]}],"breadcrumbs_url":[{"type":"paragraph","text":"https://plotly.com/blog/sankey-diagrams/","spans":[]}]}],"body1":[]}},"mainFooterData":{"id":"YXkfsxIAACQANKAQ","uid":"footer","url":null,"type":"footer","href":"https://plotly-marketing-website-2.cdn.prismic.io/api/v2/documents/search?ref=Z0ZkvREAACAAtL1G\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22YXkfsxIAACQANKAQ%22%29+%5D%5D","tags":[],"first_publication_date":"2021-10-27T09:45:27+0000","last_publication_date":"2024-09-17T21:24:47+0000","slugs":["footer"],"linked_documents":[],"lang":"en-us","alternate_languages":[],"data":{"logo":{"dimensions":{"width":300,"height":83},"alt":"Plotly","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/8f977c91-7b4e-4367-8228-26fbba2506e4_69e12d6a-fb65-4b6e-8423-9465a29c6028_plotly-logo-sm.png?auto=compress,format","id":"Yw7PUBAAACcAH7ra","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"logo_light":{"dimensions":{"width":300,"height":83},"alt":"Plotly","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/b3d3a2b1-49f9-4e74-93dc-070b266a54ba_plotly_logo.svg","id":"YtkLkBEAAIFVEe01","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"heading":"Sign up for updates","heading_smaller_size":"SUBSCRIBE TO PLOTLY","sub_heading":"We wouldn't dream of spamming you or selling your info.","rich_text_field":[{"type":"paragraph","text":"Plotly is based on Tioh’tia:ke, commonly known in English as Montreal Island, in Kanien’ke-há:ka, the “Place of the People of the Flint” (the Kanien’kéha).","spans":[]},{"type":"paragraph","text":"Plotly is committed to making the tech industry more accessible to people from different cultures, as well as using and encouraging the use of our technology for anti-racist efforts. For our complete land acknowledgement and resources to learn about settlement and contribute to Indigenous activism, visit our About Us page.","spans":[{"start":310,"end":323,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/about-us/"}}]}],"year":true,"rights":[{"type":"paragraph","text":"Plotly. All rights reserved.","spans":[]}],"footer_links":[{"label":[{"type":"paragraph","text":"Privacy","spans":[]}],"link":{"id":"YajULxMAACIAyM87","type":"pages","tags":[],"lang":"en-us","slug":"i.-the-information-we-collect","first_publication_date":"2021-12-02T14:12:05+0000","last_publication_date":"2022-11-02T14:37:23+0000","uid":"privacy","link_type":"Document","isBroken":false}}],"body":[{"primary":{"label":"Products \u0026 Services"},"items":[{"label":"Dash Enterprise","links":{"id":"YbAkPBAAACEAzqkL","type":"pages","tags":[],"lang":"en-us","slug":"overview-of-dash--dash-apps","first_publication_date":"2021-12-08T03:20:07+0000","last_publication_date":"2024-11-13T18:40:45+0000","uid":"dash","link_type":"Document","isBroken":false},"badge":[]},{"label":"Plotly App Studio","links":{"link_type":"Web","url":"https://plotly.com/dash/app-studio/"},"badge":[]},{"label":"Chatbot Builder","links":{"link_type":"Web","url":"https://plotly.com/dash/chatbot-builder/"},"badge":[]},{"label":"Data App Workspaces","links":{"id":"YXtovREAACIACldD","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-data-app-workspaces","first_publication_date":"2021-10-29T03:21:36+0000","last_publication_date":"2024-02-03T00:31:57+0000","uid":"workspaces","link_type":"Document","isBroken":false},"badge":[]},{"label":"Design Kit","links":{"id":"YXgEKRIAACQAL-ae","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-design-kit","first_publication_date":"2021-10-26T13:35:58+0000","last_publication_date":"2024-11-19T16:06:13+0000","uid":"design-kit","link_type":"Document","isBroken":false},"badge":[]},{"label":"Snapshot Engine","links":{"id":"YXEspxQAACkANhuF","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-snapshot-engine","first_publication_date":"2021-10-21T09:06:32+0000","last_publication_date":"2024-03-27T23:21:10+0000","uid":"snapshot-engine","link_type":"Document","isBroken":false},"badge":[]},{"label":"App Manager","links":{"id":"YXwMYxEAACQADSqk","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-app-manager","first_publication_date":"2021-10-29T14:59:51+0000","last_publication_date":"2024-02-03T00:18:23+0000","uid":"app-manager","link_type":"Document","isBroken":false},"badge":[]},{"label":"Centralized Development","links":{"id":"ZUlV2RYAACIAgSdu","type":"dash_pages","tags":[],"lang":"en-us","slug":"multiple-teams.-one-single-platform.","first_publication_date":"2023-11-08T01:20:55+0000","last_publication_date":"2024-08-28T20:43:34+0000","uid":"centralized-data-app-management","link_type":"Document","isBroken":false},"badge":[]},{"label":"Job Queue","links":{"id":"YZOS3BEAACEANAWv","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-job-queue","first_publication_date":"2021-11-16T11:16:34+0000","last_publication_date":"2024-03-28T19:24:30+0000","uid":"job-queue","link_type":"Document","isBroken":false},"badge":[]},{"label":"Embedding","links":{"id":"YXnYAhEAACQAAzyH","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-embedding-middleware","first_publication_date":"2021-10-27T22:53:25+0000","last_publication_date":"2024-02-03T00:33:42+0000","uid":"embedding","link_type":"Document","isBroken":false},"badge":[]},{"label":"Authentication Middleware","links":{"id":"YZr_ohEAACIAVToz","type":"dash_pages","tags":[],"lang":"en-us","slug":"about-authentication-middleware","first_publication_date":"2021-11-22T02:28:37+0000","last_publication_date":"2024-02-03T00:32:43+0000","uid":"authentication","link_type":"Document","isBroken":false},"badge":[]},{"label":"ChatGPT Integration","links":{"id":"ZInwchIAAB8Af1b1","type":"dash_pages","tags":[],"lang":"en-us","slug":"dash-and-chatgpt-for-geospatial-use-cases","first_publication_date":"2023-06-19T21:52:12+0000","last_publication_date":"2024-08-16T19:37:12+0000","uid":"chatgpt","link_type":"Document","isBroken":false},"badge":[]},{"label":"Customer Success","links":{"link_type":"Web","url":"https://plotly.com/customer-success/"},"badge":[]},{"label":"Professional Services","links":{"id":"Ya7QVxMAACIA43YL","type":"pages","tags":[],"lang":"en-us","slug":"data-app-development","first_publication_date":"2021-12-07T03:09:55+0000","last_publication_date":"2023-08-29T20:11:45+0000","uid":"consulting-and-oem","link_type":"Document","isBroken":false},"badge":[]}],"id":"menu$5290647d-f657-4a88-b192-fcb4e03d6c0c","slice_type":"menu","slice_label":null},{"primary":{"label":"DOCS"},"items":[{"label":"Dash Enterprise","links":{"link_type":"Web","url":"https://dash.plotly.com/dash-enterprise","target":"_blank"},"badge":[]},{"label":"Dash Open Source","links":{"link_type":"Web","url":"https://dash.plotly.com/","target":"_blank"},"badge":[]},{"label":"Graphing Libraries","links":{"link_type":"Web","url":"https://plotly.com/graphing-libraries/","target":"_blank"},"badge":[]},{"label":"Community","links":{"link_type":"Web","url":"https://community.plotly.com/","target":"_blank"},"badge":[]},{"label":"Example apps","links":{"link_type":"Web","url":"https://plotly.com/examples/"},"badge":[]}],"id":"menu$46f3e9a2-ac40-4fb8-8c1d-786f1aafecc3","slice_type":"menu","slice_label":null},{"primary":{"label":"Resources"},"items":[{"label":"User Stories","links":{"link_type":"Web","url":"https://plotly.com/user-stories/"},"badge":[]},{"label":"Events","links":{"link_type":"Web","url":"https://plotly.com/events/"},"badge":[]},{"label":"Webinars","links":{"link_type":"Web","url":"https://plotly.com/resources/webinars/"},"badge":[]},{"label":"Blog","links":{"link_type":"Web","url":"https://plotly.com/blog/"},"badge":[]},{"label":"White Papers","links":{"link_type":"Web","url":"https://plotly.com/resources/"},"badge":[]}],"id":"menu$f240b9af-08ae-44f5-90dd-f3d4dc410a47","slice_type":"menu","slice_label":null},{"primary":{"label":"Solutions"},"items":[{"label":"Databricks","links":{"link_type":"Web","url":"https://plotly.com/dash/databricks/"},"badge":[]},{"label":"Snowflake","links":{"link_type":"Web","url":"https://plotly.com/dash/snowflake/"},"badge":[]},{"label":"Financial Services","links":{"link_type":"Web","url":"https://plotly.com/solutions/finance/"},"badge":[]},{"label":"Healthcare \u0026 Life Sciences","links":{"link_type":"Web","url":"https://plotly.com/solutions/healthcare-life-sciences-pharma/"},"badge":[]},{"label":"Energy \u0026 Utilities","links":{"link_type":"Web","url":"https://plotly.com/solutions/energy/"},"badge":[]}],"id":"menu$645af7bd-00c3-4e94-8d84-d48f657762af","slice_type":"menu","slice_label":null},{"primary":{"label":"COMPANY"},"items":[{"label":"About Us","links":{"id":"YanRFBMAACIAzUNF","type":"pages","tags":[],"lang":"en-us","slug":"2013-2014","first_publication_date":"2021-12-03T08:11:04+0000","last_publication_date":"2024-11-06T21:48:23+0000","uid":"about-us","link_type":"Document","isBroken":false},"badge":[]},{"label":"Careers","links":{"id":"YaoM9hMAACAAzlYs","type":"pages","tags":[],"lang":"en-us","slug":"autonomy","first_publication_date":"2021-12-03T12:26:33+0000","last_publication_date":"2024-11-26T19:48:02+0000","uid":"careers","link_type":"Document","isBroken":false},"badge":[{"type":"paragraph","text":"WE ARE HIRING","spans":[]}]},{"label":"Contact Us","links":{"id":"YanysBMAACIAzd-_","type":"pages","tags":[],"lang":"en-us","slug":"contact-us","first_publication_date":"2021-12-03T10:37:04+0000","last_publication_date":"2024-10-25T21:54:27+0000","uid":"contact-us","link_type":"Document","isBroken":false},"badge":[]},{"label":"Press \u0026 News","links":{"link_type":"Web","url":"https://plotly.com/news/"},"badge":[]}],"id":"menu$bc5f8046-a88a-42d7-8a2c-ca5daefa988c","slice_type":"menu","slice_label":null}],"social_links":[{"image":{"dimensions":{"width":18,"height":14},"alt":"Medium","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/bbf396b3-2fd4-4d8d-ad5a-75ad717fc426_Vector.png?auto=compress,format","id":"YcBCBBAAACQArP35","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"link":[{"type":"paragraph","text":"https://medium.com/plotly","spans":[]}]},{"image":{"dimensions":{"width":18,"height":14},"alt":"Twitter","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/d4a91c22-fb05-4194-995a-4cb172f3f439_Vector-1.png?auto=compress,format","id":"YcBCBRAAACEArP38","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"link":[{"type":"paragraph","text":"https://twitter.com/plotlygraphs","spans":[]}]},{"image":{"dimensions":{"width":18,"height":18},"alt":"Github","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/335997cd-a91c-48c5-9958-bc7c48237233_Vector-2.png?auto=compress,format","id":"YcBCBBAAACQArP34","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"link":[{"type":"paragraph","text":"https://github.com/plotly","spans":[]}]},{"image":{"dimensions":{"width":19,"height":19},"alt":"Instagram","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/11374ad5-fc84-4e77-8668-e3e2b9543d3c_Group.png?auto=compress,format","id":"YcBCBBAAACMArP37","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"link":[{"type":"paragraph","text":"https://www.instagram.com/plotly/","spans":[]}]},{"image":{"dimensions":{"width":19,"height":18},"alt":"Facebook","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/624ef182-7abc-4961-9384-3ea952c48cf7_Vector-3.png?auto=compress,format","id":"YcBCBBAAACIArP36","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"link":[{"type":"paragraph","text":"https://www.facebook.com/Plotly/","spans":[]}]},{"image":{"dimensions":{"width":19,"height":19},"alt":"Linkedin","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/afce3119-714c-4698-a5cb-b3b713eb06e2_Vector-4.png?auto=compress,format","id":"YcBCBBAAACQArP33","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"link":[{"type":"paragraph","text":"https://www.linkedin.com/company/plotly/","spans":[{"start":0,"end":40,"type":"hyperlink","data":{"link_type":"Web","url":"https://www.google.com/url?q=https://www.linkedin.com/company/plotly/\u0026sa=D\u0026source=editors\u0026ust=1653441568926187\u0026usg=AOvVaw0_5yUJIdzfEN20tIA3Rwua","target":"_blank"}}]}]}]}},"searchData":[[{"uid":"user-stories","type":"pages","seo_title":[{"type":"paragraph","text":"User Stories","spans":[]}],"seo_description":[{"type":"paragraph","text":"Read in-depth user stories and examples of how Plotly customers build, deploy, and scale professional data applications with Dash Enterprise.","spans":[]}]},{"uid":"resources","type":"pages","seo_title":[{"type":"paragraph","text":"Resources","spans":[]}],"seo_description":[{"type":"paragraph","text":"Access a curated selection of user stories, white papers, and how-to guides from data science experts and industry leaders. Start your data app journey today.","spans":[]}]},{"uid":"blog","type":"pages","seo_title":[{"type":"paragraph","text":"Blog","spans":[]}],"seo_description":[{"type":"paragraph","text":"Data science and analytics best practices, trends, success stories, and expert-curated tutorials for modern data teams and leaders.","spans":[]}]},{"uid":"dash","type":"pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise: The Premier Data App Platform for Python","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash is a framework for building data apps in Python. Dash Enterprise simplifies the development and deployment process in a secure, scalable environment.","spans":[]}]},{"uid":"events","type":"pages","seo_title":[{"type":"paragraph","text":"Plotly Community Events, Webinars, and Conferences","spans":[]}],"seo_description":[{"type":"paragraph","text":"We love connecting with the data community, in-person and online! Explore upcoming Plotly community events, webinars, and conferences around the world.","spans":[]}]},{"uid":"careers","type":"pages","seo_title":[{"type":"paragraph","text":"Plotly Careers","spans":[]}],"seo_description":[{"type":"paragraph","text":"Plotly's company culture focuses on autonomy, trust, and data. Join the remote-first team pioneering analytic innovation and leading the data app industry.","spans":[]}]},{"uid":"whats-new","type":"pages","seo_title":[{"type":"paragraph","text":"What's new | Plotly","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Discover the latest updates in Dash Enterprise, Dash Open Source, and Plotly Graphing Library — new product features, enhancements, and more","spans":[],"direction":"ltr"}]},{"uid":"discuss-your-use-case","type":"pages","seo_title":[{"type":"paragraph","text":"Discuss Your Use Case","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Discuss your use case with a Plotly expert. Learn how industry leaders are solving the toughest challenges with custom data apps powered by Plotly Dash Enterprise.","spans":[],"direction":"ltr"}]},{"uid":"get-pricing","type":"pages","seo_title":[{"type":"paragraph","text":"Get Pricing","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover how leading businesses put data and AI to work, through production data apps. Request a custom price-quote.","spans":[],"direction":"ltr"}]},{"uid":"chart-studio-updates","type":"pages","seo_title":[{"type":"paragraph","text":"Sunsetting Chart Studio Cloud User Accounts","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Important updates to Chart Studio Cloud regarding user accounts, starting on November 8, 2024.","spans":[],"direction":"ltr"}]},{"uid":"examples","type":"pages","seo_title":[{"type":"paragraph","text":"Plotly Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Combined with Python, Plotly Dash delivers interactive, customizable data apps. Explore examples in a wide range of industries and advanced analytic needs.","spans":[]}]},{"uid":"contact-us","type":"pages","seo_title":[{"type":"paragraph","text":"Contact Us","spans":[]}],"seo_description":[{"type":"paragraph","text":"Have a question about Plotly or want to know how to get started with Dash? Share feedback in this form, and a member of the our team will get in touch soon.","spans":[]}]},{"uid":"contact-sales","type":"pages","seo_title":[{"type":"paragraph","text":"Contact Sales","spans":[]}],"seo_description":[{"type":"paragraph","text":"Have a question about Plotly or want to know how to get started with Dash Enterprise? Fill out this form, and a member of the our team will get in touch soon.","spans":[]}]},{"uid":"about-us","type":"pages","seo_title":[{"type":"paragraph","text":"About Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Headquartered in Montreal with a remote-first team, Plotly is dedicated to ensuring that every organization uses Dash Enterprise to build data applications.","spans":[]}]},{"uid":"get-demo","type":"pages","seo_title":[{"type":"paragraph","text":"Get Demo","spans":[]}],"seo_description":[{"type":"paragraph","text":"Go from data exploration to actionable insight faster. Schedule a demo to learn how Dash Enterprise enables powerful, customizable, interactive data apps.","spans":[]}]},{"uid":"security","type":"pages","seo_title":[{"type":"paragraph","text":"Security at Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Build, deploy, and scale professional data applications with airtight security, for confident, data-driven decisions across the organization.","spans":[]}]},{"uid":"news","type":"pages","seo_title":[{"type":"paragraph","text":"Press \u0026 News","spans":[]}],"seo_description":[{"type":"paragraph","text":"As a category-defining leader in enabling data-driven decisions, Plotly is frequently featured in the news. Explore recent articles, podcasts, and blog posts.","spans":[]}]},{"uid":"dash-enterprise-terms-of-use","type":"pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise Terms of Use","spans":[]}],"seo_description":[{"type":"paragraph","text":"Review the Dash Enterprise Terms of Use and gain a thorough understanding of Plotly's policies, to ensure compliance and effective utilization","spans":[]}]},{"uid":"customer-success","type":"pages","seo_title":[{"type":"paragraph","text":"Customer Success","spans":[]}],"seo_description":[{"type":"paragraph","text":"Plotly Customer Success empowers Dash Enterprise customers to drive insight and decision-making with data. The award-winning team offers support, enablement sessions, technical account management, and more.","spans":[]}]},{"uid":"comparing-dash-tableau-powerbi-einstein-analytics","type":"pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise for Python vs Common BI Software","spans":[]}],"seo_description":[{"type":"paragraph","text":"Compare Dash Enterprise, Tableau, Power BI, and Einstein Analytics. See the differences in deployment process, ease of use, security, support, and more.","spans":[]}]},{"uid":"dash-enterprise-faq","type":"pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise FAQ","spans":[]}],"seo_description":[{"type":"paragraph","text":"Find answers to common questions you may have about Dash Enterprise, including migration, installation, deployment, and licensing.","spans":[]}]},{"uid":"consulting-and-oem","type":"pages","seo_title":[{"type":"paragraph","text":"Consulting, Training \u0026 Open-Source Development","spans":[]}],"seo_description":[{"type":"paragraph","text":"Plotly Professional Services are experts in delivering future-proof data apps. From custom development to workshops, they can support your analytics needs.","spans":[]}]},{"uid":"comparing-dash-shiny-streamlit","type":"pages","seo_title":[{"type":"paragraph","text":"How do Dash, Posit (Shiny), and Streamlit compare?","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how Dash, Posit (Shiny), and Streamlit compare as low-code UI layers for data apps. See the differences in architecture, deployment, user experience, and more.","spans":[]}]},{"uid":"compare-dash-shiny-streamlit-bokeh","type":"pages","seo_title":[{"type":"paragraph","text":"How do Dash, Shiny, Streamlit, and Bokeh compare?","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how low-code UI layers like Dash, Posit (Shiny), Streamlit, and Bokeh compare in web protocol, architecture, user experience, licensing, deployment, and more.","spans":[]}]},{"uid":"life-sciences-app-catalog","type":"pages","seo_title":[{"type":"paragraph","text":"Dash Life Sciences App Catalog","spans":[]}],"seo_description":[{"type":"paragraph","text":"Deploy front-ends for machine learning back-ends like PyTorch, Keras, and TensorFlow with custom Life Sciences templates in Dash Enterprise.","spans":[]}]},{"uid":"comparing-dash-rstudio-anaconda-streamlit","type":"pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise vs RStudio, Anaconda, Streamlit","spans":[]}],"seo_description":[{"type":"paragraph","text":"Compare Dash Enterprise, RStudio Connect, Anaconda Enterprise, and Streamlit for Teams as deployment platforms. See differences in authentication and licensing.","spans":[]}]},{"uid":"building-machine-learning-web-apps-in-python","type":"pages","seo_title":[{"type":"paragraph","text":"Build Machine Learning Apps in Python","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash is the solution for operationalizing your AI/ML initiatives, with GPT-3, Hugging Face Transformers, UMAP, and YOLOv3. Check out latest Dash-AI projects.","spans":[]}]},{"uid":"privacy","type":"pages","seo_title":[{"type":"paragraph","text":"Privacy Policy","spans":[]}],"seo_description":[{"type":"paragraph","text":"Please see more details on Plotly's privacy policy, including information collected, security, retention, international visitors, and third-party services.","spans":[]}]}],[{"uid":"ai-data-apps","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Plotly for Gen AI and ML. Dynamic LLM-Powered Data Apps","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Learn how competitive decisions and efficient operations are powered by interactive, dynamic LLM-powered data apps with Plotly Dash Enterprise for Gen AI and ML.","spans":[],"direction":"ltr"}]},{"uid":"databricks","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Databricks with Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Use Plotly’s Dash web app framework with Databricks (Python SQL connector, Jobs API, CLI, databricks-connect-v2) for at-scale production data apps.","spans":[]}]},{"uid":"design-kit","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Design Kit","spans":[]}],"seo_description":[{"type":"paragraph","text":"Easily style and customize data apps with Design Kit, a low-code framework from Dash Enterprise. Production ready — no JavaScript, HTML, or CSS required.","spans":[]}]},{"uid":"app-studio","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Plotly App Studio | Python notebook to data app","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Rapidly build, deploy, and scale data science data apps from your Jupyter Notebooks, Python scripts, or other Python notebooks with Plotly App Studio.","spans":[],"direction":"ltr"}]},{"uid":"guided-installation","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise - Guided Installation","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"After installing Dash Enterprise in one of the below environments, you will be asked for a license key to activate the software and begin deploying Dash apps.","spans":[]}]},{"uid":"aws","type":"dash_pages","seo_title":[{"type":"paragraph","text":"AWS with Plotly","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Use Plotly’s Dash web app framework with AWS (EC2, S3, EKS, RDS, Aurora, Redshift, and more) for at-scale production data apps.","spans":[],"direction":"ltr"}]},{"uid":"data-sources","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Data Sources | Plotly Dash Enterprise","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Plotly Dash Enterprise Data Sources helps connect, manage, and access data when connecting to Databricks, Snowflake, Redshift, BigQuery, and AWS S3.","spans":[],"direction":"ltr"}]},{"uid":"centralized-data-app-management","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Centralized Data App Development","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise lets you centralize data app development under a single platform to manage and deploy Dash, Streamlit, and Django data apps.","spans":[]}]},{"uid":"big-data-for-python","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Big Data Pipelines","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise supports turnkey connections to popular backends in Python – Vaex, Dask, Datashader, RAPIDS, Databricks (PySpark), Snowflake, and Postgres.","spans":[]}]},{"uid":"chatgpt","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash and ChatGPT","spans":[]}],"seo_description":[{"type":"paragraph","text":"As a Python-based framework, Dash offers integration with ChatGPT and large language models (LLMs). Learn how you can take part in the future of AI-enabled apps.","spans":[]}]},{"uid":"industry-app-catalog","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Industry App Catalog","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise is the fastest way to deploy front-ends for machine learning back-ends with dozens of easily customizable ML and AI templates.","spans":[]}]},{"uid":"snowflake","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Snowflake with Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how using Snowflake and Plotly together ensures the delivery of production-grade delivery apps that use real-time machine learning and AI processes.","spans":[]}]},{"uid":"chatbot-builder","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Plotly Chatbot Builder","spans":[]}],"seo_description":[{"type":"paragraph","text":"Use Plotly's new Chatbot Builder to deliver fast, easy AI-generated insights from within your data apps.","spans":[]}]},{"uid":"job-queue","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Job Queue","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise Job Queue makes background jobs seamless and scalable in Python. Easily offload CPU-intensive tasks and improve data app performance.","spans":[]}]},{"uid":"snapshot-engine","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Enterprise Snapshot Engine","spans":[]}],"seo_description":[{"type":"paragraph","text":"Create, annotate, archive, and share views of your Dash apps. With only a few lines of code, Snapshot Engine schedules tasks and auto-generates reports.","spans":[]}]},{"uid":"persistent-filesystem","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Persistent Filesystem","spans":[]}],"seo_description":[{"type":"paragraph","text":"With Persistent Filesystems, simplify your data science workflow and avoid network delays. Large data can be uploaded, updated, and cached in Dash Enterprise.","spans":[]}]},{"uid":"app-manager","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash App Manager","spans":[]}],"seo_description":[{"type":"paragraph","text":"Deploy, manage, and share data apps. | With the App Manager from Dash Enterprise, ensure a standard, well-documented, and reproducible workflow.","spans":[]}]},{"uid":"authentication","type":"dash_pages","seo_title":[{"type":"paragraph","text":"No-Code Authentication","spans":[]}],"seo_description":[{"type":"paragraph","text":"Access a GUI for easy and secure authentication. With App Manager from Dash Enterprise, choose from LDAP, AD, PingFederate, Okta, SAML, SSO, and more.","spans":[]}]},{"uid":"continuous-integration","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Continuous Integration","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise seamlessly integrates CI/CD for streamlined app deployment. Git-based workflow, automated QA, version control, and more included.","spans":[]}]},{"uid":"dashboard-engine","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Dashboard Engine","spans":[]}],"seo_description":[{"type":"paragraph","text":"Provide data app end users with a powerful, drag-and-drop UI. Dashboard Engine from Dash Enterprise is Python ETL meeds BI — no callbacks or layout required.","spans":[]}]},{"uid":"workspaces","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Data App Workspaces","spans":[]}],"seo_description":[{"type":"paragraph","text":"Workspaces is an onboard code editor from Dash Enterprise. Easily write and execute code for data apps. No additional downloads or installation needed.","spans":[]}]},{"uid":"embedding","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dash Embedding","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise Embedding Middleware enables seamless embedding without the use of iframes. It also offers single sign-on for easy authentication that scales.","spans":[]}]},{"uid":"dask-integration","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Dask-Coiled and Dash Integration","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how to adapt your Dash app with Dask to use Coiled in the back end. Using the integration can enable scaling across parallel computing clusters.","spans":[]}]},{"uid":"excel-python","type":"dash_pages","seo_title":[{"type":"paragraph","text":"Excel to Python","spans":[]}],"seo_description":[{"type":"paragraph","text":"Python is one of the best tools for data scientists in analyzing \u0026 developing models. Here are some resources to help you say goodbye to Excel, and hello to Dash.","spans":[]}]}],[{"uid":"webinars","type":"resource","seo_title":[{"type":"paragraph","text":"Webinars","spans":[]}],"seo_description":[{"type":"paragraph","text":"Leverage Plotly's library of recorded webinars to learn data analytics tips, industry best practices, and application use cases from data analytics experts.","spans":[]}]}],[{"uid":"mitacs","type":"news_pages","seo_title":[{"type":"paragraph","text":"Plotly \u0026 Université de Sherbrooke to develop genomic visualization","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how Université de Sherbrooke uses Plotly to develop new analytical tools to explore and visualize genetic structures at the school's CoBIUS Lab.","spans":[]}]},{"uid":"plotly-named-best-place-to-work","type":"news_pages","seo_title":[{"type":"paragraph","text":"Canadian SME National Business Awards selects Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Plotly receives the Canadian SME award for Top Place to Work and Business of the Year for driving product innovation and employee professional development.","spans":[]}]},{"uid":"dash-daq","type":"news_pages","seo_title":[{"type":"paragraph","text":"Dash DAQ","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash DAQ provides Python users the means to create interactive virtual control panels on their computers that interface with common lab instruments.","spans":[]}]}],[{"uid":"geospatial","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Geospatial Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Interested in Plotly and Dash for geospatial projects and use cases? Explore these Dash data applications that take advantage of the flexibility of Python.","spans":[]}]},{"uid":"dashboards","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Data Visualization \u0026 Dashboards Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Data visualization and dashboards is what Plotly and Dash is known for. Explore several of these Python applications for data visualization and dashboards.","spans":[]}]},{"uid":"sports-analytics","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Sports Analytics Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Data analytics and data scientists meet sports fans with Dash. Explore Dash data applications that convey sports analytics using the flexibility of Python.","spans":[]}]},{"uid":"business","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Business Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Python and data science Dash applications for business-related use cases, ranging from customer segmentation, retail demand forecasting, and more.","spans":[]}]},{"uid":"energy","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Energy \u0026 Utilities Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore examples of Python and data science applications in the energy and utilities industry, including electricity, oil and gas, renewables, and more.","spans":[]}]},{"uid":"generative-ai-chatgpt","type":"explore_pages","seo_title":[{"type":"paragraph","text":"ChatGPT \u0026 Generative AI Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Dash applications that incorporate ChatGPT and generative AI in Python.","spans":[]}]},{"uid":"image-video-audio","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Image, Video \u0026 Audio Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Dash data applications that run interactive image processing, computer vision, video analysis, and audio engineering with the power of Python.","spans":[]}]},{"uid":"finance","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Finance Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore examples of Python and Dash in finance ranging from quantitative analysis, machine learning, portfolio optimization, and NLP.","spans":[]}]},{"uid":"bioinformatics","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Bioinformatics \u0026 Life Sciences Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore examples of Python in bioinformatics in a variety of applications, ranging from genomics, public health, clinical trials, 3D images, and more.","spans":[]}]},{"uid":"predictive-analytics","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Predictive Analytics Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore detailed and practical examples of Python in predictive analytics and forecasting to go beyond common BI limitations.","spans":[]}]},{"uid":"manufacturing","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Manufacturing \u0026 R\u0026D Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Python applications for manufacturing and research and development, ranging from laboratory data collection, IoT, real-time dashboards, and more.","spans":[]}]},{"uid":"connecting-to-apis","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Connecting to APIs App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Thanks to the flexibility of Python, Dash applications can connect to any API. Explore data applications that connect to external APIs and visualize data.","spans":[]}]},{"uid":"science-engineering","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Science \u0026 Engineering Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Python applications for science and engineering, including finite element method, contract for difference, physics modeling, and simulations, and more.","spans":[]}]},{"uid":"natural-language-processing","type":"explore_pages","seo_title":[{"type":"paragraph","text":"NLP Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Python data applications for natural language processing (NLP). The following Plotly and Dash applications examples will speak for themselves.","spans":[]}]},{"uid":"machine-learning","type":"explore_pages","seo_title":[{"type":"paragraph","text":"Machine Learning Dash App Examples","spans":[]}],"seo_description":[{"type":"paragraph","text":"Explore Python and Dash applications for machine learning projects, ranging in a variety of use cases from SHAP explainability, segmentation, and more.","spans":[]}]}],[{"uid":"ai-for-benchmarking-data-tools","type":"blog_page","seo_title":[{"type":"paragraph","text":"How AI is Changing the Way We Benchmark Data Tools","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Explore how AI helps you benchmark data tools, making it easy to compare Pandas, Polars, DuckDB, and SQLite on performance, APIs, and scalability.","spans":[],"direction":"ltr"}]},{"uid":"kaleido-the-next-generation","type":"blog_page","seo_title":[{"type":"paragraph","text":"Kaleido: The Next Generation of Static Image Export for Data Visualization","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Generate static images from interactive Plotly charts for your slideshow, report, academic journal, or thesis with the next generation of Kaleido.","spans":[],"direction":"ltr"}]},{"uid":"decoding-genomes-cogent3-plotly","type":"blog_page","seo_title":[{"type":"paragraph","text":"Decoding genomes with cogent3 + Plotly","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Genome data encodes life and drives bioinformatics challenges. Learn how cogent3 and Plotly help accelerate decoding genetic variants and their implications.","spans":[],"direction":"ltr"}]},{"uid":"what-is-a-data-app","type":"blog_page","seo_title":[{"type":"paragraph","text":"Complete Guide and Industry Examples. What is a Data App? ","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Modern data science teams trade static reports for interactive, collaborative, and highly custom data applications - commonly known as data apps","spans":[],"direction":"ltr"}]},{"uid":"6ix-reasons-to-choose-plotly-for-production-data-apps","type":"blog_page","seo_title":[{"type":"paragraph","text":"6ix Reasons to Choose Plotly for Production Data Apps","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Plotly was in Toronto for the AWS Summit, so we’re reflecting on the top six reasons to choose us for building dynamic data apps for production!","spans":[],"direction":"ltr"}]},{"uid":"plotly-is-switching-to-maplibre","type":"blog_page","seo_title":[{"type":"paragraph","text":"Plotly Is Switching to MapLibre as the rendering library for all","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"MapLibre is an independently-maintained fork of Mapbox GL JS v1.x, which ensures minimal changes in Plotly’s code. MapLibre also offers improved performance","spans":[],"direction":"ltr"}]},{"uid":"500-million-downloads-plotly-py","type":"blog_page","seo_title":[{"type":"paragraph","text":"Celebrating 500 Million (and counting!)","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Plotly.py, our graphing libraries, reached an incredible milestone: 500 million lifetime package downloads from PyPi. Read the blog to learn more.","spans":[],"direction":"ltr"}]},{"uid":"plotly-autotickangles-improves-axis-label-readability","type":"blog_page","seo_title":[{"type":"paragraph","text":"Autotickangles Improve Axis Label Readability - Plotly","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Learn how to optimize tick label angles in charts or graphs to prevent overlap of dense data points, improving readability of Plotly Dash charts.","spans":[],"direction":"ltr"}]},{"uid":"data-science-impact-on-portfolio-management-finance","type":"blog_page","seo_title":[{"type":"paragraph","text":"The Impact Data Science has on Portfolio Management in Finance","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Data science has specialized roles in finance, shaping how risk is managed and data is visualized. Jeff Butler, Executive Director - XVA Trading at CIBC","spans":[],"direction":"ltr"}]},{"uid":"plotly-ships-summer-release","type":"blog_page","seo_title":[{"type":"paragraph","text":"Plotly Ships: Summer Release 2024","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Discover the new collaboration features, customization options, and enhanced control measures in the latest 5.4 Plotly Dash Enterprise release.","spans":[],"direction":"ltr"}]},{"uid":"data-ai-summit-plotly-reflections","type":"blog_page","seo_title":[{"type":"paragraph","text":"Playing Plotly Hits from Data+AI Summit 2024","spans":[]}],"seo_description":[{"type":"paragraph","text":"Read about Plotly's customer stories, data and AI trends, and more buzz from the Data+AI Summit as told by Domenic Ravita, Plotly's VP of Marketing.","spans":[]}]},{"uid":"plotly-ask-ai-chatbot-for-easier-app-development","type":"blog_page","seo_title":[{"type":"paragraph","text":"Meet Your Personal Plotly “Ask AI” Chatbot for Easier Data App Development","spans":[]}],"seo_description":[{"type":"paragraph","text":"Here's how Plotly's new \"Ask AI\" chatbot answers technical questions based on LLM models trained on over 2,000 pages of documentation.","spans":[]}]},{"uid":"people-in-focus-software-engineering-app-studio","type":"blog_page","seo_title":[{"type":"paragraph","text":"People in Focus: Unveiling Opportunities as a Senior Software Engineer in App Studio","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn what it's like to work as a software engineer on Plotly's App Studio team, building the best notebook-to-app solution for data scientists.","spans":[]}]},{"uid":"build-python-web-apps-for-scikit-learn-with-plotly-dash","type":"blog_page","seo_title":[{"type":"paragraph","text":"Build Python Web Apps for scikit-learn Models with Plotly Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Easily build and deploy an interactive dashboard interface for your scikit-learn models directly on the web, with Plotly Dash.","spans":[]}]},{"uid":"ai-llm-reflections-dash-club","type":"blog_page","seo_title":[{"type":"paragraph","text":"Dash Club 12: Chris' Reflections on GenAI Dash Apps","spans":[]}],"seo_description":[{"type":"paragraph","text":"Chris Parmer, Plotly Co-Founder and Chief Product Officer, reflects on the future of AI data apps and LLMs in a world of unstructured text.","spans":[]}]},{"uid":"automate-streamline-digital-marketing-workflows-plotly-dash","type":"blog_page","seo_title":[{"type":"paragraph","text":"Automating and Streamlining Digital Marketing Workflows with Plotly and Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Automate and streamline digital marketing workflows with by building custom digital marketing data apps and dashboards using Advertools and Dash.","spans":[]}]},{"uid":"how-pharma-and-life-sciences-benefit-from-ai","type":"blog_page","seo_title":[{"type":"paragraph","text":"How Pharma and Life Sciences Are Benefiting From AI Applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover the benefits, challenges, and explore how AI benefits both employees and patients in the Pharmaceutical and Life Sciences industries.","spans":[]}]},{"uid":"how-python-can-help-with-excel","type":"blog_page","seo_title":[{"type":"paragraph","text":"How Python Can Help with Excel | Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Excel is a complicated tool with a lot of functions that aren’t always intuitive. We’ve got a few ways Python can improve Excel functions. Learn more in this article.","spans":[]}]},{"uid":"data-scientist-to-sustainability-analytics-ceo","type":"blog_page","seo_title":[{"type":"paragraph","text":"A Data Scientist's Path to Becoming the CEO","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dataphoria co-founder and CEO, Anastasis Stamatis, shares his inspiring story from data scientist to the CEO of a sustainability analytics company.","spans":[]}]},{"uid":"dash-enterprise-5.2-enables-mission-critical-data-science-decisions","type":"blog_page","seo_title":[{"type":"paragraph","text":"How Dash Enterprise 5.2 Enables Data Science Teams to Influence Mission-Critical Decisions","spans":[]}],"seo_description":[{"type":"paragraph","text":"Nicole Arksey, Group Product Manager at Plotly, shares her thoughts on the upcoming Dash Enterprise 5.2 release — and what it means for data science teams.","spans":[]}]},{"uid":"analyze-website-structure-with-dash","type":"blog_page","seo_title":[{"type":"paragraph","text":"Analyzing Website Structure With robots.txt Files and XML Sitemaps Using Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Analyze URLs and website structure with Dash for better sub-folder organization, effective content distribution, and enhanced online presence.","spans":[]}]},{"uid":"python-tools-for-data-science","type":"blog_page","seo_title":[{"type":"paragraph","text":"Python Tools for Data Science | Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Python is one of the best tools for data scientists in analyzing \u0026 developing models. Here is a list of the top 15 python tools for data scientists.","spans":[]}]},{"uid":"how-to-keep-your-data-safe-with-dash","type":"blog_page","seo_title":[{"type":"paragraph","text":"How to Keep Your Data Safe With Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how Plotly prioritizes data security as the premier platform for developing, scaling, and deploying Python-based data apps.","spans":[]}]},{"uid":"automate-excel-reports-with-python","type":"blog_page","seo_title":[{"type":"paragraph","text":"How to Automate Excel Reports Using Python | Plotly","spans":[]}],"seo_description":[{"type":"paragraph","text":"Generating Excel reports can be tedious \u0026 time-consuming, but there’s a solution. Automating your reports using Python. Learn more.","spans":[]}]},{"uid":"sankey-diagrams","type":"blog_page","seo_title":[{"type":"paragraph","text":"Deep Dive on Sankey Diagrams","spans":[]}],"seo_description":[{"type":"paragraph","text":"By leveraging these best practices and the provided code, you can harness the power of Sankey Diagrams to gain insights from data. Learn more in this Plotly article.","spans":[]}]},{"uid":"build-dash-data-apps-data-science-consultant","type":"blog_page","seo_title":[{"type":"paragraph","text":"Building Plotly Dash Data Applications as a Data Science Consultant","spans":[]}],"seo_description":[{"type":"paragraph","text":"Arne Petter, Data Science consultant, chats about his experience building data apps with Dash Enterprise for internal and external clients alike.","spans":[]}]},{"uid":"building-unit-tests-for-dash-applications","type":"blog_page","seo_title":[{"type":"paragraph","text":"Building Unit Tests for Dash Applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Ease the learning curve of unit testing your Dash applications with this tutorial by Mario Rodríguez Ibáñez, Plotly Professional Services team.","spans":[]}]},{"uid":"performance-optimization-geospatial","type":"blog_page","seo_title":[{"type":"paragraph","text":"Performance Optimizations for Geospatial Dash Apps","spans":[]}],"seo_description":[{"type":"paragraph","text":"Plotly Professional Services team shares how to effectively visualize geospatial datasets in data apps, specifically for vector, polygon data.","spans":[]}]},{"uid":"introduction-to-data-science-in-finance","type":"blog_page","seo_title":[{"type":"paragraph","text":"Introduction to Data Science in Finance","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dive into the world of data science in finance, where analytics and insights reshape the future of financial decision-making and innovation.","spans":[]}]},{"uid":"dash-matplotlib","type":"blog_page","seo_title":[{"type":"paragraph","text":"Creating an Interactive Web App with Matplotlib, Python, and Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"In this blog post from Plotly Community Manager, Adam Schroeder, learn how to leverage Matplotlib's robust plots with Dash's intuitive API to create dynamic and immersive data visualizations.","spans":[]}]},{"uid":"dash-and-github-copilot","type":"blog_page","seo_title":[{"type":"paragraph","text":"Dash + GitHub Copilot = Easier and Faster Data App Building","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how to accelerate data app creation using GitHub Copilot with Dash Open Source and Dash Enterprise Solutions, for streamlined development.","spans":[]}]},{"uid":"low-code-vs-no-code-data-app-development","type":"blog_page","seo_title":[{"type":"paragraph","text":"What’s Better: Low-Code or No-Code Data App Development?","spans":[]}],"seo_description":[{"type":"paragraph","text":"We explore how to choose between low-code and no-code for data app development, offering insights to streamline data into production-ready apps.","spans":[]}]},{"uid":"dash-strava","type":"blog_page","seo_title":[{"type":"paragraph","text":"Reflections from an Athlete — Dash feat. Strava","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover how Anna Riley, Plotly Professional Services team member and athlete, visualized her Strava data in just two weeks with Dash.","spans":[]}]},{"uid":"partial-properties","type":"blog_page","seo_title":[{"type":"paragraph","text":"Partial Property Updates: Extending Full-Stack Development with Python","spans":[]}],"seo_description":[{"type":"paragraph","text":"In this blog post from Plotly's CPO and the Creator of Dash, Chris Parmer, learn how Partial Property Updates offers substantial data app performance improvements.","spans":[]}]},{"uid":"polars-to-build-fast-dash-apps-for-large-datasets","type":"blog_page","seo_title":[{"type":"paragraph","text":"How Polars Can Help You Build Fast Dash Apps for Large Datasets","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover the power of leveraging Polars in lightning-fast Dash apps for visualizing and analyzing large data sets in your production environment.","spans":[]}]},{"uid":"dash-enterprise-security-soc-2-type-2","type":"blog_page","seo_title":[{"type":"paragraph","text":"Enhanced Security and Reliability: Plotly Is SOC 2 Type II Compliant","spans":[]}],"seo_description":[{"type":"paragraph","text":"Plotly is now SOC2 Type I and Type II compliant. Learn how this helps protect customer assets and data sources when using Plotly products.","spans":[]}]}],[{"uid":"singapore-institute-for-clinical-sciences-sics","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Singapore Institute for Clinical Sciences Enables Open Sharing of Health Research with Interactive Data Vault Platform","spans":[]}],"seo_description":[{"type":"paragraph","text":"SICS shares cohort data with the global research community by deploying data catalogs, analytics, and research to an interactive data vault platform.","spans":[]}]},{"uid":"johnson-matthey","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Johnson Matthey Scales Commercial Scientific App Platform with Dash Enterprise","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Johnson Matthey delivers state-of-the-art imaging data science to aid research and development with Dash Enterprise and Azure.","spans":[],"direction":"ltr"}]},{"uid":"automotive-capacity-planning-cox-auto","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Largest U.S. Automotive Auction Network Deploys Capacity Planning with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how Cox Automotive leverages the power of Dash Enterprise to deliver mission-critical capacity planning analytics that accelerate business decisions.","spans":[]}]},{"uid":"nhs-foundation-trust-healthcare","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"NHS Foundation Trust Unlocks AI Healthcare Potential with Dash Enterprise","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Somerset NHS Foundation Trust used Plotly Dash Enterprise to quickly build and deploy AI data apps for heathcare provider and organizational needs.","spans":[],"direction":"ltr"}]},{"uid":"berkeley-lab","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Berkeley Lab Powers Worldwide Materials Research with Dash and Python","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Berkeley Lab's team utilizes interactive Dash apps and components to explore and analyze nearly 150,000 inorganic materials and their associated properties. ","spans":[]}]},{"uid":"kansas-city-chiefs","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Kansas City Chiefs Champion Digital Transformation in Business and Operations","spans":[]}],"seo_description":[{"type":"paragraph","text":"Investing in Dash Enterprise provided a unified analytics platform for the Kansas City Chiefs' analytics team to address diverse use cases.","spans":[]}]},{"uid":"dr-reddys-laboratories-automates-pharmaceutical-regulatory-reporting-with-plotly","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Dr. Reddy's Laboratories Automates Pharmaceutical Regulatory Reporting with Plotly","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Dr. Reddy's Laboratories uses Plotly to aggregate and distribute marketing intelligence and regulatory data from multiple data sources into GCP.","spans":[],"direction":"ltr"}]},{"uid":"bio-pharma-cfd-nova-labs","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"NovaLabs facilitates access to the most popular CFD methodology for stirred reactor scaling using Plotly Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Read the story: saving time and costs and increasing ease of access to CFD for pharmaceutical companies with CliqScale.R developed with Plotly’s Dash.","spans":[]}]},{"uid":"cibc","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"CIBC Drives ML-Powered Quant Analytics with Plotly Dash Enterprise and Databricks","spans":[]}],"seo_description":[{"type":"paragraph","text":"CIBC Capital Markets deploys production-grade data apps with quantitative analytics and machine learning models to Sales and Trading desks.","spans":[]}]},{"uid":"pairwise","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Pairwise Accelerates Food and Tech Innovation with Python and Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"U.S. Food Tech startup Pairwise sees 10x scalability of molecular screening pipeline with Dash Enterprise for innovative scientific analytics.","spans":[]}]},{"uid":"federal-power-provider","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Federal Power Provider Saves Time and Costs on Nuclear Site Operations and Maintenance With Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how a U.S. federal power provider adopted advanced analytics for nuclear plant mapping and intelligent text analysis using Dash Enterprise.","spans":[]}]},{"uid":"property-management-analytics-pricelabs","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"PriceLabs creates custom platform for vacation property management analytics","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover how PriceLabs chose Python analytics over traditional BI software for custom parametrization and robust, relevant, real-time analytics.","spans":[]}]},{"uid":"education-sidmach","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Sidmach launches AI-driven Edustat platform built with Plotly Dash Enterprise and Azure Databricks","spans":[]}],"seo_description":[{"type":"paragraph","text":"Dash Enterprise front-end framework and Databricks back-end architecture empower Sidmach to develop and launch AI-powered educational platform.","spans":[]}]},{"uid":"iot-gamuda","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Gamuda develops tunnel boring machine IoT solution with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Gamuda pairs Python and Dash with sensor data to build real-time monitoring for the world’s first Autonomous Tunnel Boring Machine (A-TBM) effort.","spans":[]}]},{"uid":"fetch-rewards","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Fetch Integrates Plotly Dash With Snowflake to Power a Comprehensive Self-Service Analytics Platform","spans":[]}],"seo_description":[{"type":"paragraph","text":"Fetch Rewards develops self-service production-grade data applications for its Analytics Hub platform using Plotly Dash and Snowflake.","spans":[]}]},{"uid":"sp-global","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"S\u0026P Global Market Intelligence Powers 'Workbench Data Apps' Commercial Offering using Plotly with Databricks","spans":[]}],"seo_description":[{"type":"paragraph","text":"S\u0026P Global's rapid development and evolution of Workbench Data Applications derived from massive, aggregated datasets with Plotly and Databricks.","spans":[]}]},{"uid":"biopharma-single-cell-data-visualization","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Single Cell Data Visualization in Multinational Biopharma Org’s Fight Against Disease","spans":[]}],"seo_description":[{"type":"paragraph","text":"How can building a single cell RNA sequencing visualizer with Plotly Dash save hours of app development time? Read the story to learn more.","spans":[]}]},{"uid":"wpo-energy","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"WPO Leads Renewable Energy Asset Management with Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Largest independent European asset management firm, WPO, offers fit-for-purpose data analytics spanning six gigawatts of global renewables sites.","spans":[]}]},{"uid":"ai-supply-chain-aioneers","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"aioneers Builds AI-Driven Supply Chain Intelligence Platform with Plotly Dash and Azure Databricks","spans":[]}],"seo_description":[{"type":"paragraph","text":"aioneers’ AI supply chain intelligence platform pushes past legacy BI with Plotly Dash and Azure Databricks for actionable machine learning insights.","spans":[]}]},{"uid":"crant-ai","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"How Crant Automated AI-driven Insight for Brand Building with Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"How Crant, an AI company, reduced weekly analysis time by 28 hours and processed social media data to produce daily metrics with Dash Enterprise.","spans":[]}]},{"uid":"chesapeake-energy","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Chesapeake Energy Creates Real-Time Data Applications for Mission-Critical KPIs using Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how Chesapeake Energy implemented Dash Enterprise to address challenges related to real-time data visualizations and secure mobile access.","spans":[]}]},{"uid":"renewable-energy-nrel","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"National Renewable Energy Laboratory Mobilizes Dash for Wind Turbine Wake Research","spans":[]}],"seo_description":[{"type":"paragraph","text":"National Renewable Energy Laboratory builds custom preprocessing interface to instantly rerun wind turbine wake steering models and hypotheses.","spans":[]}]},{"uid":"gamma-tech","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Gamma Technologies and Plotly Partner on Updates to Industry-Leading Engineering Simulation Platform","spans":[]}],"seo_description":[{"type":"paragraph","text":"Gamma Technologies partners with Plotly Professional Services to support automated chart creation in their simulation platform.","spans":[]}]},{"uid":"komatsu","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Komatsu Develops Advanced Analytics and Reporting Applications With Dash Enterprise and Snowflake","spans":[]}],"seo_description":[{"type":"paragraph","text":"Komatsu uses Dash Enterprise to build custom data applications with Snowflake for insight generation, fault detection, and contextualizing machine behavior.","spans":[]}]},{"uid":"public-utility-dash-enterprise","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Public utility organization reduces work order overdue rate by 87% with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Read the story of how within one year of switching to Dash Enterprise, a North American public utilities org reduced customer complaints by 10x.","spans":[]}]},{"uid":"supply-chain-nisci","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"NISCI Develops Supply Chain Applications With Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Read how NISCI deployed production-grade, interactive ship cargo optimization and distribution network planning applications with Dash Enterprise.","spans":[]}]},{"uid":"uniper","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Uniper accelerates digital innovation in trading business with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover how Dash Enterprise facilitates decision-support tool development aligning with Uniper's production deployment and security standards.","spans":[]}]},{"uid":"martin-engineering","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Martin Engineering Optimizes Customer Site Up-time and Safety with Predictive Maintenance and Remote Monitoring Applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Martin Engineering uses Dash Enterprise to develop and deploy production-grade data applications from on-site manufacturing equipment sensors.","spans":[]}]},{"uid":"energy-uk-power-networks","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"UK Power Networks Utilizes Dash Enterprise and Databricks in Drive to Save Customers More Than £400MM","spans":[]}],"seo_description":[{"type":"paragraph","text":"UK Power Networks developed ML-powered models to predict electricity demand peaks and inform network reliability upgrade investment decisions.","spans":[]}]},{"uid":"quantitative-analytics-financial-services-institution","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Scaling Quantitative Analytics at a Global Financial Services Institution with Python and Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"How the Portfollio Analytics team built a platform to facilitate and standardize analytic app development at a global financial services org.","spans":[]}]},{"uid":"intuit","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Intuit Reduces Experiment Runtime More Than 50% with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Here's how financial technology company Intuit achieved 50% faster experiments with Python and Dash Enterprise, increasing analyst productivity.","spans":[]}]},{"uid":"sports-analytics-utah-jazz","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Dash Enterprise for Sports Analytics with Utah Jazz","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how the Basketball Analytics Group on the Utah Jazz team is bringing powerful Python analytics to the NBA with Dash Enterprise.","spans":[]}]},{"uid":"predictive-analytics-multinational-telecom","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Predictive Analytics at Multinational Telecommunications Firm Accelerates Digital Transformation with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Major telecommunications firm uses Dash Enterprise to develop a Python-based analytics platform to better track internal ROI and decisions.","spans":[]}]},{"uid":"dash-enterprise-covid","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Dash Enterprise in the Fight Against COVID-19","spans":[]}],"seo_description":[{"type":"paragraph","text":"A digital pharmaceutical company takes action with Dash Enterprise to visualize thousands of drug compound results in the wake of COVID-19.","spans":[]}]},{"uid":"equinor-energy","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Equinor develops a visualization platform utilizing Dash","spans":[]}],"seo_description":[{"type":"paragraph","text":"Discover how Equinor meets the energy needs of over 170 million people each day by operationalizing data science with Plotly Dash Enterprise.","spans":[]}]},{"uid":"denver-regional-transport","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"Denver Regional Transportation District builds accessible ride logistics with Dash Enterprise","spans":[]}],"seo_description":[{"type":"paragraph","text":"Denver-RTD creates a ride-planning app to assist passengers with disabilities on 2,000 rides daily, with mobile-friendly GUIs written in Python.","spans":[]}]},{"uid":"behavioral-health-holmusk","type":"ungated_stories","seo_title":[{"type":"paragraph","text":"NeuroBlu Analytics Platform Delivers Flexibility and Data-Driven Insight to Healthcare Stakeholders","spans":[]}],"seo_description":[{"type":"paragraph","text":"Learn how Holmusk uses Dash Enterprise and Databricks for faster development, decision-making, and deployment of their NeuroBlu analytics platform.","spans":[]}]}],[{"uid":"retail-data-apps","type":"solutions","seo_title":[{"type":"paragraph","text":"Retail | Production-grade data applications","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Advanced, real-time analytics for retail. Professional data apps for supply chain optimization, demand forecasting, inventory management, and more.","spans":[],"direction":"ltr"}]},{"uid":"finance","type":"solutions","seo_title":[{"type":"paragraph","text":"Finance | Production-grade data applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Real-time insights, automated processes, and rapid, secure deployment for financial data applications used by Finance teams with Dash Enterprise.","spans":[]}]},{"uid":"aerospace-defense","type":"solutions","seo_title":[{"type":"paragraph","text":"Aerospace and Defense | Production-grade data applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Rapid deployment, complex data visualizations, and custom analytics for aerospace and defense data applications.","spans":[]}]},{"uid":"manufacturing","type":"solutions","seo_title":[{"type":"paragraph","text":"Manufacturing | Production-grade data applications","spans":[],"direction":"ltr"}],"seo_description":[{"type":"paragraph","text":"Real-time insights, automated processes, and rapid, secure deployment for data applications used by Manufacturing teams with Dash Enterprise.","spans":[],"direction":"ltr"}]},{"uid":"energy","type":"solutions","seo_title":[{"type":"paragraph","text":"Energy | Production-grade data applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Secure, reliable advanced analytics in real time, allowing remote access and cross-device compatibility, for professionals in the energy sector.","spans":[]}]},{"uid":"healthcare-life-sciences-pharma","type":"solutions","seo_title":[{"type":"paragraph","text":"Healthcare and Life Sciences | Production-grade data applications","spans":[]}],"seo_description":[{"type":"paragraph","text":"Rapid deployment, complex data visualizations, and custom analytics for healthcare, life sciences, and pharmaceutical data applications.","spans":[]}]}],[{"uid":"https://plotly.com/graphing-libraries/","type":"external_page","seo_title":[{"text":"Graphing Libraries"}],"seo_description":[{"text":"Graphing Libraries"}]},{"uid":"https://dash.gallery/Portal/","type":"external_page","seo_title":[{"text":"Galleries"}],"seo_description":[{"text":"Galleries"}]},{"uid":"https://dash.plotly.com/","type":"external_page","seo_title":[{"text":"Dash Documentation"}],"seo_description":[{"text":"Dash Documentation"}]},{"uid":"https://dash.plotly.com/dash-enterprise","type":"external_page","seo_title":[{"text":"Dash Enterprise"}],"seo_description":[{"text":"Dash Enterprise"}]},{"uid":"https://community.plotly.com/","type":"external_page","seo_title":[{"text":"Community forum"}],"seo_description":[{"text":"Community forum"}]}]],"mainMenuData":{"id":"YXohqBEAACQABIA3","uid":"header","url":null,"type":"header","href":"https://plotly-marketing-website-2.cdn.prismic.io/api/v2/documents/search?ref=Z0ZkvREAACAAtL1G\u0026q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22YXohqBEAACQABIA3%22%29+%5D%5D","tags":[],"first_publication_date":"2021-10-28T04:06:04+0000","last_publication_date":"2024-11-18T23:35:32+0000","slugs":["header"],"linked_documents":[],"lang":"en-us","alternate_languages":[],"data":{"favicon":{"dimensions":{"width":67,"height":67},"alt":"Plotly","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/798854a2-209b-4e03-959f-965613354c4f_favicon_new_white.png?auto=compress,format","id":"YyHGKhAAACQANlDB","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"favicon_light":{"dimensions":{"width":150,"height":150},"alt":null,"copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/91b2540e-f108-48c0-b155-16498a8ec346_favicon_plotly.svg","id":"ZfysbxIAACAA7iUp","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"logo":{"dimensions":{"width":300,"height":83},"alt":"Plotly","copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/8f977c91-7b4e-4367-8228-26fbba2506e4_69e12d6a-fb65-4b6e-8423-9465a29c6028_plotly-logo-sm.png?auto=compress,format","id":"Yw7PUBAAACcAH7ra","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"logo_light":{"dimensions":{"width":300,"height":83},"alt":"Plotly","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/b3d3a2b1-49f9-4e74-93dc-070b266a54ba_plotly_logo.svg","id":"YtkLkBEAAIFVEe01","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"body":[{"primary":{"label":"Products \u0026 Services","link":[{"type":"paragraph","text":"","spans":[]}],"block_image":{"dimensions":{"width":150,"height":150},"alt":"Dash Enterprise Overview","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/ZszVeUaF0TcGJZ7W_DashEnterpriseicon-1-.svg","id":"ZszVeUaF0TcGJZ7W","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"block_text":[{"type":"paragraph","text":"Dash Enterprise Overview","spans":[]}],"block_link":{"id":"YbAkPBAAACEAzqkL","type":"pages","tags":[],"lang":"en-us","slug":"overview-of-dash--dash-apps","first_publication_date":"2021-12-08T03:20:07+0000","last_publication_date":"2024-11-13T18:40:45+0000","uid":"dash","link_type":"Document","isBroken":false},"highlighted_image":{},"highlighted_title":null,"highlighted_link_name":null,"highlighted_link":{"link_type":"Any"},"by_category":true},"items":[{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"NEW","spans":[]}],"label":"Plotly App Studio","link":[{"type":"paragraph","text":"https://plotly.com/dash/app-studio/","spans":[{"start":0,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/app-studio/"}}]}],"description":null,"category_name":"Accelerated Development"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"NEW","spans":[]}],"label":"Chatbot Builder","link":[{"type":"paragraph","text":"https://plotly.com/dash/chatbot-builder/","spans":[{"start":0,"end":40,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/chatbot-builder/"}}]}],"description":null,"category_name":"Accelerated Development"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"Data App Workspaces","link":[{"type":"paragraph","text":"https://plotly.com/dash/workspaces/","spans":[{"start":0,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/workspaces/"}}]}],"description":null,"category_name":"Accelerated Development"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"Snapshot Engine","link":[{"type":"paragraph","text":"https://plotly.com/dash/snapshot-engine/","spans":[{"start":0,"end":40,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/snapshot-engine/"}}]}],"description":null,"category_name":"Accelerated Development"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"Design Kit","link":[{"type":"paragraph","text":"https://plotly.com/dash/design-kit/","spans":[{"start":0,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/design-kit/"}}]}],"description":null,"category_name":"Accelerated Development"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"Centralized Deployment","link":[{"type":"paragraph","text":"https://plotly.com/dash/centralized-data-app-management/","spans":[{"start":0,"end":56,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/centralized-data-app-management/"}}]}],"description":null,"category_name":"Deployment \u0026 Scaling"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"App Manager","link":[{"type":"paragraph","text":"https://plotly.com/dash/app-manager/","spans":[{"start":0,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/app-manager/"}}]}],"description":null,"category_name":"Deployment \u0026 Scaling"},{"image":{},"image_light":{},"tag":[],"label":"Background Jobs \u0026 Queuing","link":[{"type":"paragraph","text":"https://plotly.com/dash/job-queue/","spans":[{"start":0,"end":34,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/job-queue/"}}]}],"description":null,"category_name":"Deployment \u0026 Scaling"},{"image":{},"image_light":{},"tag":[],"label":"Embedding","link":[{"type":"paragraph","text":"https://plotly.com/dash/embedding/","spans":[{"start":0,"end":34,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/embedding/"}}]}],"description":null,"category_name":"Deployment \u0026 Scaling"},{"image":{},"image_light":{},"tag":[],"label":"Persistent Filesystem","link":[{"type":"paragraph","text":"https://plotly.com/dash/persistent-filesystem/","spans":[{"start":0,"end":46,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/persistent-filesystem/"}}]}],"description":null,"category_name":"Deployment \u0026 Scaling"},{"image":{},"image_light":{},"tag":[],"label":"Authentication Middleware","link":[{"type":"paragraph","text":"https://plotly.com/dash/authentication/","spans":[{"start":0,"end":39,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/authentication/"}}]}],"description":null,"category_name":"Enterprise IT Integration"},{"image":{},"image_light":{},"tag":[],"label":"Database Integration","link":[{"type":"paragraph","text":"https://plotly.com/dash/big-data-for-python/?tab=connect-any-data-pipeline#bigDataTabs","spans":[{"start":0,"end":86,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/big-data-for-python/?tab=connect-any-data-pipeline#bigDataTabs"}}]}],"description":null,"category_name":"Enterprise IT Integration"},{"image":{},"image_light":{},"tag":[],"label":"Databricks Integration","link":[{"type":"paragraph","text":"https://plotly.com/dash/databricks/","spans":[{"start":0,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/databricks/"}}]}],"description":null,"category_name":"Enterprise IT Integration"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"CI/CD Integration","link":[{"type":"paragraph","text":"https://plotly.com/dash/continuous-integration/","spans":[{"start":0,"end":47,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/continuous-integration/"}}]}],"description":null,"category_name":"Enterprise IT Integration"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"","spans":[]}],"label":"Security \u0026 Compliance","link":[{"type":"paragraph","text":"https://plotly.com/security/","spans":[{"start":0,"end":28,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/security/"}}]}],"description":null,"category_name":"Enterprise IT Integration"},{"image":{},"image_light":{},"tag":[{"type":"paragraph","text":"NEW","spans":[],"direction":"ltr"}],"label":"Data Sources","link":[{"type":"paragraph","text":"https://plotly.com/dash/data-sources/","spans":[],"direction":"ltr"}],"description":null,"category_name":"Enterprise IT Integration"},{"image":{"dimensions":{"width":150,"height":150},"alt":"Customer Success Icon","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/ZlULJ6WtHYXtT1O4_Frame31.svg","id":"ZlULJ6WtHYXtT1O4","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Customer Success","link":[{"type":"paragraph","text":"https://plotly.com/customer-success/","spans":[{"start":0,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/customer-success/"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"Professional Services Icon","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/ZldKuaWtHYXtT58h_professionalservices.svg","id":"ZldKuaWtHYXtT58h","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Professional Services","link":[{"type":"paragraph","text":"https://plotly.com/consulting-and-oem/","spans":[{"start":0,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/consulting-and-oem/","target":"_self"}}],"direction":"ltr"}],"description":null,"category_name":null}],"id":"menu$2e8ae0f7-1d17-4237-8c79-098d2e6df046","slice_type":"menu","slice_label":null},{"primary":{"label":"Docs","link":[],"block_image":{},"block_text":[],"block_link":{"link_type":"Any"},"highlighted_image":{},"highlighted_title":null,"highlighted_link_name":null,"highlighted_link":{"link_type":"Any"},"by_category":false},"items":[{"image":{"dimensions":{"width":150,"height":150},"alt":"Dash Enterprise","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/248c1e4e-e016-4c46-b926-bde97e9c69e1_doc_dropdown_icons-01.svg","id":"YjGN-BAAACEAOnmg","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Dash Enterprise","link":[{"type":"paragraph","text":"https://dash.plotly.com/dash-enterprise","spans":[{"start":0,"end":39,"type":"hyperlink","data":{"link_type":"Web","url":"https://dash.plotly.com/dash-enterprise","target":"_blank"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"Dash Open Source","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/6ed94409-6d3d-4a12-bfd0-e9f4288d7eee_doc_dropdown_icons-02.svg","id":"YjGN9xAAACIAOnme","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Dash Open Source","link":[{"type":"paragraph","text":"https://dash.plotly.com/","spans":[{"start":0,"end":24,"type":"hyperlink","data":{"link_type":"Web","url":"https://dash.plotly.com/","target":"_blank"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"Graphing Libraries","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/07c24e0c-9304-4666-9f6b-4483c3defef7_doc_dropdown_icons-03.svg","id":"YjGN9xAAACIAOnmf","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Graphing Libraries","link":[{"type":"paragraph","text":"https://plotly.com/graphing-libraries/","spans":[{"start":0,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/graphing-libraries/","target":"_blank"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"Forum","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/8c22dbd4-2e64-41a0-841d-d42679c66108_doc_dropdown_icons-04.svg","id":"YjGN9xAAACEAOnmd","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Community","link":[{"type":"paragraph","text":"https://community.plotly.com/","spans":[{"start":0,"end":29,"type":"hyperlink","data":{"link_type":"Web","url":"https://community.plotly.com/","target":"_blank"}}]}],"description":null,"category_name":null}],"id":"menu$86c44501-8398-4ad1-80b5-a41474357e05","slice_type":"menu","slice_label":null},{"primary":{"label":"Example Apps","link":[{"type":"paragraph","text":"https://plotly.com/examples/","spans":[{"start":0,"end":28,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/examples/"}}]}],"block_image":{},"block_text":[],"block_link":{"link_type":"Any"},"highlighted_image":{},"highlighted_title":null,"highlighted_link_name":null,"highlighted_link":{"link_type":"Any"},"by_category":false},"items":[],"id":"menu$2e2b4444-4845-4837-985b-1938a7915b61","slice_type":"menu","slice_label":null},{"primary":{"label":"Resources","link":[],"block_image":{},"block_text":[],"block_link":{"link_type":"Any"},"highlighted_image":{},"highlighted_title":null,"highlighted_link_name":null,"highlighted_link":{"link_type":"Any"},"by_category":false},"items":[{"image":{"dimensions":{"width":150,"height":150},"alt":"User story icon","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/ZlUKvKWtHYXtT1Oy_Frame29.svg?auto=compress,format","id":"ZlUKvKWtHYXtT1Oy","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"image_light":{},"tag":[],"label":"User Stories","link":[{"type":"paragraph","text":"https://plotly.com/user-stories/","spans":[],"direction":"ltr"}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"Events Icon","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/ZlUK5qWtHYXtT1O2_Frame30.svg","id":"ZlUK5qWtHYXtT1O2","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Events","link":[{"type":"paragraph","text":"https://plotly.com/events/","spans":[{"start":0,"end":26,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/events/"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"WEBINARS","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/0dd399cc-96c3-41d7-9133-de4a1aa60295_company_dropdown_icon-04.svg","id":"YkJtzRAAAB8AhTD5","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Webinars","link":[{"type":"paragraph","text":"https://plotly.com/resources/webinars/","spans":[{"start":0,"end":38,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/resources/webinars/"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"BLOG","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/9a1aabd8-6513-4d63-9219-6c0a63f4bb2a_company_dropdown_icon-05.svg","id":"YgTBpBIAACAAgPnn","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"Blog","link":[{"type":"paragraph","text":"https://plotly.com/blog/","spans":[{"start":0,"end":24,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/blog/"}}]}],"description":null,"category_name":null},{"image":{"dimensions":{"width":150,"height":150},"alt":"White Papers","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/0148d187-07c6-4448-8b14-69e91975ff9b_company_dropdown_icon-03.svg","id":"YgTBkRIAACIAgPmV","edit":{"x":0,"y":0,"zoom":1,"background":"#fff"}},"image_light":{},"tag":[],"label":"White Papers","link":[{"type":"paragraph","text":"https://plotly.com/resources/","spans":[{"start":0,"end":29,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/resources/"}}]}],"description":null,"category_name":null}],"id":"menu$1240e3fc-053c-4009-af3a-32e163e24bba","slice_type":"menu","slice_label":null},{"primary":{"label":"Solutions","link":[{"type":"paragraph","text":"","spans":[]}],"block_image":{"dimensions":{"width":150,"height":150},"alt":"Customer Use Cases","copyright":null,"url":"https://plotly-marketing-website-2.cdn.prismic.io/plotly-marketing-website-2/ZszVuUaF0TcGJZ7p_CustomerUseCases-1-.svg","id":"ZszVuUaF0TcGJZ7p","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"block_text":[{"type":"paragraph","text":"Customer Use Cases","spans":[]}],"block_link":{"link_type":"Web","url":"https://plotly.com/user-stories"},"highlighted_image":{"dimensions":{"width":2000,"height":1130},"alt":null,"copyright":null,"url":"https://images.prismic.io/plotly-marketing-website-2/b88bb25f-1455-4717-b5d6-f5e508d4e96b_Kansas+CC_thumbnail-min.png?auto=compress,format","id":"ZeaDYhAAACIA80jC","edit":{"x":0,"y":0,"zoom":1,"background":"transparent"}},"highlighted_title":"Kansas City Chiefs Champion Digital Transformation in Business and Operations","highlighted_link_name":"Read The User Story","highlighted_link":{"link_type":"Web","url":"https://plotly.com/user-stories/kansas-city-chiefs/"},"by_category":true},"items":[{"image":{},"image_light":{},"tag":[],"label":"Financial Services","link":[{"type":"paragraph","text":"https://plotly.com/solutions/finance/","spans":[{"start":0,"end":37,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/solutions/finance/"}}]}],"description":null,"category_name":"Industries"},{"image":{},"image_light":{},"tag":[],"label":"Healthcare \u0026 Life Sciences","link":[{"type":"paragraph","text":"https://plotly.com/solutions/healthcare-life-sciences-pharma/","spans":[{"start":0,"end":61,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/solutions/healthcare-life-sciences-pharma/"}}]}],"description":null,"category_name":"Industries"},{"image":{},"image_light":{},"tag":[],"label":"Energy \u0026 Utilities","link":[{"type":"paragraph","text":"https://plotly.com/solutions/energy/","spans":[{"start":0,"end":36,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/solutions/energy/"}}]}],"description":null,"category_name":"Industries"},{"image":{},"image_light":{},"tag":[],"label":"Aerospace \u0026 Defense","link":[{"type":"paragraph","text":"https://plotly.com/solutions/aerospace-defense/","spans":[],"direction":"ltr"}],"description":null,"category_name":"Industries"},{"image":{},"image_light":{},"tag":[],"label":"Retail","link":[{"type":"paragraph","text":"https://plotly.com/solutions/retail-data-apps/","spans":[],"direction":"ltr"}],"description":null,"category_name":"Industries"},{"image":{},"image_light":{},"tag":[],"label":"Manufacturing","link":[{"type":"paragraph","text":"https://plotly.com/solutions/manufacturing/","spans":[],"direction":"ltr"}],"description":null,"category_name":"Industries"},{"image":{},"image_light":{},"tag":[],"label":"Gen AI and ML","link":[{"type":"paragraph","text":"https://plotly.com/dash/ai-data-apps/","spans":[],"direction":"ltr"}],"description":null,"category_name":"Solutions"},{"image":{},"image_light":{},"tag":[],"label":"Databricks","link":[{"type":"paragraph","text":"https://plotly.com/dash/databricks/","spans":[{"start":0,"end":35,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/databricks/"}}]}],"description":null,"category_name":"Solutions"},{"image":{},"image_light":{},"tag":[],"label":"Snowflake","link":[{"type":"paragraph","text":"https://plotly.com/dash/snowflake/","spans":[{"start":0,"end":34,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/dash/snowflake/"}}]}],"description":null,"category_name":"Solutions"},{"image":{},"image_light":{},"tag":[],"label":"AWS","link":[{"type":"paragraph","text":"https://plotly.com/dash/aws/","spans":[],"direction":"ltr"}],"description":null,"category_name":"Solutions"}],"id":"menu$8f505aeb-71a9-4e42-ab37-fc402f5ea2a2","slice_type":"menu","slice_label":null},{"primary":{"label":"Pricing","link":[{"type":"paragraph","text":"https://plotly.com/get-pricing/","spans":[{"start":0,"end":31,"type":"hyperlink","data":{"link_type":"Web","url":"https://plotly.com/get-pricing/"}}]}],"block_image":{},"block_text":[],"block_link":{"link_type":"Any"},"highlighted_image":{},"highlighted_title":null,"highlighted_link_name":null,"highlighted_link":{"link_type":"Any"},"by_category":false},"items":[],"id":"menu$7bb3da18-a805-4759-96b7-5ff13551eb40","slice_type":"menu","slice_label":null}],"button_label":"Demo Dash","button_link":"/get-demo/","has_top_banner":false,"promotion_text":[],"has_count_down_timer":false,"date":"2024-05-31T18:00:00+0000","text":[{"type":"paragraph","text":"Reserve your spot for the Dash Enterprise 5.2 launch event!","spans":[{"start":0,"end":17,"type":"hyperlink","data":{"link_type":"Web","url":"https://event.plotly.com/dash-enterprise","target":"_blank"}}]}],"after_note":[{"type":"paragraph","text":"","spans":[]}]}}},"__N_SSG":true},"page":"/blog/[slug]","query":{"slug":"sankey-diagrams"},"buildId":"Pfu0RjjG6b1aZQz4cwz9J","isFallback":false,"dynamicIds":[73296,26403,85404,17155,3607,18229,34798],"gsp":true,"scriptLoader":[{"id":"google-analytics","strategy":"afterInteractive","children":"\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\n j=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\n })(window,document,'script','dataLayer','GTM-N6T2RXG');\n "}]}</script><link data-next-font="size-adjust" rel="preconnect" href="/" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/02d9f9f75c65f165.css" as="style"/><link rel="stylesheet" href="/_next/static/css/02d9f9f75c65f165.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="https://cmp.osano.com/6oaqJU2PyDQy692N/b5f37218-31c6-485e-913d-d7ec6e8d0a22/osano.js" defer="" data-nscript="beforeInteractive"></script><script defer="" src="/_next/static/chunks/3296.339bd75027ddaf73.js"></script><script defer="" src="/_next/static/chunks/6403.a2687e2beb6356a4.js"></script><script defer="" src="/_next/static/chunks/5404.057688a02a6b3e78.js"></script><script defer="" src="/_next/static/chunks/7155.d640b09b2f494c9d.js"></script><script defer="" src="/_next/static/chunks/5808.3c769e24fdc5a680.js"></script><script defer="" src="/_next/static/chunks/3924.3ee51f2fd8758ccb.js"></script><script defer="" src="/_next/static/chunks/3607.2097fb93c0e1f300.js"></script><script defer="" src="/_next/static/chunks/3320.8830df50875c92fe.js"></script><script defer="" src="/_next/static/chunks/8229.0b55d196bdc14731.js"></script><script defer="" src="/_next/static/chunks/78e521c3.75a551c016e2a773.js"></script><script defer="" src="/_next/static/chunks/d7eeaac4.320d014a6fcbb825.js"></script><script defer="" src="/_next/static/chunks/1421.8a35cd8833461dd6.js"></script><script defer="" src="/_next/static/chunks/4798.2d8a3c0bed1dee63.js"></script><script src="/_next/static/chunks/webpack-2db160b08a0ac86f.js" defer=""></script><script src="/_next/static/chunks/framework-0e8d27528ba61906.js" defer=""></script><script src="/_next/static/chunks/main-b4b7f66f4bb01458.js" defer=""></script><script src="/_next/static/chunks/pages/_app-c7ba790674848f34.js" defer=""></script><script src="/_next/static/chunks/17007de1-56390cd97b47d65e.js" defer=""></script><script src="/_next/static/chunks/9b380ffa-cec447e94a5ce576.js" defer=""></script><script src="/_next/static/chunks/5309-ff295da2e018ee87.js" defer=""></script><script src="/_next/static/chunks/2107-fa8394f0ab78aab1.js" defer=""></script><script src="/_next/static/chunks/pages/blog/%5Bslug%5D-8e293d87f6bc08d1.js" defer=""></script><script src="/_next/static/Pfu0RjjG6b1aZQz4cwz9J/_buildManifest.js" defer=""></script><script src="/_next/static/Pfu0RjjG6b1aZQz4cwz9J/_ssgManifest.js" defer=""></script></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N6T2RXG" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><script id="chakra-script">!(function(){try{var a=function(c){var v="(prefers-color-scheme: dark)",h=window.matchMedia(v).matches?"dark":"light",r=c==="system"?h:c,o=document.documentElement,s=document.body,l="chakra-ui-light",d="chakra-ui-dark",i=r==="dark";return s.classList.add(i?d:l),s.classList.remove(i?l:d),o.style.colorScheme=r,o.dataset.theme=r,r},n=a,m="dark",e="chakra-ui-color-mode",t=localStorage.getItem(e);t?a(t):localStorage.setItem(e,a(m))}catch(a){}})();</script><div id="__next"><style data-emotion="css-global 1ja279s">:host,:root,[data-theme]{--chakra-ring-inset:var(--chakra-empty,/*!*/ /*!*/);--chakra-ring-offset-width:0px;--chakra-ring-offset-color:#fff;--chakra-ring-color:rgba(66, 153, 225, 0.6);--chakra-ring-offset-shadow:0 0 #0000;--chakra-ring-shadow:0 0 #0000;--chakra-space-x-reverse:0;--chakra-space-y-reverse:0;--chakra-colors-transparent:transparent;--chakra-colors-current:currentColor;--chakra-colors-black:#fff;--chakra-colors-white:#fff;--chakra-colors-whiteAlpha-50:rgba(255, 255, 255, 0.04);--chakra-colors-whiteAlpha-100:rgba(255, 255, 255, 0.06);--chakra-colors-whiteAlpha-200:rgba(255, 255, 255, 0.08);--chakra-colors-whiteAlpha-300:rgba(255, 255, 255, 0.16);--chakra-colors-whiteAlpha-400:rgba(255, 255, 255, 0.24);--chakra-colors-whiteAlpha-500:rgba(255, 255, 255, 0.36);--chakra-colors-whiteAlpha-600:rgba(255, 255, 255, 0.48);--chakra-colors-whiteAlpha-700:rgba(255, 255, 255, 0.64);--chakra-colors-whiteAlpha-800:rgba(255, 255, 255, 0.80);--chakra-colors-whiteAlpha-900:rgba(255, 255, 255, 0.92);--chakra-colors-blackAlpha-50:rgba(0, 0, 0, 0.04);--chakra-colors-blackAlpha-100:rgba(0, 0, 0, 0.06);--chakra-colors-blackAlpha-200:rgba(0, 0, 0, 0.08);--chakra-colors-blackAlpha-300:rgba(0, 0, 0, 0.16);--chakra-colors-blackAlpha-400:rgba(0, 0, 0, 0.24);--chakra-colors-blackAlpha-500:rgba(0, 0, 0, 0.36);--chakra-colors-blackAlpha-600:rgba(0, 0, 0, 0.48);--chakra-colors-blackAlpha-700:rgba(0, 0, 0, 0.64);--chakra-colors-blackAlpha-800:rgba(0, 0, 0, 0.80);--chakra-colors-blackAlpha-900:rgba(0, 0, 0, 0.92);--chakra-colors-gray-25:#F9F9F9;--chakra-colors-gray-50:#DFDFDF;--chakra-colors-gray-100:#EDF2F7;--chakra-colors-gray-200:#E2E8F0;--chakra-colors-gray-300:#CBD5E0;--chakra-colors-gray-400:#A0AEC0;--chakra-colors-gray-500:#575757;--chakra-colors-gray-600:#4A5568;--chakra-colors-gray-700:#2D3748;--chakra-colors-gray-800:#1A202C;--chakra-colors-gray-900:#0c0c0c;--chakra-colors-red-50:#FFF5F5;--chakra-colors-red-100:#FED7D7;--chakra-colors-red-200:#FEB2B2;--chakra-colors-red-300:#FC8181;--chakra-colors-red-400:#F56565;--chakra-colors-red-500:#E53E3E;--chakra-colors-red-600:#C53030;--chakra-colors-red-700:#9B2C2C;--chakra-colors-red-800:#822727;--chakra-colors-red-900:#63171B;--chakra-colors-red-primary:#ff3b3b;--chakra-colors-orange-50:#FFFAF0;--chakra-colors-orange-100:#FEEBC8;--chakra-colors-orange-200:#FBD38D;--chakra-colors-orange-300:#F6AD55;--chakra-colors-orange-400:#ED8936;--chakra-colors-orange-500:#DD6B20;--chakra-colors-orange-600:#C05621;--chakra-colors-orange-700:#9C4221;--chakra-colors-orange-800:#7B341E;--chakra-colors-orange-900:#652B19;--chakra-colors-yellow-50:#FFFFF0;--chakra-colors-yellow-100:#FEFCBF;--chakra-colors-yellow-200:#FAF089;--chakra-colors-yellow-300:#F6E05E;--chakra-colors-yellow-400:#ECC94B;--chakra-colors-yellow-500:#D69E2E;--chakra-colors-yellow-600:#B7791F;--chakra-colors-yellow-700:#975A16;--chakra-colors-yellow-800:#744210;--chakra-colors-yellow-900:#5F370E;--chakra-colors-yellow-primary:#ffce55;--chakra-colors-green-50:#F0FFF4;--chakra-colors-green-100:#C6F6D5;--chakra-colors-green-200:#9AE6B4;--chakra-colors-green-300:#68D391;--chakra-colors-green-400:#48BB78;--chakra-colors-green-500:#38A169;--chakra-colors-green-600:#2F855A;--chakra-colors-green-700:#276749;--chakra-colors-green-800:#22543D;--chakra-colors-green-900:#1C4532;--chakra-colors-green-primary:#4bbf64;--chakra-colors-teal-50:#E6FFFA;--chakra-colors-teal-100:#B2F5EA;--chakra-colors-teal-200:#81E6D9;--chakra-colors-teal-300:#4FD1C5;--chakra-colors-teal-400:#38B2AC;--chakra-colors-teal-500:#319795;--chakra-colors-teal-600:#2C7A7B;--chakra-colors-teal-700:#285E61;--chakra-colors-teal-800:#234E52;--chakra-colors-teal-900:#1D4044;--chakra-colors-blue-50:#ebf8ff;--chakra-colors-blue-100:#bee3f8;--chakra-colors-blue-200:#90cdf4;--chakra-colors-blue-300:#63b3ed;--chakra-colors-blue-400:#4299e1;--chakra-colors-blue-500:#3182ce;--chakra-colors-blue-600:#2b6cb0;--chakra-colors-blue-700:#2c5282;--chakra-colors-blue-800:#2a4365;--chakra-colors-blue-900:#1A365D;--chakra-colors-blue-primary:#3479f3;--chakra-colors-cyan-50:#EDFDFD;--chakra-colors-cyan-100:#C4F1F9;--chakra-colors-cyan-200:#9DECF9;--chakra-colors-cyan-300:#76E4F7;--chakra-colors-cyan-400:#0BC5EA;--chakra-colors-cyan-500:#00B5D8;--chakra-colors-cyan-600:#00A3C4;--chakra-colors-cyan-700:#0987A0;--chakra-colors-cyan-800:#086F83;--chakra-colors-cyan-900:#065666;--chakra-colors-cyan-primary:#00f2e4;--chakra-colors-purple-50:#FAF5FF;--chakra-colors-purple-100:#E9D8FD;--chakra-colors-purple-200:#D6BCFA;--chakra-colors-purple-300:#B794F4;--chakra-colors-purple-400:#9F7AEA;--chakra-colors-purple-500:#805AD5;--chakra-colors-purple-600:#6B46C1;--chakra-colors-purple-700:#553C9A;--chakra-colors-purple-800:#44337A;--chakra-colors-purple-900:#322659;--chakra-colors-purple-primary:#7A76FF;--chakra-colors-pink-50:#FFF5F7;--chakra-colors-pink-100:#FED7E2;--chakra-colors-pink-200:#FBB6CE;--chakra-colors-pink-300:#F687B3;--chakra-colors-pink-400:#ED64A6;--chakra-colors-pink-500:#D53F8C;--chakra-colors-pink-600:#B83280;--chakra-colors-pink-700:#97266D;--chakra-colors-pink-800:#702459;--chakra-colors-pink-900:#521B41;--chakra-colors-pink-primary:#ff2d6e;--chakra-colors-linkedin-50:#E8F4F9;--chakra-colors-linkedin-100:#CFEDFB;--chakra-colors-linkedin-200:#9BDAF3;--chakra-colors-linkedin-300:#68C7EC;--chakra-colors-linkedin-400:#34B3E4;--chakra-colors-linkedin-500:#00A0DC;--chakra-colors-linkedin-600:#008CC9;--chakra-colors-linkedin-700:#0077B5;--chakra-colors-linkedin-800:#005E93;--chakra-colors-linkedin-900:#004471;--chakra-colors-facebook-50:#E8F4F9;--chakra-colors-facebook-100:#D9DEE9;--chakra-colors-facebook-200:#B7C2DA;--chakra-colors-facebook-300:#6482C0;--chakra-colors-facebook-400:#4267B2;--chakra-colors-facebook-500:#385898;--chakra-colors-facebook-600:#314E89;--chakra-colors-facebook-700:#29487D;--chakra-colors-facebook-800:#223B67;--chakra-colors-facebook-900:#1E355B;--chakra-colors-messenger-50:#D0E6FF;--chakra-colors-messenger-100:#B9DAFF;--chakra-colors-messenger-200:#A2CDFF;--chakra-colors-messenger-300:#7AB8FF;--chakra-colors-messenger-400:#2E90FF;--chakra-colors-messenger-500:#0078FF;--chakra-colors-messenger-600:#0063D1;--chakra-colors-messenger-700:#0052AC;--chakra-colors-messenger-800:#003C7E;--chakra-colors-messenger-900:#002C5C;--chakra-colors-whatsapp-50:#dffeec;--chakra-colors-whatsapp-100:#b9f5d0;--chakra-colors-whatsapp-200:#90edb3;--chakra-colors-whatsapp-300:#65e495;--chakra-colors-whatsapp-400:#3cdd78;--chakra-colors-whatsapp-500:#22c35e;--chakra-colors-whatsapp-600:#179848;--chakra-colors-whatsapp-700:#0c6c33;--chakra-colors-whatsapp-800:#01421c;--chakra-colors-whatsapp-900:#001803;--chakra-colors-twitter-50:#E5F4FD;--chakra-colors-twitter-100:#C8E9FB;--chakra-colors-twitter-200:#A8DCFA;--chakra-colors-twitter-300:#83CDF7;--chakra-colors-twitter-400:#57BBF5;--chakra-colors-twitter-500:#1DA1F2;--chakra-colors-twitter-600:#1A94DA;--chakra-colors-twitter-700:#1681BF;--chakra-colors-twitter-800:#136B9E;--chakra-colors-twitter-900:#0D4D71;--chakra-colors-telegram-50:#E3F2F9;--chakra-colors-telegram-100:#C5E4F3;--chakra-colors-telegram-200:#A2D4EC;--chakra-colors-telegram-300:#7AC1E4;--chakra-colors-telegram-400:#47A9DA;--chakra-colors-telegram-500:#0088CC;--chakra-colors-telegram-600:#007AB8;--chakra-colors-telegram-700:#006BA1;--chakra-colors-telegram-800:#005885;--chakra-colors-telegram-900:#003F5E;--chakra-colors-app-light-star:#fff;--chakra-colors-app-light-bgThumb:#000;--chakra-colors-app-light-bgTrack:#fff;--chakra-colors-app-light-switchChecked:#575757;--chakra-colors-app-light-gradientStart:#7A76FF;--chakra-colors-app-light-gradientEnd:#00f2e4;--chakra-colors-app-light-gradientEndSecondary:#7FE4FF;--chakra-colors-app-light-bgPrimary:#fff;--chakra-colors-app-light-bgDashPost:transparent;--chakra-colors-app-light-bgSecondary:#fff;--chakra-colors-app-light-bgTertiary:#212121;--chakra-colors-app-light-bgQuaternary:#f9f9f9;--chakra-colors-app-light-textPrimary:#282D33;--chakra-colors-app-light-textSecondary:#000;--chakra-colors-app-light-textTertiary:#A2AAB8;--chakra-colors-app-light-bodyText:#5B6372;--chakra-colors-app-light-bodyTextSecondary:#919191;--chakra-colors-app-light-lines:#A2AAB8;--chakra-colors-app-light-accentPrimary:#7A76FF;--chakra-colors-app-light-accentSecondary:#3479f3;--chakra-colors-app-light-accentTertiary:#7FE4FF;--chakra-colors-app-light-accentQuaternary:#7fe4f;--chakra-colors-app-light-bulletGray:#a2aab7;--chakra-colors-app-light-greyPrimary:#f9f9f9;--chakra-colors-app-light-greySecondary:#fff;--chakra-colors-app-light-grayPrimary:#a2aab7;--chakra-colors-app-light-graySecondary:#494949;--chakra-colors-app-light-grayTertiary:#E2E8F0;--chakra-colors-app-light-grayQuaternary:#fff;--chakra-colors-app-light-grayQuinary:#D8DDE5;--chakra-colors-app-light-lightGrayPrimary:#9ba2b1;--chakra-colors-app-light-lightGraySecondary:#a3a9b7;--chakra-colors-app-light-lightGrayTertiary:#f8f8f8;--chakra-colors-app-light-linkPrimary:#7A76FF;--chakra-colors-app-light-redPrimary:#ff3b3b;--chakra-colors-app-light-yellowPrimary:#ffce55;--chakra-colors-app-light-greenPrimary:#4bbf64;--chakra-colors-app-light-pinkPrimary:#ff2d6e;--chakra-colors-app-light-border:#DFDFDF;--chakra-colors-app-light-borderSecondary:#5c5e62;--chakra-colors-app-light-borderTertiary:#282d33;--chakra-colors-app-light-borderQuarternary:#27282c;--chakra-colors-app-light-scrollbar:#555555;--chakra-colors-app-light-darkBlue:#1E3953;--chakra-colors-app-light-darkBLueSecondary:#DFDFDF;--chakra-colors-app-light-turquoise:#7A76FF;--chakra-colors-app-light-black:#fff;--chakra-colors-app-light-blackSecondary:#fff;--chakra-colors-app-light-darkGray:#19181c;--chakra-colors-app-light-codeBackground:#f3f6fb;--chakra-colors-app-light-codeBorder:#e0e8f2;--chakra-colors-app-light-codeColor:#20293d;--chakra-colors-app-light-footerLink:rgb(129 130 131 / 96%);--chakra-colors-app-light-pink:#fe2d6d;--chakra-colors-app-dark-star:#121317;--chakra-colors-app-dark-bgThumb:#000;--chakra-colors-app-dark-bgTrack:#fff;--chakra-colors-app-dark-switchChecked:#575757;--chakra-colors-app-dark-gradientStart:#7A76FF;--chakra-colors-app-dark-gradientEnd:#00f2e4;--chakra-colors-app-dark-gradientEndSecondary:#7FE4FF;--chakra-colors-app-dark-bgPrimary:#00000;--chakra-colors-app-dark-bgDashPost:#0c0c0c;--chakra-colors-app-dark-bgSecondary:#0D0E0F;--chakra-colors-app-dark-bgTertiary:#212121;--chakra-colors-app-dark-bgQuaternary:#101010;--chakra-colors-app-dark-textPrimary:#fff;--chakra-colors-app-dark-textSecondary:#000;--chakra-colors-app-dark-textTertiary:#fff;--chakra-colors-app-dark-bodyText:#A2AAB8;--chakra-colors-app-dark-bodyTextSecondary:#121317;--chakra-colors-app-dark-lines:#282d33;--chakra-colors-app-dark-accentPrimary:#7A76FF;--chakra-colors-app-dark-accentSecondary:#3479f3;--chakra-colors-app-dark-accentTertiary:#7FE4FF;--chakra-colors-app-dark-accentQuaternary:#7fe4f;--chakra-colors-app-dark-bulletGray:#a2aab7;--chakra-colors-app-dark-greyPrimary:#2A2E30;--chakra-colors-app-dark-greySecondary:#121317;--chakra-colors-app-dark-grayPrimary:#303030;--chakra-colors-app-dark-graySecondary:#494949;--chakra-colors-app-dark-grayTertiary:#E2E8F0;--chakra-colors-app-dark-grayQuaternary:#1c1c1c;--chakra-colors-app-dark-grayQuinary:#282D33;--chakra-colors-app-dark-lightGrayPrimary:#9ba2b1;--chakra-colors-app-dark-lightGraySecondary:#a3a9b7;--chakra-colors-app-dark-lightGrayTertiary:#f8f8f8;--chakra-colors-app-dark-linkPrimary:#7A76FF;--chakra-colors-app-dark-redPrimary:#ff3b3b;--chakra-colors-app-dark-yellowPrimary:#ffce55;--chakra-colors-app-dark-pinkPrimary:#ff2d6e;--chakra-colors-app-dark-greenPrimary:#4bbf64;--chakra-colors-app-dark-border:#282D33;--chakra-colors-app-dark-borderSecondary:#5c5e62;--chakra-colors-app-dark-borderTertiary:#282D33;--chakra-colors-app-dark-borderQuarternary:#27282c;--chakra-colors-app-dark-scrollbar:#555555;--chakra-colors-app-dark-darkBlue:#1E3953;--chakra-colors-app-dark-darkBLueSecondary:#17181a;--chakra-colors-app-dark-turquoise:#7A76FF;--chakra-colors-app-dark-black:#000;--chakra-colors-app-dark-blackSecondary:#101010;--chakra-colors-app-dark-darkGray:#19181c;--chakra-colors-app-dark-codeBackground:#292C33;--chakra-colors-app-dark-codeBorder:#34383F;--chakra-colors-app-dark-codeColor:#79808B;--chakra-colors-app-dark-footerLink:rgb(129 130 131 / 96%);--chakra-colors-app-dark-pink:#fe2d6d;--chakra-borders-none:0;--chakra-borders-1px:1px solid;--chakra-borders-2px:2px solid;--chakra-borders-4px:4px solid;--chakra-borders-8px:8px solid;--chakra-fonts-heading:Roboto,sans-serif;--chakra-fonts-body:Open Sans,sans-serif;--chakra-fonts-mono:Menlo,monospace;--chakra-fontSizes-3xs:10px;--chakra-fontSizes-2xs:11px;--chakra-fontSizes-xs:12px;--chakra-fontSizes-sm:13px;--chakra-fontSizes-md:14px;--chakra-fontSizes-lg:15px;--chakra-fontSizes-xl:16px;--chakra-fontSizes-2xl:18px;--chakra-fontSizes-3xl:24px;--chakra-fontSizes-4xl:28px;--chakra-fontSizes-5xl:32px;--chakra-fontSizes-6xl:36px;--chakra-fontSizes-7xl:38px;--chakra-fontSizes-8xl:46px;--chakra-fontSizes-9xl:48px;--chakra-fontSizes-4xs:9px;--chakra-fontSizes-1xl:17px;--chakra-fontSizes-2-25xl:19px;--chakra-fontSizes-2-5xl:20px;--chakra-fontSizes-2-6xl:21px;--chakra-fontSizes-2-75xl:22px;--chakra-fontSizes-3-5xl:25px;--chakra-fontSizes-4-5xl:30px;--chakra-fontSizes-5-5xl:34px;--chakra-fontSizes-7-5xl:40px;--chakra-fontSizes-9-5xl:52px;--chakra-fontSizes-10xl:77px;--chakra-fontWeights-hairline:100;--chakra-fontWeights-thin:200;--chakra-fontWeights-light:300;--chakra-fontWeights-normal:400;--chakra-fontWeights-medium:500;--chakra-fontWeights-semibold:600;--chakra-fontWeights-bold:700;--chakra-fontWeights-extrabold:800;--chakra-fontWeights-black:900;--chakra-letterSpacings-tighter:-0.05em;--chakra-letterSpacings-tight:-0.025em;--chakra-letterSpacings-normal:0;--chakra-letterSpacings-wide:0.025em;--chakra-letterSpacings-wider:0.05em;--chakra-letterSpacings-widest:0.1em;--chakra-lineHeights-3:.75rem;--chakra-lineHeights-4:1rem;--chakra-lineHeights-5:1.25rem;--chakra-lineHeights-6:1.5rem;--chakra-lineHeights-7:1.75rem;--chakra-lineHeights-8:2rem;--chakra-lineHeights-9:2.25rem;--chakra-lineHeights-10:2.5rem;--chakra-lineHeights-normal:normal;--chakra-lineHeights-none:1;--chakra-lineHeights-shorter:1.25;--chakra-lineHeights-short:1.375;--chakra-lineHeights-base:1.5;--chakra-lineHeights-tall:1.625;--chakra-lineHeights-taller:2;--chakra-radii-none:0;--chakra-radii-sm:0.125rem;--chakra-radii-base:0.25rem;--chakra-radii-md:0.375rem;--chakra-radii-lg:0.5rem;--chakra-radii-xl:0.75rem;--chakra-radii-2xl:1rem;--chakra-radii-3xl:1.5rem;--chakra-radii-full:9999px;--chakra-space-1:0.25rem;--chakra-space-2:0.5rem;--chakra-space-3:0.75rem;--chakra-space-4:1rem;--chakra-space-5:1.25rem;--chakra-space-6:1.5rem;--chakra-space-7:1.75rem;--chakra-space-8:2rem;--chakra-space-9:2.25rem;--chakra-space-10:2.5rem;--chakra-space-12:3rem;--chakra-space-14:3.5rem;--chakra-space-16:4rem;--chakra-space-20:5rem;--chakra-space-24:6rem;--chakra-space-28:7rem;--chakra-space-32:8rem;--chakra-space-36:9rem;--chakra-space-40:10rem;--chakra-space-44:11rem;--chakra-space-48:12rem;--chakra-space-52:13rem;--chakra-space-56:14rem;--chakra-space-60:15rem;--chakra-space-64:16rem;--chakra-space-72:18rem;--chakra-space-80:20rem;--chakra-space-96:24rem;--chakra-space-px:1px;--chakra-space-0-5:0.125rem;--chakra-space-1-5:0.375rem;--chakra-space-2-5:0.625rem;--chakra-space-3-5:0.875rem;--chakra-shadows-xs:0 0 0 1px rgba(0, 0, 0, 0.05);--chakra-shadows-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--chakra-shadows-base:0 1px 3px 0 rgba(0, 0, 0, 0.1),0 1px 2px 0 rgba(0, 0, 0, 0.06);--chakra-shadows-md:0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06);--chakra-shadows-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1),0 4px 6px -2px rgba(0, 0, 0, 0.05);--chakra-shadows-xl:0 20px 25px -5px rgba(0, 0, 0, 0.1),0 10px 10px -5px rgba(0, 0, 0, 0.04);--chakra-shadows-2xl:0 25px 50px -12px rgba(0, 0, 0, 0.25);--chakra-shadows-outline:0 0 0 3px rgba(66, 153, 225, 0.6);--chakra-shadows-inner:inset 0 2px 4px 0 rgba(0,0,0,0.06);--chakra-shadows-none:none;--chakra-shadows-dark-lg:rgba(0, 0, 0, 0.1) 0px 0px 0px 1px,rgba(0, 0, 0, 0.2) 0px 5px 10px,rgba(0, 0, 0, 0.4) 0px 15px 40px;--chakra-sizes-1:0.25rem;--chakra-sizes-2:0.5rem;--chakra-sizes-3:0.75rem;--chakra-sizes-4:1rem;--chakra-sizes-5:1.25rem;--chakra-sizes-6:1.5rem;--chakra-sizes-7:1.75rem;--chakra-sizes-8:2rem;--chakra-sizes-9:2.25rem;--chakra-sizes-10:2.5rem;--chakra-sizes-12:3rem;--chakra-sizes-14:3.5rem;--chakra-sizes-16:4rem;--chakra-sizes-20:5rem;--chakra-sizes-24:6rem;--chakra-sizes-28:7rem;--chakra-sizes-32:8rem;--chakra-sizes-36:9rem;--chakra-sizes-40:10rem;--chakra-sizes-44:11rem;--chakra-sizes-48:12rem;--chakra-sizes-52:13rem;--chakra-sizes-56:14rem;--chakra-sizes-60:15rem;--chakra-sizes-64:16rem;--chakra-sizes-72:18rem;--chakra-sizes-80:20rem;--chakra-sizes-96:24rem;--chakra-sizes-px:1px;--chakra-sizes-0-5:0.125rem;--chakra-sizes-1-5:0.375rem;--chakra-sizes-2-5:0.625rem;--chakra-sizes-3-5:0.875rem;--chakra-sizes-max:max-content;--chakra-sizes-min:min-content;--chakra-sizes-full:100%;--chakra-sizes-3xs:14rem;--chakra-sizes-2xs:16rem;--chakra-sizes-xs:20rem;--chakra-sizes-sm:24rem;--chakra-sizes-md:28rem;--chakra-sizes-lg:32rem;--chakra-sizes-xl:36rem;--chakra-sizes-2xl:42rem;--chakra-sizes-3xl:48rem;--chakra-sizes-4xl:56rem;--chakra-sizes-5xl:64rem;--chakra-sizes-6xl:72rem;--chakra-sizes-7xl:80rem;--chakra-sizes-8xl:90rem;--chakra-sizes-prose:60ch;--chakra-sizes-container-sm:640px;--chakra-sizes-container-md:768px;--chakra-sizes-container-lg:1024px;--chakra-sizes-container-xl:1280px;--chakra-zIndices-hide:-1;--chakra-zIndices-auto:auto;--chakra-zIndices-base:0;--chakra-zIndices-docked:10;--chakra-zIndices-dropdown:1000;--chakra-zIndices-sticky:1100;--chakra-zIndices-banner:1200;--chakra-zIndices-overlay:1300;--chakra-zIndices-modal:1400;--chakra-zIndices-popover:1500;--chakra-zIndices-skipLink:1600;--chakra-zIndices-toast:1700;--chakra-zIndices-tooltip:1800;--chakra-transition-property-common:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform;--chakra-transition-property-colors:background-color,border-color,color,fill,stroke;--chakra-transition-property-dimensions:width,height;--chakra-transition-property-position:left,right,top,bottom;--chakra-transition-property-background:background-color,background-image,background-position;--chakra-transition-easing-ease-in:cubic-bezier(0.4, 0, 1, 1);--chakra-transition-easing-ease-out:cubic-bezier(0, 0, 0.2, 1);--chakra-transition-easing-ease-in-out:cubic-bezier(0.4, 0, 0.2, 1);--chakra-transition-duration-ultra-fast:50ms;--chakra-transition-duration-faster:100ms;--chakra-transition-duration-fast:150ms;--chakra-transition-duration-normal:200ms;--chakra-transition-duration-slow:300ms;--chakra-transition-duration-slower:400ms;--chakra-transition-duration-ultra-slow:500ms;--chakra-blur-none:0;--chakra-blur-sm:4px;--chakra-blur-base:8px;--chakra-blur-md:12px;--chakra-blur-lg:16px;--chakra-blur-xl:24px;--chakra-blur-2xl:40px;--chakra-blur-3xl:64px;--chakra-breakpoints-base:0em;--chakra-breakpoints-sm:576px;--chakra-breakpoints-md:768px;--chakra-breakpoints-lg:960px;--chakra-breakpoints-xl:1200px;--chakra-breakpoints-2xl:2000px;--chakra-breakpoints-2sm:240px;--chakra-breakpoints-xxl:1800px;--chakra-breakpoints-2xxl:2300px;--chakra-colors-star:#fff;--chakra-colors-bgThumb:#000;--chakra-colors-bgTrack:#fff;--chakra-colors-switchChecked:#575757;--chakra-colors-gradientStart:#7A76FF;--chakra-colors-gradientEnd:#00f2e4;--chakra-colors-gradientEndSecondary:#7FE4FF;--chakra-colors-bgPrimary:#fff;--chakra-colors-bgPrimaryTransparent:var(--chakra-colors-transparent);--chakra-colors-bgDashPost:var(--chakra-colors-transparent);--chakra-colors-bgSecondary:#fff;--chakra-colors-bgTertiary:#212121;--chakra-colors-bgQuaternary:#f9f9f9;--chakra-colors-bgNewsArticle:#F3F3F3;--chakra-colors-bgWebinarCard:#FBFBFB;--chakra-colors-textPrimary:#282D33;--chakra-colors-textSecondary:#0000;--chakra-colors-textTertiary:#A2AAB8;--chakra-colors-bodyText:#5B6372;--chakra-colors-bodyTextSecondary:#919191;--chakra-colors-lines:#A2AAB8;--chakra-colors-accentPrimary:#7A76FF;--chakra-colors-accentSecondary:#3479f3;--chakra-colors-accentTertiary:#7FE4FF;--chakra-colors-accentQuaternary:#7fe4f;--chakra-colors-bulletGray:#a2aab7;--chakra-colors-greyPrimary:#f9f9f9;--chakra-colors-greySecondary:#fff;--chakra-colors-grayPrimary:#a2aab7;--chakra-colors-graySecondary:#494949;--chakra-colors-grayTertiary:#E2E8F0;--chakra-colors-grayQuaternary:#fff;--chakra-colors-grayQuinary:#D8DDE5;--chakra-colors-lightGrayPrimary:#9ba2b1;--chakra-colors-lightGraySecondary:#a3a9b7;--chakra-colors-lightGrayTertiary:#f8f8f8;--chakra-colors-linkPrimary:#7A76FF;--chakra-colors-linkColor:#282d33;--chakra-colors-redPrimary:#ff3b3b;--chakra-colors-yellowPrimary:#ffce55;--chakra-colors-greenPrimary:#4bbf64;--chakra-colors-pinkPrimary:#ff2d6e;--chakra-colors-border:#DFDFDF;--chakra-colors-borderSecondary:#5c5e62;--chakra-colors-borderTertiary:#282d33;--chakra-colors-borderQuarternary:#27282c;--chakra-colors-scrollbar:#555555;--chakra-colors-darkBlue:#1E3953;--chakra-colors-darkBLueSecondary:#DFDFDF;--chakra-colors-turquoise:#7A76FF;--chakra-colors-blackSecondary:#fff;--chakra-colors-darkGray:#19181c;--chakra-colors-codeBackground:#f3f6fb;--chakra-colors-codeBorder:#e0e8f2;--chakra-colors-codeColor:#20293d;--chakra-colors-radioCheck:#5B6372;--chakra-colors-aboutTitle:#ececec;--chakra-colors-footerLink:rgb(129 130 131 / 96%);--chakra-colors-pink:#fe2d6d;--chakra-colors-customGradient:linear-gradient(135deg, #7A76FF, #7A76FF, #7FE4FF);--chakra-colors-radialGradientPurple:radial-gradient(#A29FFF, transparent, transparent, transparent, transparent, transparent, transparent);--chakra-colors-radialGradientCyan:radial-gradient(#7FE4FF, transparent, transparent, transparent, transparent, transparent, transparent);--chakra-shadows-ctaButton:2px 1000px 1px #ffffff inset;--chakra-shadows-ctaButtonSecondary:2px 1000px 1px #f1fcfe inset;--chakra-shadows-ctaButtonHover:2px 1000px 1px #7A76FF inset;}.chakra-ui-dark :host:not([data-theme]),.chakra-ui-dark :root:not([data-theme]),.chakra-ui-dark [data-theme]:not([data-theme]),[data-theme=dark] :host:not([data-theme]),[data-theme=dark] :root:not([data-theme]),[data-theme=dark] [data-theme]:not([data-theme]),:host[data-theme=dark],:root[data-theme=dark],[data-theme][data-theme=dark]{--chakra-colors-black:#000;--chakra-colors-chakra-body-text:var(--chakra-colors-whiteAlpha-900);--chakra-colors-chakra-body-bg:var(--chakra-colors-gray-800);--chakra-colors-chakra-border-color:var(--chakra-colors-whiteAlpha-300);--chakra-colors-chakra-inverse-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-700);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-400);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-whiteAlpha-400);--chakra-colors-star:#121317;--chakra-colors-bgThumb:#000;--chakra-colors-bgTrack:#fff;--chakra-colors-switchChecked:#575757;--chakra-colors-gradientEndSecondary:#7FE4FF;--chakra-colors-bgPrimary:#00000;--chakra-colors-bgPrimaryTransparent:#00000;--chakra-colors-bgDashPost:#0c0c0c;--chakra-colors-bgSecondary:#0D0E0F;--chakra-colors-bgTertiary:#212121;--chakra-colors-bgQuaternary:#101010;--chakra-colors-bgNewsArticle:#0F1012;--chakra-colors-bgWebinarCard:#0E0F10;--chakra-colors-textPrimary:#fff;--chakra-colors-textSecondary:#0000;--chakra-colors-textTertiary:#fff;--chakra-colors-bodyText:#A2AAB8;--chakra-colors-bodyTextSecondary:#121317;--chakra-colors-lines:#282d33;--chakra-colors-accentPrimary:#7A76FF;--chakra-colors-accentSecondary:#3479f3;--chakra-colors-accentTertiary:#7FE4FF;--chakra-colors-accentQuaternary:#7fe4f;--chakra-colors-bulletGray:#a2aab7;--chakra-colors-greyPrimary:#2A2E30;--chakra-colors-greySecondary:#121317;--chakra-colors-grayPrimary:#303030;--chakra-colors-graySecondary:#494949;--chakra-colors-grayTertiary:#E2E8F0;--chakra-colors-grayQuaternary:#1c1c1c;--chakra-colors-grayQuinary:#282D33;--chakra-colors-lightGrayPrimary:#9ba2b1;--chakra-colors-lightGraySecondary:#a3a9b7;--chakra-colors-lightGrayTertiary:#f8f8f8;--chakra-colors-linkPrimary:#7A76FF;--chakra-colors-linkColor:#fff;--chakra-colors-redPrimary:#ff3b3b;--chakra-colors-yellowPrimary:#ffce55;--chakra-colors-greenPrimary:#4bbf64;--chakra-colors-pinkPrimary:#ff2d6e;--chakra-colors-border:#282D33;--chakra-colors-borderSecondary:#5c5e62;--chakra-colors-borderTertiary:#282D33;--chakra-colors-borderQuarternary:#27282c;--chakra-colors-scrollbar:#555555;--chakra-colors-darkBlue:#1E3953;--chakra-colors-darkBLueSecondary:#17181a;--chakra-colors-turquoise:#7A76FF;--chakra-colors-blackSecondary:#101010;--chakra-colors-darkGray:#19181c;--chakra-colors-codeBackground:#292C33;--chakra-colors-codeBorder:#34383F;--chakra-colors-codeColor:#79808B;--chakra-colors-radioCheck:#fff;--chakra-colors-aboutTitle:#fff;--chakra-colors-footerLink:rgb(129 130 131 / 96%);--chakra-colors-pink:#fe2d6d;--chakra-colors-radialGradientPurple:radial-gradient(#7A76FF, #0c0c0c, #0c0c0c, #0c0c0c, #0c0c0c, #0c0c0c, #0c0c0c);--chakra-colors-radialGradientCyan:radial-gradient(#7FE4FF, transparent, transparent, transparent, transparent, transparent, transparent);--chakra-shadows-ctaButton:2px 1000px 1px #0C0C0C inset;--chakra-shadows-ctaButtonSecondary:2px 1000px 1px #32444E inset;--chakra-shadows-ctaButtonHover:2px 1000px 1px #7A76FF inset;}.chakra-ui-light :host:not([data-theme]),.chakra-ui-light :root:not([data-theme]),.chakra-ui-light [data-theme]:not([data-theme]),[data-theme=light] :host:not([data-theme]),[data-theme=light] :root:not([data-theme]),[data-theme=light] [data-theme]:not([data-theme]),:host[data-theme=light],:root[data-theme=light],[data-theme][data-theme=light]{--chakra-colors-chakra-body-text:var(--chakra-colors-gray-800);--chakra-colors-chakra-body-bg:var(--chakra-colors-white);--chakra-colors-chakra-border-color:var(--chakra-colors-gray-200);--chakra-colors-chakra-inverse-text:var(--chakra-colors-white);--chakra-colors-chakra-subtle-bg:var(--chakra-colors-gray-100);--chakra-colors-chakra-subtle-text:var(--chakra-colors-gray-600);--chakra-colors-chakra-placeholder-color:var(--chakra-colors-gray-500);}</style><style data-emotion="css-global fubdgu">html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;touch-action:manipulation;}body{position:relative;min-height:100%;margin:0;font-feature-settings:"kern";}:where(*, *::before, *::after){border-width:0;border-style:solid;box-sizing:border-box;word-wrap:break-word;}main{display:block;}hr{border-top-width:1px;box-sizing:content-box;height:0;overflow:visible;}:where(pre, code, kbd,samp){font-family:SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:1em;}a{background-color:transparent;color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}:where(b, strong){font-weight:bold;}small{font-size:80%;}:where(sub,sup){font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}:where(button, input, optgroup, select, textarea){font-family:inherit;font-size:100%;line-height:1.15;margin:0;}:where(button, input){overflow:visible;}:where(button, select){text-transform:none;}:where( button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner ){border-style:none;padding:0;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}:where([type="checkbox"], [type="radio"]){box-sizing:border-box;padding:0;}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none!important;}input[type="number"]{-moz-appearance:textfield;}input[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}input[type="search"]::-webkit-search-decoration{-webkit-appearance:none!important;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none!important;}:where( blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre ){margin:0;}button{background:transparent;padding:0;}fieldset{margin:0;padding:0;}:where(ol, ul){margin:0;padding:0;}textarea{resize:vertical;}:where(button, [role="button"]){cursor:pointer;}button::-moz-focus-inner{border:0!important;}table{border-collapse:collapse;}:where(h1, h2, h3, h4, h5, h6){font-size:inherit;font-weight:inherit;}:where(button, input, optgroup, select, textarea){padding:0;line-height:inherit;color:inherit;}:where(img, svg, video, canvas, audio, iframe, embed, object){display:block;}:where(img, video){max-width:100%;height:auto;}[data-js-focus-visible] :focus:not([data-focus-visible-added]):not( [data-focus-visible-disabled] ){outline:none;box-shadow:none;}select::-ms-expand{display:none;}:root,:host{--chakra-vh:100vh;}@supports (height: -webkit-fill-available){:root,:host{--chakra-vh:-webkit-fill-available;}}@supports (height: -moz-fill-available){:root,:host{--chakra-vh:-moz-fill-available;}}@supports (height: 100dvh){:root,:host{--chakra-vh:100dvh;}}</style><style data-emotion="css-global e5ay2d">body{font-family:var(--chakra-fonts-body);color:var(--chakra-colors-chakra-body-text);background:var(--chakra-colors-transparent);transition-property:background-color;transition-duration:var(--chakra-transition-duration-normal);line-height:var(--chakra-lineHeights-base);-webkit-transition:all 1s linear;transition:all 1s linear;}*::-webkit-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::-moz-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*:-ms-input-placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*::placeholder{color:var(--chakra-colors-chakra-placeholder-color);}*,*::before,::after{border-color:var(--chakra-colors-chakra-border-color);}html,body{scroll-behavior:smooth;}.osano-cm-widget{display:none;}.osano-cm-view--type_consent .osano-cm-list-item:nth-child(5){display:none;}.osano-cm-window{font-family:Open Sans,sans-serif;}.osano-cm-view{padding:0 1.5em 1em;}.chakra-ui-light .osano-cm-view:not([data-theme]),[data-theme=light] .osano-cm-view:not([data-theme]),.osano-cm-view[data-theme=light]{background:#FFFFFF;}.osano-cm-link{color:#3479F3!important;font-weight:var(--chakra-fontWeights-normal);}a.osano-cm-storage-policy{color:#3479F3;}a.osano-cm-link:hover{color:#3479F3;}a.osano-cm-link:visited{color:#3479F3;}. osano-cm-info-views__view osano-cm-view osano-cm-view--active osano-cm-view--type_consent{font-size:.7em;}.osano-cm-info-dialog-header__close{color:#FFFFFF;stroke:#FFFFFF;stroke-width:2px;}.chakra-ui-light .osano-cm-info-dialog-header__close:not([data-theme]),[data-theme=light] .osano-cm-info-dialog-header__close:not([data-theme]),.osano-cm-info-dialog-header__close[data-theme=light]{color:#000;stroke:#000;}.osano-cm-info-dialog-header__close:hover{color:#FFFFFF;stroke:#FFFFFF;stroke-width:2px;}.chakra-ui-light .osano-cm-info-dialog-header__close:hover:not([data-theme]),[data-theme=light] .osano-cm-info-dialog-header__close:hover:not([data-theme]),.osano-cm-info-dialog-header__close:hover[data-theme=light]{color:#000;stroke:#000;}button.osano-cm-button{color:#FFFFFF;background-color:#3479F3;border-color:none;padding:.75em 0.5em;font-size:12px;letter-spacing:1px;line-height:16.94px;border-radius:8px;}.chakra-ui-light button.osano-cm-button:not([data-theme]),[data-theme=light] button.osano-cm-button:not([data-theme]),button.osano-cm-button[data-theme=light]{border-color:#3479F3;}div.osano-cm-powered-by{display:none;}div.osano-cm-info{height:auto;}.osano-cm-dialog{background:#17181A;padding:2em 4em 2em 3em;font-size:14px;}.osano-cm-dialog--type_bar .osano-cm-button{padding:.5em 0;font-size:12px;line-height:16.94px;font-weight:700;border-radius:8px;}.osano-cm-usage-list__list{padding-left:20px;list-style-position:outside;}.osano-cm-dialog--type_bar .osano-cm-button{width:100%;}.osano-cm-dialog--type_bar .osano-cm-dialog__buttons{margin:0 0 0 .75em;}.osano-cm-dialog__close:focus:hover{stroke:#ebebeb;}.osano-cm-close:focus,.osano-cm-close:hover{stroke-width:1px;color:#ebebeb;}.osano-cm-dialog__close:focus{background-color:var(--chakra-colors-transparent);border-color:var(--chakra-colors-transparent);stroke:#ebebeb;}.osano-cm-close{-webkit-transition:none!important;transition:none!important;margin:0.5em;min-width:15px;border-radius:var(--chakra-radii-none);background-color:var(--chakra-colors-transparent);}.osano-cm-info-dialog-header{position:relative;min-height:auto;}.osano-cm-info-dialog-header__close:focus{background-color:var(--chakra-colors-transparent);border-color:var(--chakra-colors-transparent);}.osano-cm-header,.osano-cm-info-dialog-header,.osano-cm-info-dialog-header__header{font-family:Roboto,sans-serif!important;font-weight:700!important;line-height:20px!important;font-size:20px!important;padding:0.5em 1em 0.5em .5em;}.chakra-ui-dark .osano-cm-header:not([data-theme]),.chakra-ui-dark .osano-cm-info-dialog-header:not([data-theme]),.chakra-ui-dark .osano-cm-info-dialog-header__header:not([data-theme]),[data-theme=dark] .osano-cm-header:not([data-theme]),[data-theme=dark] .osano-cm-info-dialog-header:not([data-theme]),[data-theme=dark] .osano-cm-info-dialog-header__header:not([data-theme]),.osano-cm-header[data-theme=dark],.osano-cm-info-dialog-header[data-theme=dark],.osano-cm-info-dialog-header__header[data-theme=dark]{background:#000000;color:#FFFFFF;}.chakra-ui-light .osano-cm-header:not([data-theme]),.chakra-ui-light .osano-cm-info-dialog-header:not([data-theme]),.chakra-ui-light .osano-cm-info-dialog-header__header:not([data-theme]),[data-theme=light] .osano-cm-header:not([data-theme]),[data-theme=light] .osano-cm-info-dialog-header:not([data-theme]),[data-theme=light] .osano-cm-info-dialog-header__header:not([data-theme]),.osano-cm-header[data-theme=light],.osano-cm-info-dialog-header[data-theme=light],.osano-cm-info-dialog-header__header[data-theme=light]{background:#FFFFFF;color:#000000;}p[role=heading]{font-family:Roboto,sans-serif!important;font-weight:700!important;line-height:20px!important;font-size:20px!important;}.chakra-ui-dark p[role=heading]:not([data-theme]),[data-theme=dark] p[role=heading]:not([data-theme]),p[role=heading][data-theme=dark]{color:#FFFFFF;}.chakra-ui-light p[role=heading]:not([data-theme]),[data-theme=light] p[role=heading]:not([data-theme]),p[role=heading][data-theme=light]{color:#00000;}span[role=heading]{font-family:Roboto,sans-serif!important;font-weight:700!important;line-height:16px!important;font-size:16px!important;}.chakra-ui-dark span[role=heading]:not([data-theme]),[data-theme=dark] span[role=heading]:not([data-theme]),span[role=heading][data-theme=dark]{color:#FFFFFF;}.chakra-ui-light span[role=heading]:not([data-theme]),[data-theme=light] span[role=heading]:not([data-theme]),span[role=heading][data-theme=light]{color:#00000;}div[role=link]{font-family:Open Sans,sans-serif!important;font-weight:700!important;line-height:16px!important;font-size:12px!important;color:#3479F3!important;}div[role=dialog]{color:#A2AAB8;}.osano-cm-info-views{height:auto;}.osano-cm-description{font-size:0.7em;line-height:1.2;}.osano-cm-disclosure{margin:0 -1.5em 0;}.osano-cm-toggle__switch{border-color:#A2AAB8;background-color:#A2AAB8;}.osano-cm-toggle__switch::after{background-color:#FFFFFF;border-color:#FFFFFF;}.osano-cm-toggle__input:focus+.osano-cm-toggle__switch::before{border-color:var(--chakra-colors-transparent)!important;}.osano-cm-toggle__input:checked+.osano-cm-toggle__switch::after,.osano-cm-toggle__input:checked+.osano-cm-toggle__switch::before{border-color:var(--chakra-colors-transparent);}.osano-cm-toggle__input:checked+.osano-cm-toggle__switch{background-color:#3479F3!important;border-color:var(--chakra-colors-transparent)!important;}.osano-cm-toggle__input:focus+.osano-cm-toggle__switch,.osano-cm-toggle__input:hover+.osano-cm-toggle__switch{border-color:#A2AAB8;background-color:#A2AAB8;}.osano-cm-toggle__input:disabled:checked+.osano-cm-toggle__switch::after,.osano-cm-toggle__input:disabled:checked:focus+.osano-cm-toggle__switch::after,.osano-cm-toggle__input:disabled:checked:hover+.osano-cm-toggle__switch::after{background-color:#FFFFFF;border-color:#FFFFFF;}.osano-cm-info{background:#000000;color:#A2AAB8;box-shadow:var(--chakra-shadows-none);}.chakra-ui-light .osano-cm-info:not([data-theme]),[data-theme=light] .osano-cm-info:not([data-theme]),.osano-cm-info[data-theme=light]{color:#282D33;background:#FFFFFF;}.osano-cm-widget__outline{stroke:#7A76FF;}.chakra-ui-light button.osano-cm-widget:not([data-theme]),[data-theme=light] button.osano-cm-widget:not([data-theme]),button.osano-cm-widget[data-theme=light]{bottom:60px;}.chakra-ui-dark button.osano-cm-widget:not([data-theme]),[data-theme=dark] button.osano-cm-widget:not([data-theme]),button.osano-cm-widget[data-theme=dark]{bottom:60px;}button.osano-cm-manage{background-color:var(--chakra-colors-transparent)!important;border-color:#3479F3;}button.osano-cm-save{background-color:var(--chakra-colors-transparent);border-color:#3479F3;}.chakra-ui-light button.osano-cm-save:not([data-theme]),[data-theme=light] button.osano-cm-save:not([data-theme]),button.osano-cm-save[data-theme=light]{background-color:#FFFFF;color:#000000;}button.osano-cm-accept-all:hover{background-color:#3479F3;}button.osano-cm-accept:hover{background-color:#3479F3;}button.osano-cm-save:hover{background-color:var(--chakra-colors-transparent);border-color:#3479F3;}button.osano-cm-denyAll{background-color:var(--chakra-colors-transparent);border-color:#3479F3;}button.osano-cm-denyAll:hover{background-color:var(--chakra-colors-transparent);}button.osano-cm-deny{background-color:var(--chakra-colors-transparent);border-color:#3479F3;}button.osano-cm-deny:hover{background-color:var(--chakra-colors-transparent);}.osano-cm-content__usage-list.osano-cm-usage-list{padding-top:10px;}@media screen and (max-width: 600px){.osano-cm-dialog--type_bar .osano-cm-dialog__buttons{margin:20px 0 0 .75em;}.osano-cm-dialog__content.osano-cm-content{font-size:12px;line-height:16.79px;}}main .animation-section+div:nth-of-type(2),main .animation-section+section:nth-of-type(2){background:var(--chakra-colors-transparent)!important;-webkit-transition:all 1s linear;transition:all 1s linear;}div#localize-widget:hover div#localize-powered-by{display:none!important;}a#localize-active-lang span{display:none!important;}.css-esifpi{-webkit-margin-start:0px!important;margin-inline-start:0px!important;}.css-1qnay5r>*:not(style)~*:not(style){-webkit-margin-start:40px!important;margin-inline-start:40px!important;}li a:hover,li a[data-hover]{-webkit-text-decoration:none!important;text-decoration:none!important;color:#7A76FF;}a:hover,a[data-hover]{-webkit-text-decoration:none!important;text-decoration:none!important;color:#7A76FF;}.field[aria-invalid=true],.field[data-invalid]{font-weight:var(--chakra-fontWeights-normal)!important;border-color:#FC8181!important;box-shadow:0 0 0 1px #FC8181!important;}.chakra-form__error-message{color:#FC8181!important;}</style><style data-emotion="css 1a2dkud">.css-1a2dkud{background-color:#000000;}</style><div class="css-1a2dkud"><style data-emotion="css n4507e">.css-n4507e{position:fixed;bottom:15px;right:15px;z-index:15;}</style><div class="css-n4507e"><style data-emotion="css fv178a">.css-fv178a{width:52px;position:relative;background-color:var(--chakra-colors-purple-primary);border-radius:var(--chakra-radii-full);}.chakra-ui-dark .css-fv178a:not([data-theme]),[data-theme=dark] .css-fv178a:not([data-theme]),.css-fv178a[data-theme=dark]{background-color:var(--chakra-colors-gray-500);}</style><div class="css-fv178a"><style data-emotion="css lkr8sv">.css-lkr8sv{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;white-space:nowrap;vertical-align:middle;outline:2px solid transparent;outline-offset:2px;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-bold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);text-transform:uppercase;height:28px;min-width:var(--chakra-sizes-10);font-size:var(--chakra-fontSizes-md);-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);color:var(--chakra-colors-whiteAlpha-900);width:52px;}.css-lkr8sv:focus-visible,.css-lkr8sv[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-lkr8sv:disabled,.css-lkr8sv[disabled],.css-lkr8sv[aria-disabled=true],.css-lkr8sv[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}.css-lkr8sv:hover,.css-lkr8sv[data-hover]{background:unset;}.css-lkr8sv:active,.css-lkr8sv[data-active]{background:unset;}</style><button type="button" class="chakra-button colorTrackingToggle css-lkr8sv" id="Dark"><style data-emotion="css 1tk3tgd">.css-1tk3tgd{position:absolute;top:5px;left:6px;z-index:1;width:18px;height:18px;pointer-events:none;}</style><img alt="Plotly" class="chakra-image css-1tk3tgd" src="/moon.svg"/><style data-emotion="css ckh9xj">.css-ckh9xj{position:absolute;top:5px;right:6px;z-index:1;width:18px;height:18px;pointer-events:none;}</style><img alt="Plotly" class="chakra-image css-ckh9xj" src="/sun.svg"/><style data-emotion="css s34jqb">.css-s34jqb{position:absolute;top:4px;right:6px;left:unset;z-index:1;width:20px;height:20px;pointer-events:none;}</style><img alt="Plotly" class="chakra-image css-s34jqb" src="/circle.svg"/></button></div></div><style data-emotion="css 1kxonj9">.css-1kxonj9{width:100%;position:relative;}</style><header id="primary-header" class="css-1kxonj9"><style data-emotion="css 13o7eu2">.css-13o7eu2{display:block;}</style><div class="css-13o7eu2"><style data-emotion="css 11wpte5">.css-11wpte5{display:none;position:fixed;z-index:11;width:100%;padding-top:var(--chakra-space-2);padding-bottom:var(--chakra-space-2);-webkit-padding-start:var(--chakra-space-2);padding-inline-start:var(--chakra-space-2);-webkit-padding-end:var(--chakra-space-2);padding-inline-end:var(--chakra-space-2);color:var(--chakra-colors-textPrimary);font-size:var(--chakra-fontSizes-3xs);font-weight:700;text-align:center;background-color:var(--chakra-colors-gray-50);opacity:1;}.css-11wpte5 a{color:var(--chakra-colors-accentPrimary);font-weight:var(--chakra-fontWeights-bold);}@media screen and (min-width: 576px){.css-11wpte5{font-size:var(--chakra-fontSizes-xs);}}@media screen and (min-width: 768px){.css-11wpte5{font-size:16px;font-weight:400;}}.chakra-ui-dark .css-11wpte5:not([data-theme]),[data-theme=dark] .css-11wpte5:not([data-theme]),.css-11wpte5[data-theme=dark]{background-color:#17181a;}</style><div class="css-11wpte5"></div></div><style data-emotion="css 1440amh">.css-1440amh{position:fixed;z-index:10;padding-bottom:0px;padding-top:0px;width:100%;color:var(--chakra-colors-textPrimary);background-color:var(--chakra-colors-transparent);border-bottom:1px solid;border-color:var(--chakra-colors-transparent);-webkit-transition:all 250ms;transition:all 250ms;top:0px;}@media screen and (min-width: 576px){.css-1440amh{padding-top:0px;}}@media screen and (min-width: 960px){.css-1440amh{padding-top:0px;}}@media screen and (min-width: 1200px){.css-1440amh{padding-top:0px;}}.chakra-ui-dark .css-1440amh:not([data-theme]),[data-theme=dark] .css-1440amh:not([data-theme]),.css-1440amh[data-theme=dark]{background-color:none;}</style><div class="css-1440amh"><style data-emotion="css f7yt5b">.css-f7yt5b{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-top:10px;margin-bottom:10px;}@media screen and (min-width: 1200px){.css-f7yt5b{display:none;}}</style><div class="css-f7yt5b"><style data-emotion="css 7pf6at">.css-7pf6at{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;}</style><div class="css-7pf6at"><style data-emotion="css 1woigal">.css-1woigal{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:0.5rem;width:100%;padding:0 20px;}</style><div class="chakra-stack css-1woigal"><style data-emotion="css v7v99c">.css-v7v99c{width:100px;}</style><div class="css-v7v99c"><a href="/"><style data-emotion="css ud2986">.css-ud2986{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;}</style><div class="css-ud2986"><style data-emotion="css 1ulxuub">.css-1ulxuub{object-fit:contain;width:126px;height:35px;}@media screen and (min-width: 960px){.css-1ulxuub{width:126px;}}</style><span style="box-sizing:border-box;display:inline-block;overflow:hidden;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;position:relative;max-width:100%"><span style="box-sizing:border-box;display:block;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0;max-width:100%"><img style="display:block;max-width:100%;width:initial;height:initial;background:none;opacity:1;border:0;margin:0;padding:0" alt="" aria-hidden="true" src="data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20version=%271.1%27%20width=%27126%27%20height=%2735%27/%3e"/></span><img alt="Plotly" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" decoding="async" data-nimg="intrinsic" class="css-1ulxuub" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%"/><noscript><img alt="Plotly" loading="lazy" decoding="async" data-nimg="intrinsic" style="position:absolute;top:0;left:0;bottom:0;right:0;box-sizing:border-box;padding:0;border:none;margin:auto;display:block;width:0;height:0;min-width:100%;max-width:100%;min-height:100%;max-height:100%" class="css-1ulxuub" srcSet="https://images.prismic.io/plotly-marketing-website-2/8f977c91-7b4e-4367-8228-26fbba2506e4_69e12d6a-fb65-4b6e-8423-9465a29c6028_plotly-logo-sm.png?auto=compress%2Cformat&fit=max&w=128 1x, https://images.prismic.io/plotly-marketing-website-2/8f977c91-7b4e-4367-8228-26fbba2506e4_69e12d6a-fb65-4b6e-8423-9465a29c6028_plotly-logo-sm.png?auto=compress%2Cformat&fit=max&w=256 2x" src="https://images.prismic.io/plotly-marketing-website-2/8f977c91-7b4e-4367-8228-26fbba2506e4_69e12d6a-fb65-4b6e-8423-9465a29c6028_plotly-logo-sm.png?auto=compress%2Cformat&fit=max&w=256"/></noscript></span></div></a></div><style data-emotion="css 1igwmid">.css-1igwmid{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:0.5rem;}</style><div class="chakra-stack css-1igwmid"><style data-emotion="css 1p7yx3s">.css-1p7yx3s{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;vertical-align:middle;outline:2px solid transparent;outline-offset:2px;line-height:1.2;border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-bold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);text-transform:uppercase;height:var(--chakra-sizes-10);min-width:var(--chakra-sizes-10);size:lg;color:#ffffff;background-image:linear-gradient(135deg, #7A76FF, #7A76FF, #7FE4FF);-webkit-background-size:200% 100%;background-size:200% 100%;padding-top:revert;-webkit-padding-start:var(--chakra-space-3);padding-inline-start:var(--chakra-space-3);-webkit-padding-end:var(--chakra-space-3);padding-inline-end:var(--chakra-space-3);font-size:var(--chakra-fontSizes-xs);letter-spacing:2px;border-color:var(--chakra-colors-accentPrimary);border:var(--chakra-borders-none);-webkit-transition:all .4s ease-in-out;transition:all .4s ease-in-out;white-space:normal;}.css-1p7yx3s:focus-visible,.css-1p7yx3s[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-1p7yx3s:disabled,.css-1p7yx3s[disabled],.css-1p7yx3s[aria-disabled=true],.css-1p7yx3s[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}@media screen and (min-width: 576px){.css-1p7yx3s{white-space:nowrap;}}@media screen and (min-width: 768px){.css-1p7yx3s{-webkit-padding-start:var(--chakra-space-5);padding-inline-start:var(--chakra-space-5);-webkit-padding-end:var(--chakra-space-5);padding-inline-end:var(--chakra-space-5);font-size:var(--chakra-fontSizes-md);}}.css-1p7yx3s:hover,.css-1p7yx3s[data-hover]{-webkit-background-position:100% 0;background-position:100% 0;color:var(--chakra-colors-white);}</style><button type="button" class="chakra-button css-1p7yx3s">Demo Dash</button><style data-emotion="css sdr3yg">.css-sdr3yg{position:relative;width:40px;z-index:99999;}</style><div class="css-sdr3yg"><style data-emotion="css 1icjydl">.css-1icjydl{position:relative;bottom:3px;font-size:var(--chakra-fontSizes-2-5xl);}</style><div class="css-1icjydl"><div class="hamburger-react" aria-expanded="false" role="button" style="cursor:pointer;height:48px;position:relative;transition:0.4s cubic-bezier(0, 0, 0, 1);user-select:none;width:48px;outline:none;transform:none" tabindex="0"><div style="background:currentColor;height:2px;left:14px;position:absolute;width:20px;top:17px;transition:0.4s cubic-bezier(0, 0, 0, 1);transform:none"></div><div style="background:currentColor;height:2px;left:14px;position:absolute;width:20px;top:23px;transition:0.4s cubic-bezier(0, 0, 0, 1);transform:none"></div><div style="background:currentColor;height:2px;left:14px;position:absolute;width:20px;top:29px;transition:0.4s cubic-bezier(0, 0, 0, 1);transform:none"></div></div></div></div></div></div></div><style data-emotion="css 1glt3dn">.css-1glt3dn{outline:2px solid transparent;outline-offset:2px;opacity:0;width:100%;box-shadow:var(--chakra-shadows-lg);position:absolute;top:68px;bottom:0px;left:0px;right:0px;height:calc(100vh - 68px);border-top:1px solid;border-bottom:1px solid;border-color:var(--chakra-colors-border);border-bottom-color:var(--chakra-colors-border);background:rgba(12, 12, 12);}.css-1glt3dn::-webkit-scrollbar{width:5px;}.css-1glt3dn::-webkit-scrollbar-track{width:6px;}.css-1glt3dn::-webkit-scrollbar-thumb{background-color:var(--chakra-colors-scrollbar);border-radius:24px;}@media screen and (min-width: 576px){.css-1glt3dn{top:68px;}}@media screen and (min-width: 768px){.css-1glt3dn{top:88px;}}@media screen and (min-width: 960px){.css-1glt3dn{top:84px;bottom:initial;}}</style><div headeronscroll="false" hastopbanner="false" style="opacity:0;display:none;transform:translateY(-4px) translateZ(0)" class="css-1glt3dn"><style data-emotion="css kh3yn6">.css-kh3yn6{width:80%;padding-left:var(--chakra-space-8);padding-top:var(--chakra-space-5);padding-right:var(--chakra-space-2);height:calc(100vh - 68px);background:var(--chakra-colors-bgPrimary);border-right:1px solid;border-color:var(--chakra-colors-border);overflow:auto;}</style><div class="css-kh3yn6"><div class="css-0"></div><div class="css-0"></div><style data-emotion="css c4fa8o">.css-c4fa8o{width:var(--chakra-sizes-full);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:var(--chakra-sizes-12);font-size:var(--chakra-fontSizes-lg);letter-spacing:2px;font-weight:var(--chakra-fontWeights-bold);text-transform:uppercase;color:var(--chakra-colors-textPrimary);}.css-c4fa8o:hover,.css-c4fa8o[data-hover]{color:var(--chakra-colors-accentPrimary);}</style><div class="css-c4fa8o"><a href="https://plotly.com/examples/">Example Apps</a></div><div class="css-0"></div><div class="css-0"></div><div class="css-c4fa8o"><a href="https://plotly.com/get-pricing/">Pricing</a></div><style data-emotion="css 3s1c3j">.css-3s1c3j{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;width:100%;position:relative;padding-top:var(--chakra-space-5);}</style><div id="searchBarIcon" class="searchBarIcon css-3s1c3j"><style data-emotion="css 1jke4yk">.css-1jke4yk{position:relative;width:100%;}</style><div class="css-1jke4yk"><style data-emotion="css 2pkxs">.css-2pkxs{position:relative;width:92%;}</style><div class="css-2pkxs"><style data-emotion="css lgsmtg">.css-lgsmtg{position:relative;height:200px;}</style><div class="css-lgsmtg"><style data-emotion="css 1c9c5z5">.css-1c9c5z5{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:0.5rem;z-index:999;}</style><div class="chakra-stack css-1c9c5z5"><style data-emotion="css d4i7br">.css-d4i7br{width:100%;height:var(--input-height);font-size:var(--input-font-size);-webkit-padding-start:var(--input-padding);padding-inline-start:var(--input-padding);-webkit-padding-end:var(--input-padding);padding-inline-end:var(--input-padding);border-radius:var(--input-border-radius);min-width:0px;outline:2px solid transparent;outline-offset:2px;position:relative;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);--input-font-size:var(--chakra-fontSizes-md);--input-padding:var(--chakra-space-4);--input-border-radius:var(--chakra-radii-md);--input-height:var(--chakra-sizes-10);border:1px solid;border-color:var(--chakra-colors-border);background:#fff;-webkit-transition:none;transition:none;color:#5B6372;}.css-d4i7br:disabled,.css-d4i7br[disabled],.css-d4i7br[aria-disabled=true],.css-d4i7br[data-disabled]{opacity:0.4;cursor:not-allowed;}.css-d4i7br[aria-readonly=true],.css-d4i7br[readonly],.css-d4i7br[data-readonly]{box-shadow:var(--chakra-shadows-none)!important;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;}.css-d4i7br[aria-invalid=true],.css-d4i7br[data-invalid]{border-color:#FC8181;box-shadow:0 0 0 1px #FC8181;}.css-d4i7br:focus-visible,.css-d4i7br[data-focus-visible]{z-index:1;border-color:#63b3ed;box-shadow:0 0 0 1px #63b3ed;}.css-d4i7br::-webkit-input-placeholder{color:#5B6372;}.css-d4i7br::-moz-placeholder{color:#5B6372;}.css-d4i7br:-ms-input-placeholder{color:#5B6372;}.css-d4i7br::placeholder{color:#5B6372;}.chakra-ui-dark .css-d4i7br:not([data-theme]),[data-theme=dark] .css-d4i7br:not([data-theme]),.css-d4i7br[data-theme=dark]{background-color:#161616;color:#bfc8d6;}.chakra-ui-dark .css-d4i7br:not([data-theme])::-webkit-input-placeholder{color:#A2AAB8;}.chakra-ui-dark .css-d4i7br:not([data-theme])::-moz-placeholder{color:#A2AAB8;}.chakra-ui-dark .css-d4i7br:not([data-theme]):-ms-input-placeholder{color:#A2AAB8;}[data-theme=dark] .css-d4i7br:not([data-theme])::-webkit-input-placeholder{color:#A2AAB8;}[data-theme=dark] .css-d4i7br:not([data-theme])::-moz-placeholder{color:#A2AAB8;}[data-theme=dark] .css-d4i7br:not([data-theme]):-ms-input-placeholder{color:#A2AAB8;}.css-d4i7br[data-theme=dark]::-webkit-input-placeholder{color:#A2AAB8;}.css-d4i7br[data-theme=dark]::-moz-placeholder{color:#A2AAB8;}.css-d4i7br[data-theme=dark]:-ms-input-placeholder{color:#A2AAB8;}.chakra-ui-dark .css-d4i7br:not([data-theme])::placeholder,[data-theme=dark] .css-d4i7br:not([data-theme])::placeholder,.css-d4i7br[data-theme=dark]::placeholder{color:#A2AAB8;}.css-d4i7br:focus,.css-d4i7br[data-focus]{border-color:#7A76FF;box-shadow:var(--chakra-shadows-none);}.css-d4i7br:hover,.css-d4i7br[data-hover]{border-color:#7A76FF;}</style><input type="text" placeholder="Search" class="chakra-input css-d4i7br" value=""/><style data-emotion="css 58q21i">.css-58q21i{position:absolute;top:12px;right:15px;}</style><div class="css-58q21i"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M1014.64 969.04L703.71 656.207c57.952-69.408 92.88-158.704 92.88-256.208 0-220.912-179.088-400-400-400s-400 179.088-400 400 179.088 400 400 400c100.368 0 192.048-37.056 262.288-98.144l310.496 312.448c12.496 12.497 32.769 12.497 45.265 0 12.48-12.496 12.48-32.752 0-45.263zM396.59 736.527c-185.856 0-336.528-150.672-336.528-336.528S210.734 63.471 396.59 63.471c185.856 0 336.528 150.672 336.528 336.528S582.446 736.527 396.59 736.527z"></path></svg></div></div></div><style data-emotion="css m6uzba">.css-m6uzba{width:5%;position:absolute;top:12px;right:-9%;}</style><div class="css-m6uzba"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 16 16" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.116 8l-4.558 4.558.884.884L8 8.884l4.558 4.558.884-.884L8.884 8l4.558-4.558-.884-.884L8 7.116 3.442 2.558l-.884.884L7.116 8z"></path></svg></div></div></div></div></div></div></div></div></header><style data-emotion="css 1inryme">.css-1inryme{padding-top:112px;}.chakra-ui-dark .css-1inryme:not([data-theme]),[data-theme=dark] .css-1inryme:not([data-theme]),.css-1inryme[data-theme=dark]{background-color:#000000;}@media screen and (min-width: 960px){.css-1inryme{padding-top:149px;}}</style><main class="css-1inryme"><div class="css-0"><style data-emotion="css i6bazn">.css-i6bazn{overflow:hidden;}</style><div class="animation-section css-i6bazn"><style data-emotion="css 1gsjjiq">.css-1gsjjiq{position:absolute;top:0px;width:100%;height:100%;background:var(--chakra-colors-bgPrimaryTransparent);}</style><div class="css-1gsjjiq"><style data-emotion="css m5neqp animation-9nsdvm">.css-m5neqp{background:var(--chakra-colors-radialGradientPurple);-webkit-background-size:500% 300%;background-size:500% 300%;-webkit-animation:animation-9nsdvm 9s alternate infinite;animation:animation-9nsdvm 9s alternate infinite;-webkit-background-position:100% 100%;background-position:100% 100%;height:100vh;width:100%;opacity:1;}.chakra-ui-dark .css-m5neqp:not([data-theme]),[data-theme=dark] .css-m5neqp:not([data-theme]),.css-m5neqp[data-theme=dark]{opacity:0.3;}@media (prefers-reduced-motion: reduce){.css-m5neqp{-webkit-animation:unset;animation:unset;}}@-webkit-keyframes animation-9nsdvm{from{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}to{-webkit-background-position:100% 100%;background-position:100% 100%;}}@keyframes animation-9nsdvm{from{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}to{-webkit-background-position:100% 100%;background-position:100% 100%;}}</style><div class="css-m5neqp"></div><style data-emotion="css 1aym1d1 animation-9nsdvm">.css-1aym1d1{background:var(--chakra-colors-radialGradientCyan);-webkit-background-size:500% 300%;background-size:500% 300%;-webkit-animation:animation-9nsdvm 13s alternate infinite;animation:animation-9nsdvm 13s alternate infinite;height:100vh;width:100%;opacity:1;position:absolute;top:0px;}.chakra-ui-dark .css-1aym1d1:not([data-theme]),[data-theme=dark] .css-1aym1d1:not([data-theme]),.css-1aym1d1[data-theme=dark]{opacity:0.3;}@media (prefers-reduced-motion: reduce){.css-1aym1d1{-webkit-animation:unset;animation:unset;}}@-webkit-keyframes animation-9nsdvm{from{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}to{-webkit-background-position:100% 100%;background-position:100% 100%;}}@keyframes animation-9nsdvm{from{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}to{-webkit-background-position:100% 100%;background-position:100% 100%;}}</style><div class="css-1aym1d1"></div><style data-emotion="css 1u5jb1k animation-187age1">.css-1u5jb1k{background:var(--chakra-colors-radialGradientPurple);-webkit-background-size:500% 300%;background-size:500% 300%;-webkit-animation:animation-187age1 12s alternate-reverse infinite;animation:animation-187age1 12s alternate-reverse infinite;height:100vh;width:100%;opacity:1;position:absolute;top:0px;}.chakra-ui-dark .css-1u5jb1k:not([data-theme]),[data-theme=dark] .css-1u5jb1k:not([data-theme]),.css-1u5jb1k[data-theme=dark]{opacity:0.3;}@media (prefers-reduced-motion: reduce){.css-1u5jb1k{-webkit-animation:unset;animation:unset;}}@-webkit-keyframes animation-187age1{from{-webkit-background-position:100% 100%;background-position:100% 100%;}to{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}}@keyframes animation-187age1{from{-webkit-background-position:100% 100%;background-position:100% 100%;}to{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}}</style><div class="css-1u5jb1k"></div><style data-emotion="css 1i9x0sj animation-187age1">.css-1i9x0sj{background:var(--chakra-colors-radialGradientCyan);-webkit-background-size:500% 300%;background-size:500% 300%;-webkit-animation:animation-187age1 10s alternate-reverse infinite;animation:animation-187age1 10s alternate-reverse infinite;height:100vh;width:100%;opacity:1;position:absolute;top:0px;}.chakra-ui-dark .css-1i9x0sj:not([data-theme]),[data-theme=dark] .css-1i9x0sj:not([data-theme]),.css-1i9x0sj[data-theme=dark]{opacity:0.3;}@media (prefers-reduced-motion: reduce){.css-1i9x0sj{-webkit-animation:unset;animation:unset;}}@-webkit-keyframes animation-187age1{from{-webkit-background-position:100% 100%;background-position:100% 100%;}to{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}}@keyframes animation-187age1{from{-webkit-background-position:100% 100%;background-position:100% 100%;}to{-webkit-background-position:top 55% right 100%;background-position:top 55% right 100%;}}</style><div class="css-1i9x0sj"></div></div></div><style data-emotion="css he4pjq">.css-he4pjq{position:relative;width:80%;margin:50px auto 0;max-width:1200px;}@media screen and (min-width: 960px){.css-he4pjq{width:60%;}}</style><section class="css-he4pjq"><style data-emotion="css u4p24i">.css-u4p24i{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-u4p24i"><style data-emotion="css 1xuyv54">.css-1xuyv54{width:60px;height:60px;object-fit:cover;border-radius:50%;}</style><img alt="author photo" class="chakra-image css-1xuyv54" src="https://images.prismic.io/plotly-marketing-website-2/ca895715-4e6e-4b9d-82d9-3da7ca09c57a_Clea.png?auto=compress,format"/><style data-emotion="css 1cbeyld">.css-1cbeyld{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;margin-left:var(--chakra-space-3);}</style><div class="css-1cbeyld"><div class="css-0"><style data-emotion="css 1i6zc75">.css-1i6zc75{color:#FFFFF;font-weight:700;}</style><p class="chakra-text css-1i6zc75">Cléa Aumont</p><style data-emotion="css 37clb6">.css-37clb6{color:#A2AAB8;}</style><p class="chakra-text css-37clb6">August 29, 2023</p></div></div></div></section><style data-emotion="css 6f9xzw">.css-6f9xzw{position:relative;width:80%;margin:25px auto 25px;border-right:var(--chakra-borders-none);max-width:1200px;}.css-6f9xzw h1{font-family:var(--chakra-fonts-heading);font-weight:700;line-height:1.4;font-size:var(--chakra-fontSizes-7xl);}@media screen and (min-width: 768px){.css-6f9xzw h1{font-size:var(--chakra-fontSizes-7-5xl);}}.css-6f9xzw h2{font-family:var(--chakra-fonts-heading);line-height:5xl;font-size:var(--chakra-fontSizes-5xl);font-weight:700;color:var(--chakra-colors-textPrimary);}.css-6f9xzw h3{font-family:var(--chakra-fonts-heading);font-size:var(--chakra-fontSizes-2-5xl);line-height:23px;font-weight:700;margin-top:10px;color:var(--chakra-colors-textPrimary);}.css-6f9xzw h4{font-family:var(--chakra-fonts-heading);font-size:var(--chakra-fontSizes-2xl);line-height:23px;font-weight:700;margin-top:10px;color:var(--chakra-colors-textPrimary);}.css-6f9xzw strong{font-weight:700;color:var(--chakra-colors-textPrimary);}.css-6f9xzw p{color:var(--chakra-colors-bodyText);font-size:14px;padding:10px 0;}@media screen and (min-width: 240px){.css-6f9xzw p{font-size:var(--chakra-fontSizes-xl);}}.css-6f9xzw ul{list-style-type:disc;padding-top:10px;padding-bottom:18px;padding-left:35px;}.css-6f9xzw ol{padding-top:10px;padding-bottom:18px;padding-left:35px;list-style-type:decimal;margin-bottom:20px;}.css-6f9xzw li{color:var(--chakra-colors-bodyText);padding:10px 0;line-height:1.5;}.css-6f9xzw a{color:var(--chakra-colors-accentPrimary);-webkit-text-decoration:underline;text-decoration:underline;}.css-6f9xzw img{margin:0 auto;object-fit:cover;}@media screen and (min-width: 960px){.css-6f9xzw img{object-fit:contain;max-height:500px;}}.css-6f9xzw pre{display:inline;color:var(--chakra-colors-accentPrimary);width:auto;background-color:#282d33;padding:4px;}@media screen and (min-width: 960px){.css-6f9xzw{width:60%;}}</style><section class="css-6f9xzw"><h1>Deep Dive on Sankey Diagrams</h1><h2>Introduction</h2><p>A Sankey Diagram is a powerful <strong>data visualization</strong> tool when used correctly. These visuals represent the flow of values from one stage to another using nodes and links, but can often be misused. This article aims to provide guidance on <strong>best practices</strong> for choosing a Sankey diagram, offering diverse examples to illustrate its potential. This article will guide the reader in choosing an appropriate dataset to create an effective Sankey Diagram by looking at the nature and the structure of the data. This article also provides starter code that enables the transformation of a dataframe into usable Sankey data for visualization using <strong>Plotly Express</strong>. By following these best practices and leveraging the provided code, readers can effectively use Sankey Diagrams to gain valuable insights from their data.</p><h2>What is a Sankey & Use Case</h2><p>Sankey diagrams can be compared to those of <strong>flow networks</strong>, with a tendency to be acyclic and directed, where the links and nodes are proportional to the flow they carry. The three parameters that make up a Sankey are the nodes, the links, and the link weights. In this article, I will be referring to a set of nodes on the same level as a tier, where a tier can be a column in a dataframe for example, representing a stage in the Sankey.</p><p>As a member of the <a href="https://plotly.com/consulting-and-oem/">Professional Services team</a>, I first came across the Sankey Diagram on a client project that required a way to visualize the flow of a specific resource on a global scale. The goal was to see where a specific resource came from, where it was converted, and where it was shipped off. <strong>Supply chain</strong> is a great example of when to use a Sankey diagram as it naturally contains a set of stages to visualize. The complexity of coding this Sankey diagram came with allowing the user to select which columns of a pandas dataframe were to be used in the Sankey, meaning the Sankey could have anywhere from 2 to 8 tiers. The user was also able to filter the Sankey by node, change the link weights, which would vary by year, and group the tiers to only display a fixed number of nodes and aggregate the remaining ones into a single node. The following recording shows this particular Dash app in action.</p></section><style data-emotion="css 14zui6f">.css-14zui6f{position:relative;width:80%;margin:25px auto 25px;border-right:var(--chakra-borders-none);max-width:1200px;}@media screen and (min-width: 960px){.css-14zui6f{width:60%;}}</style><section class="css-14zui6f"><style data-emotion="css 1crnya7">.css-1crnya7{width:100%;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);max-width:1200px;}</style><div class="chakra-container css-1crnya7"><div class="css-0"><style data-emotion="css 79elbk">.css-79elbk{position:relative;}</style><div class="css-79elbk"><style data-emotion="css 136bhax">.css-136bhax{position:relative;width:80%;margin:25px auto;height:auto;object-fit:contain;}@media screen and (min-width: 960px){.css-136bhax{width:60%;}}</style><img alt="Sankey" class="chakra-image css-136bhax" src="https://images.prismic.io/plotly-marketing-website-2/82284e97-8910-4f76-9204-275d450b87e8_Sankey.png?auto=compress,format"/><style data-emotion="css t9nrh6 animation-1cc1ye4">.css-t9nrh6{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);font-size:var(--chakra-fontSizes-9xl);z-index:2;color:var(--chakra-colors-accentPrimary);cursor:pointer;}.css-t9nrh6:hover::before,.css-t9nrh6[data-hover]::before{content:" ";position:absolute;z-index:-1;left:50%;top:50%;-webkit-transform:translateX(-50%) translateY(-50%);-moz-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);-webkit-animation:animation-1cc1ye4 1500ms ease-out infinite;animation:animation-1cc1ye4 1500ms ease-out infinite;width:38px;height:38px;border-radius:50%;border:12px solid;border-color:var(--chakra-colors-accentPrimary);}@-webkit-keyframes animation-1cc1ye4{0%{-webkit-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);-moz-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);-ms-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);opacity:1;}100%{-webkit-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);-moz-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);-ms-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);opacity:0;}}@keyframes animation-1cc1ye4{0%{-webkit-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);-moz-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);-ms-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1);opacity:1;}100%{-webkit-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);-moz-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);-ms-transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);transform:translateX(-50%) translateY(-50%) translateZ(0) scale(1.5);opacity:0;}}</style><div class="css-t9nrh6"><style data-emotion="css 1u7uhqd">.css-1u7uhqd{width:50px;height:50px;}</style><img alt="play-icon" class="chakra-image css-1u7uhqd" src="/purple-play-icon.svg"/></div></div><style data-emotion="css 1jevy9w">.css-1jevy9w p{color:var(--chakra-colors-bodyText);font-size:10px;padding:10px 0;text-align:center;}@media screen and (min-width: 240px){.css-1jevy9w p{font-size:12px;}}.css-1jevy9w a{color:var(--chakra-colors-accentPrimary);-webkit-text-decoration:underline;text-decoration:underline;}</style><div class="css-1jevy9w"><p>Screen recording of Dash app displaying Sankey chart</p></div></div></div></section><section class="css-6f9xzw"><p>This was difficult to accomplish because the parameters to code a Sankey Diagram are complex. The outcome of this project was a highly generalized code for generating Sankey diagrams, empowering users to customize every aspect of the Sankey, making this code reusable for any other project.</p><h2>Useful Sankey Diagrams </h2><p>Sankeys are best used to visualize the flow of data from one stage to another, but more specifically, to represent how that flow is subdivided at each stage. For example, this could be the flow of resources, money, energy, or information and how it circulates within a country, business, company, or network, respectively. This type of visualization can help highlight bottlenecks, or identify areas of high significance. For instance, consider the <a href="https://www.sankey-diagrams.com/where-does-a-familys-tax-money-go/">example</a> below which demonstrates the distribution of a country’s tax resources. The diagram portrays each sector of the distribution along with its respective subcategories, showcasing the movement of money across different stages. This visual example offers readers a clear understanding of the intricate flow of funds with a simple glance at the diagram. For example, one can quickly see how little is spent on Education compared to other categories, or how much is spent on national defense in comparison to veterans benefits.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/74ea1b85-154d-4ccc-a656-104351ba44eb_sankey2.png?auto=compress,format" alt="Sankey Diagram"/></p><p>Another example of a useful Sankey Diagram is <a href="https://www.sankeyart.com/content/blog/why-a-sankey-diagram-is-the-best-way-to-visualize-an-income-statement/">Apple’s</a> or <a href="https://www.reddit.com/r/dataisbeautiful/comments/12c47wb/oc_lululemons_2022_income_statement_visualized/">Lululemon’s</a> Income Statement. Here, we can easily identify which are the major sources of income for Apple or Lululemon, the proportion of income allocated to expenses, and how the gross profit compares to expenses. Even a quick glance at these diagrams provide a remarkably insightful overview.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/69d9c0bb-38b1-4b52-8966-e53bb30c0907_Sankey_side3.png?auto=compress,format" alt="Sankey Diagram"/></p><h2>When to avoid Sankeys</h2><p>Sankeys should be avoided in a number of cases. For one, if there isn’t a natural flow of data, a Sankey is probably not the best visualization. As an example, the following Sankey shows a mapping of countries to Olympic medal distribution. This isn’t ideal as the more data there is the more convoluted this chart will be. It's fairly difficult to gain insightful information from this diagram, other than which countries won the most medals and which sport awarded the most medals. In this particular case, a histogram may be more efficient to represent the distribution of medals.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/ba413bd3-94c4-4ae5-b55b-bc1a90cb183c_sankey5.png?auto=compress,format" alt="Sankey Diagram"/></p><p>The following <a href="https://ppcexpo.com/blog/visualizing-customer-journey-with-sankey-diagram">example</a> shows another Sankey that doesn’t tell much of a story. Again, a mapping of students to grades to classes to grades does not represent a natural flow of data and gets increasingly complex with the number of data points. Also, every student takes every class, which creates a link between every single one of these combinations. There is not much use for a Sankey if all of the nodes are connected.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/23d429f8-bea6-401e-bf40-3e2022e70372_sankey6.png?auto=compress,format" alt="Sankey Diagram"/></p><p>Sankeys should also be avoided for any kind of continuous data, such as time data, unless this has been turned into categorical or discrete data, such as years, or specific time periods. Any dataset that is too large or too sparse should also be avoided.</p><p></p></section><section class="css-6f9xzw"><h2>Natural Structure of Data</h2><p>Now, having data that represents a natural set of stages between data points, this doesn't necessarily mean that a Sankey Diagram is always the best visual to use. A reason could be that there are too many data points, which would create a convoluted diagram, or too little. Also, there could just be no natural grouping of data points resulting in a diagram with links from every source node to every target node, creating too much cross over. In the following example, there is a sufficient amount of data to make a decent Sankey Diagram. However, once generated, it seems like all of the stores ship to all of the listed countries. This Diagram does not provide much information even though there are sufficient data points and the data has a natural flow.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/ae225678-b187-4e09-943c-5593aa5a3949_sankey8.png?auto=compress,format" alt="Sankey Diagram"/></p><p>Instead, it may make more sense to have a stacked bar chart to display the breakdown of each company and the countries it ships to. Alternatively, a Sankey could still be used by adding an intermediary group, or a second layer of grouping. By breaking down the data in this fashion we can already start to get more insights on the companies and where they ship to. This way, we can easily see the distinction between domestic and international sales, and their respective breakdowns.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/e752374a-96a3-4b6b-979c-77c69904c8f6_Sankey_side2.png?auto=compress,format" alt="Sankey"/></p></section><section class="css-6f9xzw"><h2>Creating a Sankey Diagram in Plotly</h2><p>To create a Sankey diagram using <a href="https://plotly.com/python/sankey-diagram/">Plotly Express</a>, you can use the graph_objects.Sankey function. The function accepts 4 critical arguments to define the diagram:</p><ul><li>The <em>label </em>which in actuality are the nodes (i.e: in the previous example a node is “Canada”)</li><li>The <em>sources</em>, a list of numbers that indicate the starting point of a link</li><li>The <em>targets</em>, a list of numbers that indicate the endpoint of a link</li><li>The <em>values</em>, a list of numbers that indicate the line thickness of each link. If this is left blank, no links will show up.</li></ul><p>Each node is identified by a unique number, and the link between each node is defined with the source and target properties. As an example, the Sankey diagram on the left with two nodes ‘A’ and ‘B’ with one link connecting the two will require the following properties:</p><ul><li><em>label</em> must be [‘A’, ’B’], this will automatically assign a number value to each node; 0 for A and 1 for B. </li><li>To add the link between those 2 nodes, one must supply [0] to the <em>source</em> property </li><li>And [1] to the <em>target</em> property. </li><li>The <em>value</em> in this case needs to be a list of the same length as the <em>sources</em> and <em>targets</em> and can be any positive number. </li></ul><h3>Common Issues</h3><p>This can be a little bit tricky to implement with larger datasets, but this is code that chat GPT can generate. The tricky part comes with the case where duplicate nodes must be viewed as distinct nodes, which is fairly common, as seen on the right. If not specifically accounted for, this will result in a node looping around itself, instead of creating a direct link.</p><p class=" block-img"><img src="https://images.prismic.io/plotly-marketing-website-2/e483bc78-2d96-471c-be10-cb9f89b587e1_Sankey_side1.png?auto=compress,format" alt="Sankey"/></p></section><style data-emotion="css 1ucaztz">.css-1ucaztz{position:relative;width:80%;margin:25px auto;max-width:1200px;}@media screen and (min-width: 960px){.css-1ucaztz{width:60%;}}</style><section class="css-1ucaztz"><style data-emotion="css kfzi1">.css-kfzi1{margin:25px auto;}</style><div class="css-kfzi1"><style data-emotion="css 1ekh305">.css-1ekh305 h1{font-family:var(--chakra-fonts-heading);font-weight:700;font-size:var(--chakra-fontSizes-7xl);}@media screen and (min-width: 768px){.css-1ekh305 h1{font-size:var(--chakra-fontSizes-7-5xl);}}.css-1ekh305 h2{font-family:var(--chakra-fonts-heading);line-height:5xl;font-size:var(--chakra-fontSizes-5xl);font-weight:700;color:var(--chakra-colors-textPrimary);}.css-1ekh305 h3{font-family:var(--chakra-fonts-heading);font-size:var(--chakra-fontSizes-2-5xl);line-height:23px;font-weight:700;color:var(--chakra-colors-textPrimary);padding-bottom:10px;}.css-1ekh305 strong{font-family:var(--chakra-fonts-heading);font-weight:500;color:var(--chakra-colors-accentPrimary);}.css-1ekh305 p{color:var(--chakra-colors-bodyText);font-size:14px;padding:10px 0;}@media screen and (min-width: 240px){.css-1ekh305 p{font-size:var(--chakra-fontSizes-xl);}}.css-1ekh305 ul{list-style-type:disc;padding-top:10px;padding-bottom:18px;padding-left:35px;}.css-1ekh305 ol{list-style:inside;list-style-type:decimal;padding:10px 0;margin-bottom:20px;}.css-1ekh305 li{color:var(--chakra-colors-bodyText);padding:2px 0;line-height:1.2;}.css-1ekh305 a{color:var(--chakra-colors-accentPrimary);-webkit-text-decoration:underline;text-decoration:underline;}.css-1ekh305 img{width:100%;object-fit:cover;}@media screen and (min-width: 960px){.css-1ekh305 img{object-fit:contain;max-height:500px;}}.css-1ekh305 .block-img{margin-bottom:10px;}</style><div class="css-1ekh305"><h2>Getting Started: Code Sample</h2></div><style data-emotion="css 15njhai">.css-15njhai{background-color:#181818;position:relative;padding:var(--chakra-space-5);overflow:auto;font-size:var(--chakra-fontSizes-xs);color:var(--chakra-colors-bodyText);border-radius:3px;}.css-15njhai::-webkit-scrollbar{width:5px;}.css-15njhai::-webkit-scrollbar-track{width:6px;}.css-15njhai::-webkit-scrollbar-thumb{background-color:var(--chakra-colors-scrollbar);border-radius:24px;}@media screen and (min-width: 768px){.css-15njhai{font-size:var(--chakra-fontSizes-md);}}</style><div class="css-15njhai"><style data-emotion="css 2nh262">.css-2nh262{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;vertical-align:baseline;outline:2px solid transparent;outline-offset:2px;line-height:var(--chakra-lineHeights-normal);border-radius:var(--chakra-radii-md);font-weight:var(--chakra-fontWeights-bold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);text-transform:uppercase;height:auto;font-size:var(--chakra-fontSizes-md);-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);padding:0px;position:absolute;right:var(--chakra-space-3);top:var(--chakra-space-3);min-width:auto;color:var(--chakra-colors-bodyText);}.css-2nh262:focus-visible,.css-2nh262[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-2nh262:disabled,.css-2nh262[disabled],.css-2nh262[aria-disabled=true],.css-2nh262[data-disabled]{opacity:0.4;cursor:not-allowed;box-shadow:var(--chakra-shadows-none);}.css-2nh262:hover,.css-2nh262[data-hover]{-webkit-text-decoration:none;text-decoration:none;color:#7A76FF;}.css-2nh262:hover:disabled,.css-2nh262[data-hover]:disabled,.css-2nh262:hover[disabled],.css-2nh262[data-hover][disabled],.css-2nh262:hover[aria-disabled=true],.css-2nh262[data-hover][aria-disabled=true],.css-2nh262:hover[data-disabled],.css-2nh262[data-hover][data-disabled]{background:initial;-webkit-text-decoration:none;text-decoration:none;}.css-2nh262:active,.css-2nh262[data-active]{color:var(--chakra-colors-gray-500);}</style><button type="button" class="chakra-button css-2nh262" aria-label="copy"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 448 512" aria-hidden="true" focusable="false" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"></path></svg></button><pre class="prism-code language-python" style="color:#d6deeb;white-space:break-spaces;background-color:#181818"><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token keyword" style="color:#7A76FF">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(122, 118, 255)">generate_sankey_chart_data</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">df</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> pd</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">Dataframe</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> columns</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">list</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> sankey_link_weight</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">str</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># list of list: each list are the set of nodes in each tier/column</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">column_values </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">df</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">col</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> col </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> columns</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># this generates the labels for the sankey by taking all the unique values</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">labels </span><span class="token operator">=</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">sum</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token builtin" style="color:rgb(122, 118, 255)">list</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">node_values</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">unique</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> node_values </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> column_values</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># initializes a dict of dicts (one dict per tier) </span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">link_mappings </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">{</span><span class="token plain">col</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">{</span><span class="token punctuation" style="color:#FFFFFF">}</span><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> col </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> columns</span><span class="token punctuation" style="color:#FFFFFF">}</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># each dict maps a node to unique number value (same node in different tiers</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># will have different nubmer values</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(132, 222, 250)">0</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> col</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> nodes </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">zip</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">columns</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> column_values</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> node </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> nodes</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">unique</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> link_mappings</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">col</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">node</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> i</span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> i </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number" style="color:rgb(132, 222, 250)">1</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># specifying which coluns are serving as sources and which as sources</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># ie: given 3 df columns (col1 is a source to col2, col2 is target to col1 and </span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># a source to col 3 and col3 is a target to col2</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">source_nodes </span><span class="token operator">=</span><span class="token plain"> column_values</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">len</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">columns</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number" style="color:rgb(132, 222, 250)">1</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">target_nodes </span><span class="token operator">=</span><span class="token plain"> column_values</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token number" style="color:rgb(132, 222, 250)">1</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">source_cols </span><span class="token operator">=</span><span class="token plain"> columns</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">len</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">columns</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number" style="color:rgb(132, 222, 250)">1</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">target_cols </span><span class="token operator">=</span><span class="token plain"> columns</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token number" style="color:rgb(132, 222, 250)">1</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">links </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># loop to create a list of links in the format [((src,tgt),wt),(),()...]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> source</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> target</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> source_col</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> target_col </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">zip</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">source_nodes</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> target_nodes</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> source_cols</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> target_cols</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> val1</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> val2</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> link_weight </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">zip</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">source</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> target</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> df</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">sankey_link_weight</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> links</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">append</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> link_mappings</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">source_col</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">val1</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> link_mappings</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">target_col</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">val2</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> link_weight</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># creating a dataframe with 2 columns: for the links (src, tgt) and weights</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">df_links </span><span class="token operator">=</span><span class="token plain"> pd</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">DataFrame</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">links</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> columns</span><span class="token operator">=</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token string" style="color:rgb(122, 118, 255)">"link"</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(122, 118, 255)">"weight"</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># aggregating the same links into a single link (by weight)</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">df_links </span><span class="token operator">=</span><span class="token plain"> df_links</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">groupby</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token plain">by</span><span class="token operator">=</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token string" style="color:rgb(122, 118, 255)">"link"</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> as_index</span><span class="token operator">=</span><span class="token boolean" style="color:#7FE4FF">False</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token punctuation" style="color:#FFFFFF">.</span><span class="token plain">agg</span><span class="token punctuation" style="color:#FFFFFF">(</span><span class="token punctuation" style="color:#FFFFFF">{</span><span class="token string" style="color:rgb(122, 118, 255)">"weight"</span><span class="token punctuation" style="color:#FFFFFF">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(122, 118, 255)">sum</span><span class="token punctuation" style="color:#FFFFFF">}</span><span class="token punctuation" style="color:#FFFFFF">)</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token comment" style="color:#A2AAB8;font-style:italic"># generating three lists needed for the sankey visual</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">sources </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">val</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token number" style="color:rgb(132, 222, 250)">0</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> val </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> df_links</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token string" style="color:rgb(122, 118, 255)">"link"</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">targets </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token plain">val</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token number" style="color:rgb(132, 222, 250)">1</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"> </span><span class="token keyword" style="color:#7A76FF">for</span><span class="token plain"> val </span><span class="token keyword" style="color:#7A76FF">in</span><span class="token plain"> df_links</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token string" style="color:rgb(122, 118, 255)">"link"</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain">weights </span><span class="token operator">=</span><span class="token plain"> df_links</span><span class="token punctuation" style="color:#FFFFFF">[</span><span class="token string" style="color:rgb(122, 118, 255)">"weight"</span><span class="token punctuation" style="color:#FFFFFF">]</span><span class="token plain"></span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain" style="display:inline-block"> </span></div><div class="token-line" style="color:#d6deeb;white-space:break-spaces"><span class="token plain"></span><span class="token keyword" style="color:#7A76FF">return</span><span class="token plain"> labels</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> sources</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> targets</span><span class="token punctuation" style="color:#FFFFFF">,</span><span class="token plain"> weights</span></div></pre></div></div></section><section class="css-6f9xzw"><h2>Conclusion</h2><p>Sankey diagrams are a powerful data visualization tool used to represent the flow of values between stages, offering valuable insights into the flow of data. When used with well-structured data, they can help identify patterns, bottlenecks, and significant resource allocation trends. It is important to consider the nature of the dataset and whether it naturally lends itself to a Sankey diagram. With the right data, Sankey diagrams can be a valuable asset in data representation by facilitating the understanding of complex processes and distributions. With the sample Sankey code provided I hope this helps in better understanding how to code a Sankey Diagram as well as when to use a Sankey Diagram.</p></section></div></main><div class="css-1a2dkud"><style data-emotion="css 6iary9">.css-6iary9{position:relative;border-top:0.5px solid;border-color:var(--chakra-colors-border);color:var(--chakra-colors-textPrimary);padding-top:35px;padding-bottom:35px;}@media screen and (min-width: 960px){.css-6iary9{padding-top:80px;padding-bottom:var(--chakra-space-10);}}</style><footer class="css-6iary9"><style data-emotion="css j221ct">.css-j221ct{width:100%;-webkit-margin-start:auto;margin-inline-start:auto;-webkit-margin-end:auto;margin-inline-end:auto;-webkit-padding-start:var(--chakra-space-4);padding-inline-start:var(--chakra-space-4);-webkit-padding-end:var(--chakra-space-4);padding-inline-end:var(--chakra-space-4);max-width:1400px;}</style><div class="chakra-container css-j221ct"><style data-emotion="css 89wkbf">.css-89wkbf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:var(--chakra-space-8);position:relative;}@media screen and (min-width: 960px){.css-89wkbf{gap:0px;}}</style><div class="chakra-stack css-89wkbf"><style data-emotion="css 1py6ya0">.css-1py6ya0{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}@media screen and (min-width: 960px){.css-1py6ya0{-webkit-box-flex-wrap:initial;-webkit-flex-wrap:initial;-ms-flex-wrap:initial;flex-wrap:initial;}}</style><div id="top" class="css-1py6ya0"><style data-emotion="css 1oig900">.css-1oig900{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:var(--chakra-space-2);width:100%;}@media screen and (min-width: 960px){.css-1oig900{gap:var(--chakra-space-5);width:40%;}}@media screen and (min-width: 1200px){.css-1oig900{width:43%;}}</style><div class="chakra-stack css-1oig900"><div class="css-0"></div><form id="pardot-form"><style data-emotion="css k008qs">.css-k008qs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}</style><div class="css-k008qs"><style data-emotion="css 18x4cpl">.css-18x4cpl{width:100%;position:relative;}@media screen and (min-width: 960px){.css-18x4cpl{width:76%;}}</style><div role="group" class="chakra-form-control css-18x4cpl"><style data-emotion="css 16z694i">.css-16z694i{width:100%;height:var(--input-height);-webkit-padding-start:var(--input-padding);padding-inline-start:var(--input-padding);-webkit-padding-end:var(--input-padding);padding-inline-end:var(--input-padding);border-radius:var(--input-border-radius);min-width:0px;outline:2px solid transparent;outline-offset:2px;position:relative;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);--input-font-size:var(--chakra-fontSizes-md);--input-padding:var(--chakra-space-4);--input-border-radius:var(--chakra-radii-md);--input-height:var(--chakra-sizes-10);border:1px solid;border-color:var(--chakra-colors-border);background:#fff;-webkit-transition:none;transition:none;color:#5B6372;font-size:var(--chakra-fontSizes-sm);border-top-right-radius:5px;border-bottom-right-radius:5px;}.css-16z694i:disabled,.css-16z694i[disabled],.css-16z694i[aria-disabled=true],.css-16z694i[data-disabled]{opacity:0.4;cursor:not-allowed;}.css-16z694i[aria-readonly=true],.css-16z694i[readonly],.css-16z694i[data-readonly]{box-shadow:var(--chakra-shadows-none)!important;-webkit-user-select:all;-moz-user-select:all;-ms-user-select:all;user-select:all;}.css-16z694i[aria-invalid=true],.css-16z694i[data-invalid]{border-color:#FC8181;box-shadow:0 0 0 1px #FC8181;}.css-16z694i:focus,.css-16z694i[data-focus]{border-color:#7FE4FF;box-shadow:var(--chakra-shadows-none);}.chakra-ui-dark .css-16z694i:not([data-theme]),[data-theme=dark] .css-16z694i:not([data-theme]),.css-16z694i[data-theme=dark]{background-color:#161616;color:#bfc8d6;}.chakra-ui-dark .css-16z694i:not([data-theme])::-webkit-input-placeholder{color:#A2AAB8;}.chakra-ui-dark .css-16z694i:not([data-theme])::-moz-placeholder{color:#A2AAB8;}.chakra-ui-dark .css-16z694i:not([data-theme]):-ms-input-placeholder{color:#A2AAB8;}[data-theme=dark] .css-16z694i:not([data-theme])::-webkit-input-placeholder{color:#A2AAB8;}[data-theme=dark] .css-16z694i:not([data-theme])::-moz-placeholder{color:#A2AAB8;}[data-theme=dark] .css-16z694i:not([data-theme]):-ms-input-placeholder{color:#A2AAB8;}.css-16z694i[data-theme=dark]::-webkit-input-placeholder{color:#A2AAB8;}.css-16z694i[data-theme=dark]::-moz-placeholder{color:#A2AAB8;}.css-16z694i[data-theme=dark]:-ms-input-placeholder{color:#A2AAB8;}.chakra-ui-dark .css-16z694i:not([data-theme])::placeholder,[data-theme=dark] .css-16z694i:not([data-theme])::placeholder,.css-16z694i[data-theme=dark]::placeholder{color:#A2AAB8;}@media screen and (min-width: 240px){.css-16z694i{border-top-right-radius:0px;border-bottom-right-radius:0px;}}.css-16z694i::-webkit-input-placeholder{font-style:italic;color:var(--chakra-colors-bodyText);opacity:1;}.css-16z694i::-moz-placeholder{font-style:italic;color:var(--chakra-colors-bodyText);opacity:1;}.css-16z694i:-ms-input-placeholder{font-style:italic;color:var(--chakra-colors-bodyText);opacity:1;}.css-16z694i::placeholder{font-style:italic;color:var(--chakra-colors-bodyText);opacity:1;}.css-16z694i:hover,.css-16z694i[data-hover]{border:1px solid;border-color:var(--chakra-colors-accentTertiary);}.css-16z694i:focus-visible,.css-16z694i[data-focus-visible]{border-color:var(--chakra-colors-accentTertiary);box-shadow:var(--chakra-shadows-none);}</style><input class="chakra-input field css-16z694i" placeholder="Enter your email address" name="email" id="email"/></div><style data-emotion="css w87pwd">.css-w87pwd{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;vertical-align:middle;outline:2px solid transparent;outline-offset:2px;line-height:1.2;border-radius:8px;font-weight:var(--chakra-fontWeights-bold);transition-property:var(--chakra-transition-property-common);transition-duration:var(--chakra-transition-duration-normal);text-transform:uppercase;height:var(--chakra-sizes-10);min-width:var(--chakra-sizes-10);font-size:13px;color:var(--chakra-colors-linkColor);cursor:pointer;border:solid 1px transparent;box-shadow:var(--chakra-shadows-ctaButton);background-image:linear-gradient(45deg, #7FE4FF, #7A76FF, #7A76FF);-webkit-background-size:200% 100%;background-size:200% 100%;-webkit-background-position:0% 0;background-position:0% 0;position:relative;z-index:3;right:1px;-webkit-padding-start:25px;padding-inline-start:25px;-webkit-padding-end:25px;padding-inline-end:25px;border-top-left-radius:5px;border-bottom-left-radius:5px;-webkit-transition:none;transition:none;}.css-w87pwd:focus-visible,.css-w87pwd[data-focus-visible]{box-shadow:var(--chakra-shadows-outline);}.css-w87pwd:hover,.css-w87pwd[data-hover]{-webkit-transition:background-color 4000ms ease-in-out;transition:background-color 4000ms ease-in-out;-webkit-background-position:100% 0;background-position:100% 0;color:#ffffff;box-shadow:2px 1000px 1px #7A76FF inset!important;}.css-w87pwd:hover:disabled,.css-w87pwd[data-hover]:disabled,.css-w87pwd:hover[disabled],.css-w87pwd[data-hover][disabled],.css-w87pwd:hover[aria-disabled=true],.css-w87pwd[data-hover][aria-disabled=true],.css-w87pwd:hover[data-disabled],.css-w87pwd[data-hover][data-disabled]{background:initial;}.chakra-ui-dark .css-w87pwd:not([data-theme]):disabled,[data-theme=dark] .css-w87pwd:not([data-theme]):disabled,.css-w87pwd[data-theme=dark]:disabled,.chakra-ui-dark .css-w87pwd:not([data-theme])[disabled],[data-theme=dark] .css-w87pwd:not([data-theme])[disabled],.css-w87pwd[data-theme=dark][disabled],.chakra-ui-dark .css-w87pwd:not([data-theme])[aria-disabled=true],[data-theme=dark] .css-w87pwd:not([data-theme])[aria-disabled=true],.css-w87pwd[data-theme=dark][aria-disabled=true],.chakra-ui-dark .css-w87pwd:not([data-theme])[data-disabled],[data-theme=dark] .css-w87pwd:not([data-theme])[data-disabled],.css-w87pwd[data-theme=dark][data-disabled]{color:#ffffff!important;}@media screen and (min-width: 240px){.css-w87pwd{border-top-left-radius:0px;border-bottom-left-radius:0px;}}@media screen and (min-width: 960px){.css-w87pwd{-webkit-padding-start:0px;padding-inline-start:0px;-webkit-padding-end:0px;padding-inline-end:0px;width:39%;letter-spacing:2.6px;}}@media screen and (min-width: 1200px){.css-w87pwd{width:24%;}}.css-w87pwd:disabled,.css-w87pwd[disabled],.css-w87pwd[aria-disabled=true],.css-w87pwd[data-disabled]{opacity:1;cursor:not-allowed;border:1px solid;border-color:var(--chakra-colors-transparent);-webkit-transition:none;transition:none;}.css-w87pwd:disabled:hover,.css-w87pwd[disabled]:hover,.css-w87pwd[aria-disabled=true]:hover,.css-w87pwd[data-disabled]:hover,.css-w87pwd:disabled[data-hover],.css-w87pwd[disabled][data-hover],.css-w87pwd[aria-disabled=true][data-hover],.css-w87pwd[data-disabled][data-hover]{border:1px solid;border-color:var(--chakra-colors-accentPrimary);}</style><button type="submit" class="chakra-button css-w87pwd">Let‘s Go</button></div></form><style data-emotion="css 3b86ra">.css-3b86ra{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:var(--chakra-space-5);padding-top:var(--chakra-space-8);}@media screen and (min-width: 768px){.css-3b86ra{padding-top:var(--chakra-space-5);}}@media screen and (min-width: 960px){.css-3b86ra{padding-top:0px;}}</style><div class="chakra-stack css-3b86ra"><style data-emotion="css 1dneacq">.css-1dneacq a{font-size:var(--chakra-fontSizes-2-5xl);}.css-1dneacq:hover,.css-1dneacq[data-hover]{-webkit-filter:invert(51%) sepia(24%) saturate(6981%) hue-rotate(219deg) brightness(100%) contrast(103%);filter:invert(51%) sepia(24%) saturate(6981%) hue-rotate(219deg) brightness(100%) contrast(103%);}</style><div class="css-1dneacq"><a href="https://medium.com/plotly"><style data-emotion="css 17o9b05">.css-17o9b05{color:var(--chakra-colors-bodyText);font-size:20px;}</style><div class="css-17o9b05"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M834.7 279.8l61.3-58.9V208H683.7L532.4 586.4 360.3 208H137.7v12.9l71.6 86.6c7 6.4 10.6 15.8 9.7 25.2V673c2.2 12.3-1.7 24.8-10.3 33.7L128 805v12.7h228.6v-12.9l-80.6-98a39.99 39.99 0 0 1-11.1-33.7V378.7l200.7 439.2h23.3l172.6-439.2v349.9c0 9.2 0 11.1-6 17.2l-62.1 60.3V819h301.2v-12.9l-59.9-58.9c-5.2-4-7.9-10.7-6.8-17.2V297a18.1 18.1 0 0 1 6.8-17.2z"></path></svg></div></a></div><div class="css-1dneacq"><a href="https://twitter.com/plotlygraphs"><style data-emotion="css 8gwtju">.css-8gwtju{color:var(--chakra-colors-bodyText);font-size:16px;}</style><div class="css-8gwtju"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M8 2H1L9.26086 13.0145L1.44995 21.9999H4.09998L10.4883 14.651L16 22H23L14.3917 10.5223L21.8001 2H19.1501L13.1643 8.88578L8 2ZM17 20L5 4H7L19 20H17Z"></path></svg></div></a></div><div class="css-1dneacq"><a href="https://github.com/plotly"><div class="css-17o9b05"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0 1 38.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"></path></svg></div></a></div><div class="css-1dneacq"><a href="https://www.instagram.com/plotly/"><div class="css-17o9b05"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M512 306.9c-113.5 0-205.1 91.6-205.1 205.1S398.5 717.1 512 717.1 717.1 625.5 717.1 512 625.5 306.9 512 306.9zm0 338.4c-73.4 0-133.3-59.9-133.3-133.3S438.6 378.7 512 378.7 645.3 438.6 645.3 512 585.4 645.3 512 645.3zm213.5-394.6c-26.5 0-47.9 21.4-47.9 47.9s21.4 47.9 47.9 47.9 47.9-21.3 47.9-47.9a47.84 47.84 0 0 0-47.9-47.9zM911.8 512c0-55.2.5-109.9-2.6-165-3.1-64-17.7-120.8-64.5-167.6-46.9-46.9-103.6-61.4-167.6-64.5-55.2-3.1-109.9-2.6-165-2.6-55.2 0-109.9-.5-165 2.6-64 3.1-120.8 17.7-167.6 64.5C132.6 226.3 118.1 283 115 347c-3.1 55.2-2.6 109.9-2.6 165s-.5 109.9 2.6 165c3.1 64 17.7 120.8 64.5 167.6 46.9 46.9 103.6 61.4 167.6 64.5 55.2 3.1 109.9 2.6 165 2.6 55.2 0 109.9.5 165-2.6 64-3.1 120.8-17.7 167.6-64.5 46.9-46.9 61.4-103.6 64.5-167.6 3.2-55.1 2.6-109.8 2.6-165zm-88 235.8c-7.3 18.2-16.1 31.8-30.2 45.8-14.1 14.1-27.6 22.9-45.8 30.2C695.2 844.7 570.3 840 512 840c-58.3 0-183.3 4.7-235.9-16.1-18.2-7.3-31.8-16.1-45.8-30.2-14.1-14.1-22.9-27.6-30.2-45.8C179.3 695.2 184 570.3 184 512c0-58.3-4.7-183.3 16.1-235.9 7.3-18.2 16.1-31.8 30.2-45.8s27.6-22.9 45.8-30.2C328.7 179.3 453.7 184 512 184s183.3-4.7 235.9 16.1c18.2 7.3 31.8 16.1 45.8 30.2 14.1 14.1 22.9 27.6 30.2 45.8C844.7 328.7 840 453.7 840 512c0 58.3 4.7 183.2-16.2 235.8z"></path></svg></div></a></div><div class="css-1dneacq"><a href="https://www.facebook.com/Plotly/"><div class="css-17o9b05"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-92.4 233.5h-63.9c-50.1 0-59.8 23.8-59.8 58.8v77.1h119.6l-15.6 120.7h-104V912H539.2V602.2H434.9V481.4h104.3v-89c0-103.3 63.1-159.6 155.3-159.6 44.2 0 82.1 3.3 93.2 4.8v107.9z"></path></svg></div></a></div><div class="css-1dneacq"><a href="https://www.linkedin.com/company/plotly/"><div class="css-17o9b05"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zM349.3 793.7H230.6V411.9h118.7v381.8zm-59.3-434a68.8 68.8 0 1 1 68.8-68.8c-.1 38-30.9 68.8-68.8 68.8zm503.7 434H675.1V608c0-44.3-.8-101.2-61.7-101.2-61.7 0-71.2 48.2-71.2 98v188.9H423.7V411.9h113.8v52.2h1.6c15.8-30 54.5-61.7 112.3-61.7 120.2 0 142.3 79.1 142.3 181.9v209.4z"></path></svg></div></a></div></div></div><style data-emotion="css 34u4wp">.css-34u4wp{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.5rem;width:100%;}@media screen and (min-width: 960px){.css-34u4wp{width:50%;}}</style><div class="chakra-stack css-34u4wp"><style data-emotion="css 123i031">.css-123i031{display:grid;grid-gap:0px;grid-row-gap:var(--chakra-space-5);grid-column-gap:var(--chakra-space-5);grid-template-columns:repeat(2, 1fr);-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-top:0px;-webkit-align-items:start;-webkit-box-align:start;-ms-flex-align:start;align-items:start;font-size:var(--chakra-fontSizes-sm);}@media screen and (min-width: 240px){.css-123i031{grid-column-gap:var(--chakra-space-3);}}@media screen and (min-width: 576px){.css-123i031{grid-row-gap:var(--chakra-space-8);grid-column-gap:var(--chakra-space-8);grid-template-columns:repeat(3, 1fr);}}@media screen and (min-width: 960px){.css-123i031{grid-column-gap:0px;padding-top:var(--chakra-space-5);}}@media screen and (min-width: 1200px){.css-123i031{grid-row-gap:var(--chakra-space-10);grid-column-gap:0px;}}</style><div class="css-123i031"><style data-emotion="css 1297823">.css-1297823{position:relative;z-index:2;padding-top:var(--chakra-space-10);}@media screen and (min-width: 960px){.css-1297823{padding-top:0px;}}</style><div class="css-1297823"><style data-emotion="css 11nrrcx">.css-11nrrcx{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:var(--chakra-space-3);}</style><div class="chakra-stack css-11nrrcx"><style data-emotion="css 122asr0">.css-122asr0{font-size:var(--chakra-fontSizes-lg);font-weight:var(--chakra-fontWeights-bold);letter-spacing:.1em;text-transform:uppercase;}</style><p class="chakra-text css-122asr0">Products & Services</p><style data-emotion="css 73k4dz">.css-73k4dz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:0.5rem;list-style-type:none;padding-top:var(--chakra-space-2);}</style><ul class="chakra-stack css-73k4dz"><style data-emotion="css 1nkfmis">.css-1nkfmis{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.css-1nkfmis a{font-size:var(--chakra-fontSizes-lg);color:var(--chakra-colors-bodyText);}</style><li class="css-1nkfmis"><style data-emotion="css 5cco2g">.css-5cco2g{display:inline-block;}@media screen and (min-width: 240px){.css-5cco2g{padding-right:var(--chakra-space-2);}}@media screen and (min-width: 960px){.css-5cco2g{padding-right:var(--chakra-space-3);}}</style><div class="css-5cco2g"><a href="/dash/">Dash Enterprise</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/dash/app-studio/">Plotly App Studio</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/dash/chatbot-builder/">Chatbot Builder</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/workspaces/">Data App Workspaces</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/design-kit/">Design Kit</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/snapshot-engine/">Snapshot Engine</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/app-manager/">App Manager</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/centralized-data-app-management/">Centralized Development</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/job-queue/">Job Queue</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/embedding/">Embedding</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/authentication/">Authentication Middleware</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/dash/chatgpt/">ChatGPT Integration</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/customer-success/">Customer Success</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/consulting-and-oem/">Professional Services</a></div></li></ul></div></div><div class="css-1297823"><div class="chakra-stack css-11nrrcx"><p class="chakra-text css-122asr0">DOCS</p><ul class="chakra-stack css-73k4dz"><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://dash.plotly.com/dash-enterprise">Dash Enterprise</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://dash.plotly.com/">Dash Open Source</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/graphing-libraries/">Graphing Libraries</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://community.plotly.com/">Community</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/examples/">Example apps</a></div></li></ul></div></div><div class="css-1297823"><div class="chakra-stack css-11nrrcx"><p class="chakra-text css-122asr0">Resources</p><ul class="chakra-stack css-73k4dz"><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/user-stories/">User Stories</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/events/">Events</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/resources/webinars/">Webinars</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/blog/">Blog</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/resources/">White Papers</a></div></li></ul></div></div><div class="css-1297823"><div class="chakra-stack css-11nrrcx"><p class="chakra-text css-122asr0">Solutions</p><ul class="chakra-stack css-73k4dz"><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/dash/databricks/">Databricks</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/dash/snowflake/">Snowflake</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/solutions/finance/">Financial Services</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/solutions/healthcare-life-sciences-pharma/">Healthcare & Life Sciences</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/solutions/energy/">Energy & Utilities</a></div></li></ul></div></div><div class="css-1297823"><div class="chakra-stack css-11nrrcx"><p class="chakra-text css-122asr0">COMPANY</p><ul class="chakra-stack css-73k4dz"><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/about-us/">About Us</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/careers/">Careers</a></div><style data-emotion="css vtlz5f">.css-vtlz5f{display:inline-block;padding-top:var(--chakra-space-1);padding-bottom:var(--chakra-space-1);-webkit-padding-start:var(--chakra-space-2);padding-inline-start:var(--chakra-space-2);-webkit-padding-end:var(--chakra-space-2);padding-inline-end:var(--chakra-space-2);background:rgb(122 118 255 / 20%);font-family:var(--chakra-fonts-body);color:var(--chakra-colors-accentPrimary);border:1px solid;border-color:var(--chakra-colors-accentPrimary);border-radius:5px;cursor:pointer;}@media screen and (min-width: 240px){.css-vtlz5f{font-size:5.5px;}}@media screen and (min-width: 960px){.css-vtlz5f{font-size:var(--chakra-fontSizes-4xs);}}</style><p class="chakra-text css-vtlz5f">WE ARE HIRING</p></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="/contact-us/">Contact Us</a></div></li><li class="css-1nkfmis"><div class="css-5cco2g"><a href="https://plotly.com/news/">Press & News</a></div></li></ul></div></div></div></div></div><style data-emotion="css 1cg5ubq">.css-1cg5ubq{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:var(--chakra-space-10);position:relative;top:0px;font-size:var(--chakra-fontSizes-sm);}@media screen and (min-width: 960px){.css-1cg5ubq{top:-20px;}}</style><div class="chakra-stack css-1cg5ubq"><style data-emotion="css s45tpy">.css-s45tpy{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:var(--chakra-space-5);color:var(--chakra-colors-bodyText);}@media screen and (min-width: 960px){.css-s45tpy{gap:68px;}}</style><div class="chakra-stack css-s45tpy"><style data-emotion="css 14lt884">.css-14lt884{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:var(--chakra-space-1);}</style><div class="chakra-stack css-14lt884"><span class="chakra-text css-0"> © <!-- -->2024</span><div class="css-0">Plotly. All rights reserved.</div></div><style data-emotion="css 4g6ai3">.css-4g6ai3{cursor:pointer;}</style><div class="css-4g6ai3">Cookie Preferences</div><style data-emotion="css qtneuq">.css-qtneuq a:hover{border-color:var(--chakra-colors-accentPrimary);}</style><div class="css-qtneuq"><a href="/privacy/">Privacy</a></div></div></div></div></div></footer><style data-emotion="css 3a8qag">.css-3a8qag{margin-top:0px;width:100%;height:10px;background-image:linear-gradient(to left, var(--chakra-colors-gradientStart), var(--chakra-colors-gradientEndSecondary));}</style><div class="css-3a8qag"></div></div></div><span></span><span id="__chakra_env" hidden=""></span></div></body></html>