簡體   English   中英

在圖形之外繪圖

[英]plotly paint outside of figure

我不知道標題是否描述了我的問題,但這是我最好的猜測。

在 plotly 中創建甘特圖很容易( https://plotly.com/python/gantt/ )。

此外,我想指出某些關鍵事件。 由於這些不是特定於類別的,我不希望它們指代 y 軸上的某個類別。 所以我想用垂直線。 這仍然很容易( add_vline )。 但是那些行也需要標上事件名稱,事件通常有很長的名稱。 這可以通過注釋垂直線來完成。 由於事件名稱很長,我認為在 y 方向上偏移它們是個好主意。

最終結果應如下所示: 在此處輸入圖片說明 標記垂直線大致適用於前三個事件,但隨后注釋脫離了為圖形分配的畫布(?)。 我試圖用黑色虛線框表示這一點。

因此,不顯示文本“被切斷的文本”和“沒有機會”。 我怎樣才能解決這個問題? 我讀到注釋並不是真正的圖形對象,但因此,圖形的尺寸沒有擴展到注釋的坐標。 但我也沒有在 plotly 中發現“文本圖形對象”。

您應該能夠通過組合shapesannotations和正確調整margins來獲得所需的內容。 下面的設置就是這樣做的,並在fig.add_annotation()使用y = -0.2-(i/10)yref = 'paper'注釋形狀越來越負偏移到零線。 就目前而言,該方法在注釋行的數量方面並不是動態,但我們可以仔細研究一下,如果這個數字確實代表了您正在尋找的內容的本質:

在此處輸入圖片說明

完整代碼:

import plotly.express as px
import pandas as pd

df = pd.DataFrame([
    dict(Task="Job A", Start='2009-01-01', Finish='2009-02-28'),
    dict(Task="Job B", Start='2009-03-05', Finish='2009-04-15'),
    dict(Task="Job C", Start='2009-02-20', Finish='2009-05-30')
])

fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task")
fig.update_yaxes(autorange="reversed")

events = [{'date':'2009-02-01', 'annotation': 'some important information', 'color':'red'},
          {'date':'2009-04-01', 'annotation': 'some very important stuff', 'color':'green'}]

for i, e in enumerate(events):
    fig.add_shape(type = 'line', x0 = e['date'], x1 = e['date'], y0 = 0, y1 = 1, yref = 'paper',
                  line = dict(color = e['color']))
    fig.add_annotation(x = e['date'], y = -0.2-(i/10), text = e['annotation'],
                      yref = 'paper', showarrow = False,
                      font=dict(color=e['color'],size=12))

fig.update_layout(margin=dict(l=25,
                                r=25,
                                b=100,
                                t=25,
                                pad=4),
                  paper_bgcolor="LightSteelBlue")
    
fig.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM