Python Bokeh热图未显示正确的结果
我正试图以博克的为基础绘制一张叶绿体图,我对这个图库不是很熟悉,尽管我对熊猫有些熟悉。我为我们的系统提供了一个状态及其优先级的数据框架。我无法正确显示优先级。我想我没有正确地使用fill_color属性,但是除了bokeh文档中列出的信息之外,我找不到更多关于它的信息 我的预期输出是高优先级状态显示为红色,中优先级状态显示为绿色,低优先级状态显示为黄色。(配色方案不是我的选择。)如果各州没有优先权,它们应该显示为白色。但是,输出与此完全不匹配——颜色似乎是随机放置的。一些低优先级状态为红色,一些为黄色;一些中等优先级状态为白色,一些为红色;等等 我认为错误在于我的Python Bokeh热图未显示正确的结果,python,pandas,bokeh,Python,Pandas,Bokeh,我正试图以博克的为基础绘制一张叶绿体图,我对这个图库不是很熟悉,尽管我对熊猫有些熟悉。我为我们的系统提供了一个状态及其优先级的数据框架。我无法正确显示优先级。我想我没有正确地使用fill_color属性,但是除了bokeh文档中列出的信息之外,我找不到更多关于它的信息 我的预期输出是高优先级状态显示为红色,中优先级状态显示为绿色,低优先级状态显示为黄色。(配色方案不是我的选择。)如果各州没有优先权,它们应该显示为白色。但是,输出与此完全不匹配——颜色似乎是随机放置的。一些低优先级状态为红色,一些
状态颜色列表。现在我正在循环遍历它,并使用每个状态的优先级更新它,但由于某些原因,它没有正确更新。是否有办法更改patches()方法中的fill\u color
属性,使颜色与优先级值相对应?或者我只是不知怎么搞砸了state\u colors
列表
from bokeh.models import ColumnDataSource
from bokeh.sampledata import us_states
from bokeh.plotting import figure, show, output_file
import pandas as pd
df2 = pd.read_excel(filename, sheetname='2012 Master', header=1, skip_footer=4, parse_cols='A,B,L,P')
usa_states = us_states.data.copy()
state_xs = [usa_states[code]["lons"] for code in usa_states]
state_ys = [usa_states[code]["lats"] for code in usa_states]
df2.fillna(value="", inplace=True)
state_colors = []
for state in df2["State"]:
for priority in df2["Priority"]:
if priority == "High":
state_colors.append("#FF0000")
elif priority == "Medium":
state_colors.append("#008000")
elif priority == "Low":
state_colors.append("#FFFF00")
else:
state_colors.append("#FFFFFF")
source = ColumnDataSource(
data=dict(
st = df2['State'],
priority = df2['Priority']
)
)
p = figure(title="Title", tools= TOOLS, toolbar_location="above", plot_width=1100, plot_height=700, x_range=[-128,-64], y_range=[23,50])
p.patches(state_xs, state_ys, fill_color = state_colors, source=source, fill_alpha=1, line_color="black", line_width=1)
hover = p.select(dict(type=HoverTool))
hover.tooltips= [
("State","@st"),
("Priority","@priority"),
]
show(p)
我的数据帧(df2):
我使用的是熊猫0.17.1。是bokeh使用的美国州代码。是我当前的输出。我认为您在州颜色列表中使用熊猫的情况很糟糕
尝试用以下内容替换您的循环:
def get_color(priority):
if priority == "High":
return "#FF0000"
elif priority == "Medium":
return "#008000"
elif priority == "Low":
return "#FFFF00"
else:
return "#FFFFFF"
df2["color"] = df2["Priority"].apply(get_color)
然后将源代码替换为
source = ColumnDataSource(
data=dict(
st = df2['State'],
priority = df2['Priority'],
state_colors = df2['color']
)
)
下面是一段适用于圆的代码,没有测试补丁
df1['color'] = df1['value'].apply(lambda value: rgb2hex(m.to_rgba(value)))
df1['alpha'] = 0.3
output_notebook()
source1 = ColumnDataSource(data = dict(
longitude = df1['longitude'],
latitude = df1['latitude'],
color = df1['color'],
alpha = df1['alpha']
))
# The Google Maps plot
x_range = Range1d()
y_range = Range1d()
style = [{"stylers":[{"hue":"#ff1a00"},{"invert_lightness":True},{"saturation":-100},{"lightness":33},{"gamma":0.5}]},{"featureType":"water","elementType":"geometry","stylers":[{"color":"#2D333C"}]}]
map_style = json.dumps(style)
map_options = GMapOptions(lat=40.7339773, lng=-73.9888841, zoom=13, map_type="roadmap"), styles=map_style)
plot = GMapPlot(x_range=x_range, y_range=y_range, map_options=map_options, plot_width=1000, plot_height=700,
title="my title")
plot.title_text_font_size = '1em'
circle = Circle(x="longitude", y="latitude", size=10, fill_color="color", line_color="black", fill_alpha="alpha", line_alpha=0)
plot.add_glyph(source1, circle)
pantool = PanTool()
wheelzoomtool = WheelZoomTool()
plot.add_tools(pantool, wheelzoomtool)
show(plot)
我认为你在州颜色列表中使用熊猫的情况很糟糕
尝试用以下内容替换您的循环:
def get_color(priority):
if priority == "High":
return "#FF0000"
elif priority == "Medium":
return "#008000"
elif priority == "Low":
return "#FFFF00"
else:
return "#FFFFFF"
df2["color"] = df2["Priority"].apply(get_color)
然后将源代码替换为
source = ColumnDataSource(
data=dict(
st = df2['State'],
priority = df2['Priority'],
state_colors = df2['color']
)
)
下面是一段适用于圆的代码,没有测试补丁
df1['color'] = df1['value'].apply(lambda value: rgb2hex(m.to_rgba(value)))
df1['alpha'] = 0.3
output_notebook()
source1 = ColumnDataSource(data = dict(
longitude = df1['longitude'],
latitude = df1['latitude'],
color = df1['color'],
alpha = df1['alpha']
))
# The Google Maps plot
x_range = Range1d()
y_range = Range1d()
style = [{"stylers":[{"hue":"#ff1a00"},{"invert_lightness":True},{"saturation":-100},{"lightness":33},{"gamma":0.5}]},{"featureType":"water","elementType":"geometry","stylers":[{"color":"#2D333C"}]}]
map_style = json.dumps(style)
map_options = GMapOptions(lat=40.7339773, lng=-73.9888841, zoom=13, map_type="roadmap"), styles=map_style)
plot = GMapPlot(x_range=x_range, y_range=y_range, map_options=map_options, plot_width=1000, plot_height=700,
title="my title")
plot.title_text_font_size = '1em'
circle = Circle(x="longitude", y="latitude", size=10, fill_color="color", line_color="black", fill_alpha="alpha", line_alpha=0)
plot.add_glyph(source1, circle)
pantool = PanTool()
wheelzoomtool = WheelZoomTool()
plot.add_tools(pantool, wheelzoomtool)
show(plot)