Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Bokeh热图未显示正确的结果_Python_Pandas_Bokeh - Fatal编程技术网

Python Bokeh热图未显示正确的结果

Python Bokeh热图未显示正确的结果,python,pandas,bokeh,Python,Pandas,Bokeh,我正试图以博克的为基础绘制一张叶绿体图,我对这个图库不是很熟悉,尽管我对熊猫有些熟悉。我为我们的系统提供了一个状态及其优先级的数据框架。我无法正确显示优先级。我想我没有正确地使用fill_color属性,但是除了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)