Plotly:一条线,不同的颜色
Plotly: one line, different colors
我想用 Plotly 或 Plotly.Express 制作一个二维图,其中图形的单条线有不同的颜色。也就是说,我有一个 x 值列表和一个 y 值列表,它们指向我的图表上应该连接的点。连接线的颜色取决于第三个给定列表。 (当你熟悉我的例子时,你会注意到 color_list
的最后一个条目不用于给线条着色。但这不是问题,也不是这个问题的主题。)
列表 x_list
、y_list
和 color_list
应该被认为有很多条目(而不是我的示例中的六个)。
一开始,我只是简单地使用了Plotly.Express来绘制散点图:
# file mwe1.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
px.scatter(x=x_list,
y=y_list,
color=color_list).show()
这个程序运行没有问题,画出下图:
除了很亮很难看的黄色,这个还不错
我想做的改变是:用线连接点(我将使用“水平-垂直”模式,但如果这是一个限制,模式不是太重要。)如果颜色被识别也会很棒作为定性尺度,而不是连续尺度。
为了尝试获得点之间的连接线,我编写了以下程序:
# file mwe2.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
px.line(x=x_list,
y=y_list,
color=color_list).show()
这产生了以下混乱:
Plotly 认为我想要每种颜色一个图形,这当然是一个很酷的功能,但在这种情况下不适合我的需要。 (然而,颜色图例现在更好了,而不是之前的连续比例。)
由于我在互联网上搜索没有成功(该问题在 Whosebug 上经常弹出,但似乎没有针对所需绘图的简单解决方案),我尝试自己构建图形。以下代码说明了这种方法:
# file mwe3.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
fig = make_subplots()
# now add the segments manually
for i in range(5):
fig.add_trace(go.Scatter(
x=x_list[i:i+2],
y=y_list[i:i+2],
line_shape='hv'
)
)
fig.show()
这种方法还没有考虑到所需的颜色,但到目前为止它是有效的:
太糟糕了,我想要尊重颜色。这就是我尝试以下操作的原因:
# file mwe4.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
fig = make_subplots()
# now add the segments manually
for i in range(5):
fig.add_trace(go.Scatter(
x=x_list[i:i+2],
y=y_list[i:i+2],
line_shape='hv',
color=color_list[i]
)
)
fig.show()
此程序 运行 不正确。我收到一条很长的错误消息,其本质是没有有效的 属性 称为 color
。
我能做什么?本着 mwe1.py
和 mwe2.py
的精神,我几乎已经放弃希望有一个简单的解决方案。所以我会很感激提示我如何控制添加的轨迹的颜色。
- 已多次阅读您的问题...我相信这样做
- 实际上 color_list 是离散颜色映射,因此使用值从
px.colors.qualitative.Plotly
中查找离散颜色
- 为每对坐标生成轨迹
import plotly.graph_objects as go
import plotly.express as px
x_list = [1, 2, 3, 4, 5, 6]
y_list = [5, 1, 1, 4, 1, 3]
color_list = [0, 2, 0, 2, 2, 1]
go.Figure(
[
go.Scatter(
x=x_list[tn : tn + 2],
y=y_list[tn : tn + 2],
line_shape="hv",
line_color=px.colors.qualitative.Plotly[color_list[tn]],
showlegend=False,
)
for tn in range(len(x_list))
]
).show()
进一步提示:
- 如果您不希望点(所谓的标记)出现在您的绘图中,请在调用
go.Scatter(...)
时使用参数 mode="lines"
。
- 如果
color_list
包含超过 10 个索引,列表 px.colors.qualitative.Plotly
是不够的。看看 these options.
我想用 Plotly 或 Plotly.Express 制作一个二维图,其中图形的单条线有不同的颜色。也就是说,我有一个 x 值列表和一个 y 值列表,它们指向我的图表上应该连接的点。连接线的颜色取决于第三个给定列表。 (当你熟悉我的例子时,你会注意到 color_list
的最后一个条目不用于给线条着色。但这不是问题,也不是这个问题的主题。)
列表 x_list
、y_list
和 color_list
应该被认为有很多条目(而不是我的示例中的六个)。
一开始,我只是简单地使用了Plotly.Express来绘制散点图:
# file mwe1.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
px.scatter(x=x_list,
y=y_list,
color=color_list).show()
这个程序运行没有问题,画出下图:
除了很亮很难看的黄色,这个还不错
我想做的改变是:用线连接点(我将使用“水平-垂直”模式,但如果这是一个限制,模式不是太重要。)如果颜色被识别也会很棒作为定性尺度,而不是连续尺度。
为了尝试获得点之间的连接线,我编写了以下程序:
# file mwe2.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
px.line(x=x_list,
y=y_list,
color=color_list).show()
这产生了以下混乱:
Plotly 认为我想要每种颜色一个图形,这当然是一个很酷的功能,但在这种情况下不适合我的需要。 (然而,颜色图例现在更好了,而不是之前的连续比例。)
由于我在互联网上搜索没有成功(该问题在 Whosebug 上经常弹出,但似乎没有针对所需绘图的简单解决方案),我尝试自己构建图形。以下代码说明了这种方法:
# file mwe3.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
fig = make_subplots()
# now add the segments manually
for i in range(5):
fig.add_trace(go.Scatter(
x=x_list[i:i+2],
y=y_list[i:i+2],
line_shape='hv'
)
)
fig.show()
这种方法还没有考虑到所需的颜色,但到目前为止它是有效的:
太糟糕了,我想要尊重颜色。这就是我尝试以下操作的原因:
# file mwe4.py
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
x_list = [1,2,3,4,5,6]
y_list = [5,1,1,4,1,3]
color_list = [0,2,0,2,2,1]
fig = make_subplots()
# now add the segments manually
for i in range(5):
fig.add_trace(go.Scatter(
x=x_list[i:i+2],
y=y_list[i:i+2],
line_shape='hv',
color=color_list[i]
)
)
fig.show()
此程序 运行 不正确。我收到一条很长的错误消息,其本质是没有有效的 属性 称为 color
。
我能做什么?本着 mwe1.py
和 mwe2.py
的精神,我几乎已经放弃希望有一个简单的解决方案。所以我会很感激提示我如何控制添加的轨迹的颜色。
- 已多次阅读您的问题...我相信这样做
- 实际上 color_list 是离散颜色映射,因此使用值从
px.colors.qualitative.Plotly
中查找离散颜色
- 为每对坐标生成轨迹
import plotly.graph_objects as go
import plotly.express as px
x_list = [1, 2, 3, 4, 5, 6]
y_list = [5, 1, 1, 4, 1, 3]
color_list = [0, 2, 0, 2, 2, 1]
go.Figure(
[
go.Scatter(
x=x_list[tn : tn + 2],
y=y_list[tn : tn + 2],
line_shape="hv",
line_color=px.colors.qualitative.Plotly[color_list[tn]],
showlegend=False,
)
for tn in range(len(x_list))
]
).show()
进一步提示:
- 如果您不希望点(所谓的标记)出现在您的绘图中,请在调用
go.Scatter(...)
时使用参数mode="lines"
。 - 如果
color_list
包含超过 10 个索引,列表px.colors.qualitative.Plotly
是不够的。看看 these options.