如何根据数值条件设置Scattermapbox标记颜色?代码异常排查
解决Plotly散点地图标记颜色不按value值区分的问题
问题根源
你当前代码的np.where逻辑判断存在两处错误:
np.logical_and(df['value'].values < 20, 20 >= df['value'].values)是冗余判断,两个条件完全等价,本质就是筛选value < 20的行;- 颜色映射完全不符合需求:满足
value <20的被设为蓝色,其余全设为绿色,既没区分value>20的红色,还搞反了原本要的绿色对应关系。
正确实现代码
根据需求(value <20设为绿色,value>20设为红色,value=20可自定义颜色),提供两种实现方式:
方式一:嵌套np.where实现多条件判断
import numpy as np import plotly.graph_objects as go import pandas as pd # 构造示例DataFrame data = { 'name': ['BELAL01', 'BELHB23', 'BELLD01', 'BELLD02', 'BELR833', 'BELSA04', 'BELWZ02', 'BETM802'], 'lat': [51.23619, 51.1703, 51.10998, 51.12038, 51.32766, 51.31393, 51.1928, 51.26099], 'lon': [4.38522, 4.341, 5.00486, 5.02155, 4.36226, 4.40387, 5.22153, 4.4244], 'value': [12, 16, 28, 11, 45, 87, 12, 16] } df = pd.DataFrame(data) fig = go.Figure(go.Scattermapbox( mode = "markers", lon = df['lon'], lat = df['lat'], marker=dict( color=np.where(df['value'] < 20, 'green', np.where(df['value'] > 20, 'red', 'yellow')) # value=20时设为黄色,可自行修改 ) )) fig.update_layout(mapbox_style="open-street-map") fig.show()
方式二:列表推导式(更直观)
import plotly.graph_objects as go import pandas as pd # 构造示例DataFrame data = { 'name': ['BELAL01', 'BELHB23', 'BELLD01', 'BELLD02', 'BELR833', 'BELSA04', 'BELWZ02', 'BETM802'], 'lat': [51.23619, 51.1703, 51.10998, 51.12038, 51.32766, 51.31393, 51.1928, 51.26099], 'lon': [4.38522, 4.341, 5.00486, 5.02155, 4.36226, 4.40387, 5.22153, 4.4244], 'value': [12, 16, 28, 11, 45, 87, 12, 16] } df = pd.DataFrame(data) fig = go.Figure(go.Scattermapbox( mode = "markers", lon = df['lon'], lat = df['lat'], marker=dict( color=['green' if v < 20 else 'red' if v > 20 else 'yellow' for v in df['value']] ) )) fig.update_layout(mapbox_style="open-street-map") fig.show()
效果说明
运行上述代码后,value<20的标记会显示绿色,value>20的标记显示红色,若存在value=20的条目,会显示黄色(可根据需求修改该颜色)。
内容的提问来源于stack exchange,提问作者user16511234
相关产品推荐
相关产品推荐

