我想用 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 认为我想要每种颜色一个图形,这当然是一个很酷的功能,但在这种情况下不适合我的需求。(但是,与之前的连续比例相比,颜色图例现在更好。)
由于我在互联网上搜索不成功(这个问题经常在 StackOverflow 上弹出,但似乎没有简单的解决方案想要的地块),我试图自己构建这个数字。以下代码说明了这种方法:
# 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
。所以我会很感激提示我如何控制添加的痕迹的颜色。