gpt4 book ai didi

python - Plotly:条形图不透明度随着时间范围的延长而变化

转载 作者:行者123 更新时间:2023-12-04 16:38:24 30 4
gpt4 key购买 nike

我注意到绘制不同的时间尺度会导致重叠条形图的不透明度逐渐消失。我该如何纠正?在第一张图中,我绘制了 2 年的范围,在第二张图中,我绘制了 1 年的时间范围。请注意,前者有一个明显褪色的条形图,我希望这两个图表无论范围如何都是相同的。
旁注:我正在“破解”图表以使其以主轴为中心,如果有人能帮我弄清楚如何直接设置辅助轴的 y 轴范围,这也会非常有帮助。

import plotly.graph_objects as go
from plotly.subplots import make_subplots

filtered = df[(df['date'] > '2017-1-24') & (df['date'] <= '2018-1-24')]

fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
go.Bar(
x=filtered['date'],
y=filtered['divergence'],
opacity=0.5
)
)

fig.add_trace(
go.Scatter(
x=filtered['date'],
y=filtered['price'],
mode="lines"
),
secondary_y=True
)

fig.update_layout(yaxis_range=[-9, 9])
fig.show()
Opacity lower than expected:
enter image description here
Opacity normal:
enter image description here

最佳答案

简答:
这与不透明度无关。有关更多详细信息,请查看下面的完整答案。要在具有许多观察值和很少观察值的图形之间获得一致性,您必须将条形线的宽度设置为零,并将 bargap 设置为零,就像在下一个代码片段中一样。使用类似 rgba(0,0,250,0) 的颜色您还可以通过最后一位数字选择您想要的任何不透明度。

fig.update_traces(marker_color = 'rgba(0,0,250, 0.5)',
marker_line_width = 0,
selector=dict(type="bar"))

fig.update_layout(bargap=0,
bargroupgap = 0,
)
plotly 1a - 很少观察
enter image description here
图 1b - 许多观察结果
enter image description here
细节:
这与 opacity无关.您要求 plotly 构建条形图,显然根据 plotly 的条形图必须在条形之间留有空间。所以对于一些观察,你会得到这个:
enter image description here
对于许多观察结果,正如您所展示的,您将得到:
enter image description here
条形的颜色没有改变,但似乎是因为 plolty 挤进了一些空间以进行更多观察。
我最初认为这可以通过以下方式进行修改:
fig.update_layout(bargap=0,
bargroupgap = 0,
)
但不是:
enter image description here
为了增加较小和较大选择项之间的一致性,您必须为条形填充选择与条形线颜色相同的颜色,例如 blue .
fig.update_traces(marker_color='blue',
marker_line_color='blue',
selector=dict(type="bar"))
enter image description here
但是如果放大,条形之间仍然有一点色差:
enter image description here
对于较浅的颜色,这变得更加清晰:
enter image description here
但最好的解决方案竟然是设置 marker_line_width = 0就像答案开头所描述的那样。
最终结果:
enter image description here
完整代码:
import numpy as np
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
import datetime
from plotly.subplots import make_subplots

pd.set_option('display.max_rows', None)

# data sample
nperiods = 50
np.random.seed(123)
df = pd.DataFrame(np.random.randint(-10, 12, size=(nperiods, 2)),
columns=['price', 'divergence'])
datelist = pd.date_range(datetime.datetime(2017, 1, 1).strftime('%Y-%m-%d'),periods=nperiods).tolist()
df['date'] = datelist
df = df.set_index(['date'])
df.index = pd.to_datetime(df.index)
# df.iloc[0] =1000
# df = df.cumsum().reset_index()
df.reset_index(inplace=True)
df['price'] = df['price'].cumsum()
df['divergence'] = df['divergence'].cumsum()

filtered = df[(df['date'] > '2017-1-24') & (df['date'] <= '2018-1-24')]

fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
go.Bar(
x=filtered['date'],
y=filtered['divergence'],
#opacity=0.5
)
)

fig.add_trace(
go.Scatter(
x=filtered['date'],
y=filtered['price'],
mode="lines"
),
secondary_y=True
)


fig.update_traces(marker_color = 'rgba(0,0,250, 0.5)',
marker_line_width = 0,
selector=dict(type="bar"))

fig.update_layout(bargap=0,
bargroupgap = 0,
)


fig.show()

关于python - Plotly:条形图不透明度随着时间范围的延长而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65910725/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com