我有一个使用Bokeh创建并在Heroku上托管的Web应用程序.我最近为应用程序创建了一个移动样式,可以在这里查看:
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker-mobile
但是,在iOS移动设备上查看时,单指触摸滚动不起作用.作为一个黑客解决方法,我设置了我的html文件()width: 95%
的.invcontent-wrapper
标签index.html
.这会在触摸滚动功能的右侧显示背景的垂直条带,就像传统的滚动条一样.我还在垂直条上添加了向上和向下箭头,以引导用户将其用作滚动条.
如何为整个屏幕启用触摸滚动?问题可能是返回的Bokeh文档不允许触摸滚动交互......?
我在Bokeh中使用目录格式(使用Bokeh服务器),我的index.html
Jinja模板文件包含以下相关部分:
CSS:
{% if display_style|string() == "snowpacktracker-mobile" %}
<style>
html {
width: 100%;
height: 100%;
}
body {
width: 100%;
height: 100%;
margin: auto;
background-color: lightgray;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
float: left;
}
.invcontent-wrapper {
padding: 0px;
min-height: 200px;
width: 95%; /*allows for exposed background on the side*/
position: relative;
}
container { /*this holds arrows so the user knows to …
Run Code Online (Sandbox Code Playgroud) 当我的页面完全加载时,我试图运行一个简单的 JavaScript 函数。例如这个函数:
<script type="text/javascript">
function changeSize() {
var el = document.getElementById("my-id");
el.style.height = "500px";
};
</script>
Run Code Online (Sandbox Code Playgroud)
我的页面有一个从外部 URL 检索的长时间加载(秒)脚本,该脚本呈现 html 正文中的主要内容。
我正在使用 Bootstrap,其中我的主体部分base.html
是:
<body>
<div class="container-fluid">
{% block header %}{% endblock %}
{% block content %}{% endblock %}
{% block footer %}{% endblock %}
</div>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
内容块通过外部 html 文件加载,即:
{% extends 'base.html' %}
{% block header …
Run Code Online (Sandbox Code Playgroud) 是否可以为 Bokehgridplot
布局中的各个图形定义不同的高度 ( bokeh==1.0.4
)?
例如,我有三个具有三种不同高度的人物:
p1 = figure(
name="fig1",
width=500, height=500,
)
p2 = figure(
name="fig2",
width=500, height=1000,
)
p1 = figure(
name="fig3",
width=500, height=100,
)
Run Code Online (Sandbox Code Playgroud)
然后我将数字放入 agridplot
并将根添加到curdoc()
:
grid = gridplot(
children = [p1,p2,p3],
ncols=1,
sizing_mode='stretch_both',
)
curdoc().add_root(grid)
Run Code Online (Sandbox Code Playgroud)
但是,当我渲染 Bokeh 文档(使用 Bokeh 服务器)时,每行的高度是相同的,并进行缩放以填充包含的 div 中的可用空间。
如果我使用sizing_mode='scale_width'
人物高度,则会被识别并使用。为什么忽略高度sizing_mode='stretch_both'
?
layout()
请注意,如果我使用而不是,此行为是相同的gridplot()
。
我正在使用plt.boxplot()命令制作标准的Matplotlib箱图.我创建boxplot的代码行是:
bp = plt.boxplot(data, whis=[5, 95], showfliers=True)
Run Code Online (Sandbox Code Playgroud)
因为我的数据分布很大,所以我在胡须的范围之外得到了很多传单.为了获得更清晰的出版质量情节,我想只展示单个传单.而在最低点.数据的值,而不是所有传单.这可能吗?我没有在文档中看到任何内置选项来执行此操作.
(我可以将胡须的范围设置为最大/分钟,但这不是我想要的.我想将胡须保持在第5和第95百分位).
下面是我正在研究的数字.注意飞行员的密度.
我的网络应用程序在这里: https ://www.snowpacktracker.com/btac/snowpacktracker
在桌面上,滚动的一切都很好。然而,在移动设备上(特别是在 iPad 上),任何触摸向下滚动的尝试都会使页面回到顶部。我注意到,如果我克服跳跃(这很困难)并让页面向下滚动以使标题不可见,则滚动可以正常工作,所以也许标题中的某些内容是有原因的。无论出于何种原因,我无法在将开发工具设置为移动尺寸的桌面上重现此内容,只能在移动设备上重现(但也许这只是我没有正确使用开发工具)。
以下是演示该问题的屏幕录制(在 iPad 上): https ://vimeo.com/661613444
以下是有关我的设置的一些最少信息:
Bokeh Web 应用程序,使用 Flask 在 html 模板中渲染 Bokeh 内容 ( base.html
)。container-fluid
除了导航按钮的Bootstrap 类之外,标头还使用 Bootstrap类。我还有一个自定义style.css
用于覆盖基本模板中的某些类。相关的style.css
可能是:
.placeholderbokehapp-snowpack {
background-color: white;
padding-right: 20px;
padding-left: 20px;
padding-top: 15px;
padding-bottom: 15px;
min-height: 300px;
}
Run Code Online (Sandbox Code Playgroud)
.container-fluid {
padding-right: 20px;
padding-left: 20px;
min-width: 1100px;
}
Run Code Online (Sandbox Code Playgroud)
除了导入 Bokeh、jquery、popper 和 bootstrap 的 js 库之外,我还有自定义 js 来定义用于加载的旋转轮,以及一个调整大小传感器来在页面尺寸发生变化时停止旋转轮。
散景==2.4.1,Flask==1.1.2,jquery==3.3.1,popper==1.14.3,bootstrap==4.1.3
很乐意根据需要提供任何其他详细信息。
我有两个变量的相关图,x轴上的预测变量(温度)和y轴上的响应变量(密度)。我最适合的最小二乘回归线是二阶多项式。我还要绘制置信度和预测间隔。此答案中描述的方法似乎很完美。但是,我的数据集(n = 2340)对许多(x,y)对都有重复的条目。我得到的情节看起来像这样:
这是我的相关代码(从上面的链接答案中略作修改):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.sandbox.regression.predstd import wls_prediction_std
import statsmodels.formula.api as smf
from statsmodels.stats.outliers_influence import summary_table
d = {'temp': x, 'dens': y}
df = pd.DataFrame(data=d)
x = df.temp
y = df.dens
plt.figure(figsize=(6 * 1.618, 6))
plt.scatter(x,y, s=10, alpha=0.3)
plt.xlabel('temp')
plt.ylabel('density')
# points linearly spaced for predictor variable
x1 = pd.DataFrame({'temp': np.linspace(df.temp.min(), df.temp.max(), 100)})
# 2nd order polynomial
poly_2 = smf.ols(formula='dens ~ 1 + temp + I(temp …
Run Code Online (Sandbox Code Playgroud) 我在这里遵循StatsModels示例来绘制分位数回归线.只需对我的数据稍作修改,该示例效果很好,生成此绘图(请注意,我已修改代码以仅绘制0.05,0.25,0.5,0.75和0.95分位数):
但是,我想绘制OLS拟合和相应分位数的二阶多项式拟合(而不是线性).例如,以下是相同数据的二阶OLS行:
如何修改链接示例中的代码以生成非线性分位数?
这是我从链接示例中修改的相关代码,以生成第一个图:
d = {'temp': x, 'dens': y}
df = pd.DataFrame(data=d)
# Least Absolute Deviation
#
# The LAD model is a special case of quantile regression where q=0.5
mod = smf.quantreg('dens ~ temp', df)
res = mod.fit(q=.5)
print(res.summary())
# Prepare data for plotting
#
# For convenience, we place the quantile regression results in a Pandas DataFrame, and the OLS results in a dictionary.
quantiles = [.05, .25, .50, .75, .95]
def fit_model(q):
res = …
Run Code Online (Sandbox Code Playgroud) 我有一个提供散景图的网络应用程序(使用散景 v0.12.7)。x 轴是日期时间,显示用户定义的天数(日期范围默认为 31 天)。无需在 Bokeh 中定义任何刻度参数,主要刻度数默认为 5,如此处的实时 Web 应用程序所示:
https://btac-web-plots.herokuapp.com/avyview?style=snowpacktracker
我想在主要刻度之间的每一天显示次要刻度。我尝试了以下方法,它允许任何日期范围长度,并每 5 天指定一个主要刻度(start
并且end
是 Pandas 日期时间索引):
num_days = ((end - start) / np.timedelta64(1, 'D')).astype(int)
fig.xaxis.ticker = DaysTicker(
days = np.arange(1, num_days, 5),
num_minor_ticks = 4
)
Run Code Online (Sandbox Code Playgroud)
这会每 5 天正确显示主要刻度,但不显示次要刻度。另一个潜在的解决方案可能是每天绘制主要刻度,然后将刻度标签设置为不可见,除了每 5 天(不确定如何实现这一点......)。
在这些图上显示每日小刻度的最佳方法是什么?
这是我的绘图代码的一部分(包括DaysTicker
),以第一个面板为例:
fig = figure(
title="New Snow, SWE, Snow Depth, and Settlement",
name="newsnow_extra_fig",
x_axis_type="datetime",
y_axis_label='HN24 / SWE (in)',
width=width, height=height2,
tools=tools,
toolbar_sticky=False,
logo=None
)
fig.y_range = Range1d(-12, 30)
fig.extra_y_ranges = {"Depth": Range1d(start=-72, end=180)} …
Run Code Online (Sandbox Code Playgroud) 我有一个包含两列的Pandas数据框:一个datetime列和一个表示站ID的整数列.我需要一个具有以下修改的新数据框:
对于每组重复STATION_ID
值,请保留具有最新条目的行DATE_CHANGED
.如果STATION_ID
all 的重复条目包含相同的条目,DATE_CHANGED
则删除重复项并保留单行STATION_ID
.如果该STATION_ID
值没有重复项,只需保留该行即可.
数据框(按排序STATION_ID
):
DATE_CHANGED STATION_ID
0 2006-06-07 06:00:00 1
1 2000-09-26 06:00:00 1
2 2000-09-26 06:00:00 1
3 2000-09-26 06:00:00 1
4 2001-06-06 06:00:00 2
5 2005-07-29 06:00:00 2
6 2005-07-29 06:00:00 2
7 2001-06-06 06:00:00 2
8 2001-06-08 06:00:00 4
9 2003-11-25 07:00:00 4
10 2001-06-12 06:00:00 7
11 2001-06-04 06:00:00 8
12 2017-04-03 18:36:16 8
13 2017-04-03 18:36:16 8
14 2017-04-03 18:36:16 8 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 sqlite3 创建多个内存数据库(如果可能)。对于磁盘数据库,我会这样做:
import sqlite3
db1 = sqlite3.connect('/mnt/tmp/db1.db')
db2 = sqlite3.connect('/mnt/tmp/db2.db')
db3 = sqlite3.connect('/mnt/tmp/db3.db')
Run Code Online (Sandbox Code Playgroud)
如果我改为:
db1 = sqlite3.connect("file::memory:?cache=shared")
db2 = sqlite3.connect("file::memory:?cache=shared")
db3 = sqlite3.connect("file::memory:?cache=shared")
Run Code Online (Sandbox Code Playgroud)
这会导致三个独立的内存数据库吗?这似乎创建了到共享内存数据库的三个连接,这不是我想要的。
然后我继续在数据库(磁盘上或内存中)上创建游标:
cur_db1 = db1.cursor()
cur_db2 = db2.cursor()
cur_db3 = db3.cursor()
Run Code Online (Sandbox Code Playgroud)
如果无法使用多个内存数据库,我的最佳选择是使用 RAM 磁盘数据库(如在我的第一个代码块中),然后"PRAGMA journal_mode=MEMORY"
在这些连接上执行吗?
我有一个时间戳字符串,例如:
2019-01-04 21:15:00
我想将其转换为格式为 MMDDHH 的整数,四舍五入到最接近的小时。在这种情况下,结果将是:
10421
首选 Python 日期时间解决方案,但 Pandas 也可以。
python ×7
bokeh ×4
pandas ×4
css ×3
html ×3
datetime ×2
mobile ×2
python-2.7 ×2
regression ×2
statsmodels ×2
boxplot ×1
ios ×1
javascript ×1
jinja2 ×1
jquery ×1
matplotlib ×1
scroll ×1
sqlite ×1