在饼图python上显示百分比

时间:2021-07-07 07:02:47

标签: python dataframe plotly hyphen

我有一个 Pandas 数据框,它描述了一些生产线机器的生产力(p = 生产力)与其活动时间的比率,wt(= 工作时间)和他们应该工作的整个工作班次,tt( = 总时间)。数据框如下所示:

machines      tt          wt              p
1             7:30:00     4:30:00         0.60
2             7:30:00     3:30:00         0.50
3             6:00:00     5:24:00         0.90
...           ...         ...             ...

机器是字符串
tt 和 wt 是 datetime.time
p 是 float64

我需要在仪表板上显示机器的性能。 Dash 在 plotly 上构建数字,所以可能我将不得不使用 plotly 饼图。我希望,对于每台机器,都有一个饼图来显示该特定机器的生产力。所以每台机器一个馅饼。我还不能发布图片,所以我会给你留下所需解决方案的链接。每台机器的输出应该或多或少像这样

click here to see the image of output needed

更新 在@Rob Raymond 给出详尽的回答之后,我想知道当我将光标移到蓝色区域(或分别为浅蓝色区域)时,是否有任何方法可以显示机器处于活动状态(或分别为浅蓝色区域)的时间。你知道如何用破折号做到这一点吗?

1 个答案:

答案 0 :(得分:0)

  • 您可以将 subplots 用于每台机器的绘图
  • 您可以在饼图之上叠加一个指标来实现您的输出。如果 gauge(半圆)适合您,那么您只需要使用 Indicator
import pandas as pd
import io
import plotly.graph_objects as go
from plotly.subplots import make_subplots

df = pd.read_csv(io.StringIO("""machines      tt          wt              p
m1             7:30:00     4:30:00         0.60
m2             7:30:00     3:30:00         0.50
m3             6:00:00     5:24:00         0.90"""),sep="\s+",)

fig = make_subplots(
    rows=1,
    cols=len(df),
    subplot_titles=df["machines"].astype(str),
    specs=[[{"type": "pie"} for i in range(len(df))]],
)
for i, p in enumerate(df["p"]):
    fig.add_trace(
        go.Pie(
            values=[1 - p, p],
            hole=0.6,
            showlegend=False,
            textinfo="none",
            hovertext=f"tt:{df.loc[i,'tt']}\twt:{df.loc[i,'wt']}",
            marker={"colors": ["lightblue", "blue"]},
        ),
        row=1,
        col=i + 1,
    )
    fig.add_trace(
        go.Indicator(
            mode="number",
            value=p,
            gauge={"axis": {"visible": False}},
            number={"valueformat": "%", "font":{"size":30}},
        ),
        row=1,
        col=i + 1,
    )

fig

enter image description here

相关问题