[英]treemap() got an unexpected keyword argument 'path' in plotly.express
[英]Aggregation calculation method for treemap in plotly.express - Python
提前感謝那些願意幫助我的人。 這是我第一次問這個問題,因為我已經在這個問題上苦苦掙扎了好幾天! 幫助我解決這個問題的人將獲得永恆的榮耀!
讓我用幾行代碼和屏幕來解釋我的問題。
我想創建一個樹狀圖來顯示 2 個日期之間的值增長。 為了更精確,我希望此樹形圖: - 具有大小與日期 2 的值 x 成比例的正方形,並根據顯示此值 x 從日期 1 到日期 2 的增長的比例進行着色。
讓我們考慮以下示例:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.express as px
import plotly
data = {'variable': ['a', 'b', 'c'],
'parent': ['I', 'I', 'II'],
'value_1': [1,4,5],
'value_2': [4,2,5]
}
df = pd.DataFrame(data)
df['growth'] = 100 * (df['value_2'] / df['value_1'] - 1)
fig = px.treemap(df, path=['parent', 'variable'], values = 'value_2', color='growth',
color_continuous_scale='plasma')
fig.show()
它在這里給了我美麗的樹圖:增長樹圖
但這就是問題所在。 正如您在下面的屏幕上看到的,I 的增長是 183%:錯誤的增長!
但是,手動計算時,a從1到4,b從4到2,增長應該是:1/5 * 300% + 4/5 * -50% = 20%(我從5到6) .
這是由於微積分是 4/6 * 300% + 2/6 * -50% = 183%。 該方法正在計算新系數的加權平均值,而不是理論上應該計算的以前的系數。
有沒有辦法在聚合到父級 class 時獲得正確的增長?
非常感謝您的幫助,如果我能提供進一步的幫助,請告訴我
當您試圖描述數據時,我找不到一種方法來獲取數據。 但是,我確實想出了一個解決方法。
這需要使用plotly.io
。
我想指出的是,當您將父級從 183.333333 更改為 20% 時,您與 colors 的鮮明對比就消失了——本質上,父級與 II 的顏色幾乎相同,因為值為 20 和 0,而'a' 為 300,最低僅為 -50。
此外,我添加了px.Constant
這樣你就不會得到一個真正無用的 hover label 作為根(父母的黑色背景父母)。
import pandas as pd
import plotly.express as px
import plotly.io as pio
fig = px.treemap(df, path=[px.Constant('Total'), 'parent', 'variable'],
values = 'value_2', color='growth',
color_continuous_scale='plasma')
現在,當您使用pio
時,您將創建一個外部文件,但除了使用 Jupyter 之外,這是將 Javascript 添加到您的 plot 的唯一方法。這將在您的瀏覽器中自動打開,如fig.show()
,除了這將反映即父I
在hover數據中有20%
的增長。
pio.write_html(fig, 'index.html', auto_open = True, div_id = 'thisPlot',
include_mathjax = 'cdn', include_plotlyjs = 'cdn', full_html = True,
post_script = "setTimeout(function() {" +
"el = document.getElementById('thisPlot');" +
"el.data[0].marker.colors[3] = 20; /* change the calc value */" +
"Plotly.newPlot(el, el.data, el.layout); /* re-plot it */"
"}, 200)")
您可能會注意到調用了el.data[0].marker.colors[3]
進行更改。 那是I
的父母。
這是在進行此更改之前在el.data[0].marker.colors
中捕獲的所有數據: [300, -50, 0, 183.33333333333334, 0, 100]
。
順便說一句,每當我 go 的路線pio.write_html
,我總是命名文件相同的東西,所以它總是覆蓋自己。 我個人對保存的文件不感興趣,只對post_script
的結果感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.