添加垂直线以在列包含文本的日期绘制

Posted

技术标签:

【中文标题】添加垂直线以在列包含文本的日期绘制【英文标题】:add vertical lines to plot at dates where column contains text 【发布时间】:2021-12-11 05:52:48 【问题描述】:
import plotly as plotly
from plotly.offline import plot
import plotly.express as px
import plotly.graph_objects as go

import pandas as pd
import numpy as np

df = pd.DataFrame('height': [712, 712, 716, 716, 718, np.nan, np.nan, np.nan, np.nan, np.nan],
                           'moisture': [0.06, 0.19, 0.18, 0.17, 0.18, np.nan, np.nan, np.nan, np.nan, np.nan],
                           'tasks': ['water', None, None, 'prune', None, None, 'position', None, 'prune', None], 
                           index=['2020-01-04', '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08', '2020-01-09',
                            '2020-01-10', '2020-01-11', '2020-01-12', '2020-01-13'])

df.index.name = 'date'

df 我想绘制一个“线”图并在所有index date 点上添加一个值出现在df.tasks 列中的点,无论对应的@987654326 中是否有值@row 与否。

我只能用代表高度值的基本线而不是垂直线来绘制“线”图,使用.....

fig = px.line(df, x=df.index, y=df.height)

在此之后,我创建了字典,我认为可以从中生成垂直线......

index_tasks = df[~df.tasks.isnull()]


task_dict = index_tasks.groupby('date')['tasks'].apply(list).to_dict() 

但是,即使在浏览了情节文档之后,我也不确定如何继续。

感谢您的阅读,希望您能伸出援助之手。

【问题讨论】:

【参考方案1】: 您确实描述了需要编码的内容 在 plotly shapes 中,其中 vlineshape 的一种类型,是布局的一部分,而不是痕迹。因此,最简单的方法是在创建图形后添加它们。
import plotly as plotly
from plotly.offline import plot
import plotly.express as px
import plotly.graph_objects as go

import pandas as pd
import numpy as np

df = pd.DataFrame('height': [712, 712, 716, 716, 718, np.nan, np.nan, np.nan, np.nan, np.nan],
                           'moisture': [0.06, 0.19, 0.18, 0.17, 0.18, np.nan, np.nan, np.nan, np.nan, np.nan],
                           'tasks': ['water', None, None, 'prune', None, None, 'position', None, 'prune', None], 
                           index=['2020-01-04', '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08', '2020-01-09',
                            '2020-01-10', '2020-01-11', '2020-01-12', '2020-01-13'])


fig = px.line(df, y="height")

for x in df.loc[~df["tasks"].isna()].index:
    fig.add_vline(x=x)
fig.show()

【讨论】:

天哪,你让这看起来很简单!谢谢。我们可以添加一个图例来标识每条垂直线吗?

以上是关于添加垂直线以在列包含文本的日期绘制的主要内容,如果未能解决你的问题,请参考以下文章

Android绘图基础篇

在 jqplot 图表中绘制 x ax 具有日期格式的垂直线

如何在视频上绘制文本以在 iOS 上显示字幕?

添加边缘权重以在 networkx 中绘制输出

MFC:如何使用环绕和垂直居中绘制文本?

有没有一种“正确”的方式让 NSTextFieldCell 绘制垂直居中的文本?