这是一张财务图表我希望在画布(图)图表上绘制数字,x轴作为时间序列,y轴作为价格,例如我在照片编辑器上设计的图像,以表明我的观点,也共享将用于绘制的数据。
有人能帮我怎样才能达到这个结果吗。以下原始数据在15分钟内重新采样,也按价格分组(LTP-上次交易价格)。
共享原始数据绘制的示例图
- 您所描述的是
Scatter(mode="text")
这是下面代码中的第二个跟踪 - 你的模拟图片还显示了画布上文本周围的线条。这是通过条跟踪完成的
- 大部分代码都是模拟您的数据,因为您没有提供
import pandas as pd
import numpy as np
import plotly.graph_objects as go
# generate some sample data
df = (
pd.DataFrame(
index=pd.MultiIndex.from_product(
[
np.arange(326.75, 324.95, -0.05),
pd.date_range("24-sep-2021 09:00", freq="15min", periods=6),
],
names=["LTP", "Time"],
)
)
.reset_index()
.pipe(
lambda d: d.assign(
BuyVolume=np.random.choice(
np.concatenate([[0], np.random.randint(0, 1000, (len(d)))]),
len(d),
p=[0.9] + [0.1 / len(d) for _ in range(len(d))],
),
SellVolume=np.random.choice(
np.concatenate([[0], np.random.randint(0, 1000, (len(d)))]),
len(d),
p=[0.9] + [0.1 / len(d) for _ in range(len(d))],
),
)
)
)
print(df.head(20).to_markdown())
# create text to appear on chart
df = df.assign(
plotText=lambda d: d["BuyVolume"].astype(str) + "x" + d["SellVolume"].astype(str)
)
# only rows that have either a buy or sell volume
dfp = df.loc[df["plotText"].ne("0x0")]
# ranges for bars around the text
dfx = dfp.groupby("Time").agg(min=("LTP", "min"), max=("LTP", "max"))
fig = go.Figure(
[
go.Bar(
x=dfx.index,
y=dfx["max"] - dfx["min"],
base=dfx["min"],
marker={"color":"white", "line":{"color":"black", "width":3}}
),
go.Scatter(x=dfp["Time"], y=dfp["LTP"], text=dfp["plotText"], mode="text"),
],
)
fig.update_layout(showlegend=False, template="plotly_white")
样本数据
0 | 326.75 | 2021-09-24 09:00:00 | 0 | |||||||||||
1 | 2 | 3 | 4 | 5 | 326.75 | 2021-09-24 10:15:00 | 050 | //tr>|||||||
6 | 326.7 | 2021-09-24 09:00:00 | td style="text align=right;">7326.7 | 2021-09-24 09:15:00 | td style="text-align:right;">89 | 326.7 | 2021-09-24 09:45:00 | |||||||
10 | 11 | 326.7 | 2021-09-24 10:15:00 | 12 | 326.65 | 2021-09-24 09:00:00 | 13 | 14 | 326.65 | 2021-09-24 09:30:00 | 68//tr>||||
15 | 16 | 326.65 | 2021-09-24 10:00:00 | >17 | 326.65 | 2021-09-24 10:15:00 | 130 | //tr>|||||||
18 | 326.6 | 2021-09-24 09:00:00 | >19 |