Plotly - 如何将线条宽度设置为特定值?

8

我正在尝试使用Plotly库绘制图表,我想为每条线设置特定的宽度。

这是我的代码。


x_link = [125, 257, None, 125, 787, None]
y_link = [383, 588, None, 383, 212, None]
z_link = [65, 85, None, 65, 526, None]

link_size = [3,6]

trace1= go.Scatter3d(
                x = x_link, 
                y = y_link,
                z = z_link,
                line=dict(
                    color='#0061ff',
                    width=link_size
                )
)

但是它引发了这个错误。

收到类型为'builtins.list'的无效值,用于scatter3d.line的'width'属性 收到的值:[3, 6]

'width'属性是一个数字,可以指定为: - 在区间[0, inf]内的整数或浮点数

那么,有没有办法设置每条线的特定宽度?

谢谢。

3个回答

12
您需要为数据集添加单个跟踪线,以实现此操作,因为line=dict(width)只接受单个参数,而不是某种数组。对于较大的数据集来说,这可能是一项繁重的工作。但是,如果您将数据集从列表更改为列表的列表,则可以考虑更多的数据点。因此,通过一些数据操纵,您可以将其转换为如下形式:
x_link = [125, 257, None, 125, 787, None]
y_link = [383, 588, None, 383, 212, None]
z_link = [65, 85, None, 65, 526, None]

转化为如下内容:

x_link = [[125, 257, None], [125, 787, None]]
y_link = [[383, 588, None], [383, 212, None]]
z_link = [[65, 85, None], [65, 526, None]]

并运行此代码:

import plotly.graph_objects as go
from plotly.offline import init_notebook_mode, iplot

x_link = [[125, 257, None], [125, 787, None]]
y_link = [[383, 588, None], [383, 212, None]]
z_link = [[65, 85, None], [65, 526, None]]

# figure formatting
colors=['red', 'green']
link_size = [2,12]

# make multiple traces
traces={}
for i in range(0, len(x_link)):
    traces['trace_' + str(i)]=go.Scatter3d(x = x_link[i], 
                                           y = y_link[i],
                                           z = z_link[i],
                                           line=dict(
                                                color=colors[i],
                                                width=link_size[i]))
data=list(traces.values())

# build and plot figure
fig=go.Figure(data)
fig.show()

要获取这个图表:

enter image description here


@MykolaZotko 哈哈!在我发布我的建议之前,没有看到你的建议。顺便说一下,我的建议是基于 OP 的示例片段和我自己以前的答案:https://dev59.com/v7bna4cB1Zd3GeqPZ14j#57987361 - vestland
@MykolaZotko 但你有我的点赞。确切地说,是点赞S。看了一下你的个人资料,发现了其他非常有用的贡献=) - vestland
谢谢!如果您还没有看到我的解决方案,为什么要导入 init_notebook_mode?;) 如果您想在jupyter笔记本中使用plotly,则需要添加 init_notebook_mode(connected=True)。您还没有使用函数 iplot() - Mykola Zotko
1
我在先前版本的解决方案中使用过它。但没关系 :) - Mykola Zotko

3

您需要创建多个迹线并为每个迹线指定宽度:

x_link = [125, 257, None, 125, 787, None]
y_link = [383, 588, None, 383, 212, None]
z_link = [65, 85, None, 65, 526, None]

link_size = [3,6]

trace1= go.Scatter3d(
                x = x_link[:3], 
                y = y_link[:3],
                z = z_link[:3],
                line=dict(
                    color='green',
                    width=link_size[0]
                )
)

trace2= go.Scatter3d(
                x = x_link[3:], 
                y = y_link[3:],
                z = z_link[3:],
                line=dict(
                    color='red',
                    width=link_size[1]
                )
)

fig = go.Figure(data=[trace1, trace2])

谢谢回复,但我认为这种方法不适用于许多行。 - Kaow
1
你需要创建一个for循环,并为每行代码创建跟踪,然后将它们放入列表中。这是唯一的方法。 - Mykola Zotko

1

@Sanil Khurana谢谢您的回复,但是如果我想将第一行的宽度设置为3,第二行的宽度设置为6,我该怎么做? - Kaow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接