plotly.py: 改变线条的不透明度,让标记不透明
plotly.py: change line opacity, leave markers opaque
是否可以更改线条不透明度但不能更改标记不透明度?
我发现我可以设置整行的不透明度,包括标记 (opacity = .5
) 和标记之一(例如 marker={"opacity":1}
)。
如本例所示:
import plotly
import plotly.graph_objs as go
plotly.offline.init_notebook_mode(connected=True) # I'm running in a jupyter notebook
x = np.arange(0,10)
ys = [np.random.rand(10) for _ in range(3)]
lines = []
for y in ys:
line = go.Scatter(x=x, y=y, mode="markers+lines", opacity=.5, marker={'symbol': 'x', 'size': "15", "opacity":1})
lines.append(line)
fig = go.Figure(
data=lines,
layout=go.Layout(showlegend=True)
)
plotly.offline.iplot(fig)
在此处查看结果:
我的问题如下:我的数据点很重要,线条只是视觉辅助。我想使线条 .5 不透明,但标记完全不透明。
但是,当我设置 opacity=.5, marker={'opacity':1}
时,标记的不透明度也会降低。 (我相信标记不透明度在 [0, line-opacity]
.
范围内定义
有什么方法可以获得线条的颜色并调整其不透明度(甚至可能在创建线条之后,但在绘制线条之前)。
我知道我可以创建两条轨迹,一条是点,一条是线。但是,我希望它们是相同的颜色,而不必手动指定颜色。 (痕迹的数量是变化的,所以我更喜欢坚持分配不同颜色的标准机制)
编辑:我目前的解决方案是将线宽设置为 0.5,这样 看起来 更好,但显然此解决方案适用于我,可能对想要粗体和不太透明线条的人有用。
编辑:Github 关于此 problem/feature 的问题 request/behaviour:
https://github.com/plotly/plotly.js/issues/2684
TL;DR - 可以使用:
line=dict(color='rgba(255, 0, 0, 0.5)')
- 来自@david Parks 的例子
Line 对象没有 opacity 属性,但您可以使用 RGBA 分配颜色并设置 alpha。您必须使用 RGBA 为 markers 分配颜色,否则它将继承该行。
在下面的示例中,我创建了三个随机颜色的随机线条。然后,我将相同的颜色分配给标记和线条,但使用字符串连接来更改线条与标记的不透明度。标记将完全不透明,而线条将 80% 透明。
import plotly
import numpy as np
import plotly.graph_objs as go
plotly.offline.init_notebook_mode(connected=True)
x = np.arange(0,10)
ys = [np.random.rand(10) for _ in range(3)]
lines = []
dots = []
for y in ys:
my_color = ('rgba('+str(np.random.randint(0, high = 256))+','+
str(np.random.randint(0, high = 256))+','+
str(np.random.randint(0, high = 256)))
# my_color := "rgba( 143, 82, 244"
line = go.Scatter(
x=x,
y=y,
mode="lines+markers",
marker={
'symbol': 'x',
'size': "15",
'color':my_color+',1)' # "rgba( 143, 82, 244,1)"
},
line={
"color":my_color+',0.2)'
})
lines.append(line)
fig = go.Figure(
data=lines,
layout=go.Layout(showlegend=True)
)
plotly.offline.iplot(fig)
这是我找到的最佳答案的 link:
https://github.com/plotly/plotly.js/issues/2684#issuecomment-641023041
,您可以在其中使用函数将十六进制格式下的颜色转换为 rgba 格式,从而可以在其他答案中提到的最后一个参数上定义 alpha 不透明度。
def hex_to_rgba(h, alpha):
'''
converts color value in hex format to rgba format with alpha transparency
'''
return tuple([int(h.lstrip('#')[i:i+2], 16) for i in (0, 2, 4)] + [alpha])
然后你就可以使用它了
import plotly.graph_objects as go
import plotly.express as px
COLORS = px.colors.qualitative.D3
hex_color = COLORS[0] # Blue
traces = [
go.Scatter(
x=[0, 1],
y=[0, 1],
name='Identity line',
showlegend=False,
line=dict(
color='rgba' + str(hex_to_rgba(
h=hex_color,
alpha=0.25
)),
width=2,
dash='dash'
),
marker=dict(
size=7,
symbol='circle',
color='rgba' + str(hex_to_rgba(
h=hex_color,
alpha=1
))
),
)
]
layout = go.Layout(template='simple_white')
figure = go.Figure(data=traces, layout=layout)
figure.show()
所以这里的蓝色:hex 格式是 '#1F77B4'
和 rgba 格式是 'rgba(31, 119, 180, 0.5)'
是否可以更改线条不透明度但不能更改标记不透明度?
我发现我可以设置整行的不透明度,包括标记 (opacity = .5
) 和标记之一(例如 marker={"opacity":1}
)。
如本例所示:
import plotly
import plotly.graph_objs as go
plotly.offline.init_notebook_mode(connected=True) # I'm running in a jupyter notebook
x = np.arange(0,10)
ys = [np.random.rand(10) for _ in range(3)]
lines = []
for y in ys:
line = go.Scatter(x=x, y=y, mode="markers+lines", opacity=.5, marker={'symbol': 'x', 'size': "15", "opacity":1})
lines.append(line)
fig = go.Figure(
data=lines,
layout=go.Layout(showlegend=True)
)
plotly.offline.iplot(fig)
在此处查看结果:
我的问题如下:我的数据点很重要,线条只是视觉辅助。我想使线条 .5 不透明,但标记完全不透明。
但是,当我设置 opacity=.5, marker={'opacity':1}
时,标记的不透明度也会降低。 (我相信标记不透明度在 [0, line-opacity]
.
有什么方法可以获得线条的颜色并调整其不透明度(甚至可能在创建线条之后,但在绘制线条之前)。 我知道我可以创建两条轨迹,一条是点,一条是线。但是,我希望它们是相同的颜色,而不必手动指定颜色。 (痕迹的数量是变化的,所以我更喜欢坚持分配不同颜色的标准机制)
编辑:我目前的解决方案是将线宽设置为 0.5,这样 看起来 更好,但显然此解决方案适用于我,可能对想要粗体和不太透明线条的人有用。
编辑:Github 关于此 problem/feature 的问题 request/behaviour: https://github.com/plotly/plotly.js/issues/2684
TL;DR - 可以使用:
line=dict(color='rgba(255, 0, 0, 0.5)')
- 来自@david Parks 的例子
Line 对象没有 opacity 属性,但您可以使用 RGBA 分配颜色并设置 alpha。您必须使用 RGBA 为 markers 分配颜色,否则它将继承该行。
在下面的示例中,我创建了三个随机颜色的随机线条。然后,我将相同的颜色分配给标记和线条,但使用字符串连接来更改线条与标记的不透明度。标记将完全不透明,而线条将 80% 透明。
import plotly
import numpy as np
import plotly.graph_objs as go
plotly.offline.init_notebook_mode(connected=True)
x = np.arange(0,10)
ys = [np.random.rand(10) for _ in range(3)]
lines = []
dots = []
for y in ys:
my_color = ('rgba('+str(np.random.randint(0, high = 256))+','+
str(np.random.randint(0, high = 256))+','+
str(np.random.randint(0, high = 256)))
# my_color := "rgba( 143, 82, 244"
line = go.Scatter(
x=x,
y=y,
mode="lines+markers",
marker={
'symbol': 'x',
'size': "15",
'color':my_color+',1)' # "rgba( 143, 82, 244,1)"
},
line={
"color":my_color+',0.2)'
})
lines.append(line)
fig = go.Figure(
data=lines,
layout=go.Layout(showlegend=True)
)
plotly.offline.iplot(fig)
这是我找到的最佳答案的 link: https://github.com/plotly/plotly.js/issues/2684#issuecomment-641023041 ,您可以在其中使用函数将十六进制格式下的颜色转换为 rgba 格式,从而可以在其他答案中提到的最后一个参数上定义 alpha 不透明度。
def hex_to_rgba(h, alpha):
'''
converts color value in hex format to rgba format with alpha transparency
'''
return tuple([int(h.lstrip('#')[i:i+2], 16) for i in (0, 2, 4)] + [alpha])
然后你就可以使用它了
import plotly.graph_objects as go
import plotly.express as px
COLORS = px.colors.qualitative.D3
hex_color = COLORS[0] # Blue
traces = [
go.Scatter(
x=[0, 1],
y=[0, 1],
name='Identity line',
showlegend=False,
line=dict(
color='rgba' + str(hex_to_rgba(
h=hex_color,
alpha=0.25
)),
width=2,
dash='dash'
),
marker=dict(
size=7,
symbol='circle',
color='rgba' + str(hex_to_rgba(
h=hex_color,
alpha=1
))
),
)
]
layout = go.Layout(template='simple_white')
figure = go.Figure(data=traces, layout=layout)
figure.show()
所以这里的蓝色:hex 格式是 '#1F77B4'
和 rgba 格式是 'rgba(31, 119, 180, 0.5)'