如您所知,当您在Jupyter Notebook单元格中打印一个大表时,无论表格是在Notebook环境中打印还是保存到html文件,当它太大时,它都会自动水平或垂直滚动.
但是对于图来说,当它太大时,它可以作为一个大表滚动,但只有当它在Notebook环境中打印时才可以滚动.当它保存到html文件时,整个图形适合较小的区域,因此使读取轴标记非常困难.
我怎样才能做到这一点?
例如,在Notebook中,如果单击图形的左下边框,则会在右侧和底部获得滚动条.
但是当输出到html文件时,整个图形被填充到"画布"中,如下所示:
我想转换 Julia DataFrames.DataFrame 中一列中的每个元素,但这样做时跳过缺失值(让它们完整地保留在表中)。
作为一个简单的例子,我们可以这样做:
using DataFrames, DataFramesMeta
@linq DataFrame(mode=[1,2,missing]) |>
transform(
mode = map(x->(if x === missing missing elseif x in ([0:5...]) x+1 else missing end), :mode)
)
Run Code Online (Sandbox Code Playgroud)
但它看起来或多或少杂乱无章。会有更优雅或更简洁的方式吗?
我阅读了 Query.jl 和 DataFramesMeta.jl 文档,希望找到一种方法,通过该方法,我不必显式地编写跳过缺失值的代码。
编辑: 我认为以下是我能想到的最好的:
using DataFrames, DataFramesMeta, DataValues
skipmap(f, c) = map(x->(if x===missing missing else f(x) end), c)
@linq DataFrame(mode=[1,2,missing]) |>
transform(
mode = skipmap(x->if x in ([0:5...]) x+1 else x end, :mode)
)
Run Code Online (Sandbox Code Playgroud)
我认为如果 map() 以接受第三个参数 y(因此是 map(f,c,y))的方式进行扩展,并且如果这些元素属于 y,则它们在数组中保持完整,那将会很棒。
我想使用bokeh绘制vbar图,其中x轴使用日期时间,y轴使用分类值。
最初,我尝试如下绘制圆形图:
import pandas as pd
from datetime import datetime
from dateutil.parser import parse
from bokeh.plotting import figure, show, output_notebook
from bokeh.models.ranges import FactorRange
x = pd.Series(['2017/1/1', '2017/1/2', '2017/1/3', '2017/1/4']).map(lambda x: parse(x))
y = ["a", "b", "c", "a"]
p = figure(x_axis_type='datetime', y_range=list(set(y)), plot_width=400, plot_height=200)
p.circle(x, y, size=10, line_color="blue", line_width=1)
show(p)
Run Code Online (Sandbox Code Playgroud)
看起来不错,除了它不是条形的。
接下来,我尝试了以下代码,但未显示任何图:
x = pd.Series(['2017/1/1', '2017/1/2', '2017/1/3', '2017/1/4']).map(lambda x: parse(x))
y = ["a", "b", "c", "a"]
p = figure(x_axis_type='datetime', y_range=list(set(y)), plot_width=400, plot_height=200)
p.vbar(x=x, bottom=0, top=y, width=0.1, color="blue")
show(p)
Run Code Online (Sandbox Code Playgroud)