如果我的数据看起来像这样:
harvest = [{type: "apple", color: "green", value: 1},
{type: "apple", color: "red", value: 2},
{type: "grape", color: "green", value: 3},
{type: "grape", color: "red", value: 4 }]
Run Code Online (Sandbox Code Playgroud)
我可以使用d3的nest.rollup()函数通过各种属性来总结它:
sum_by = "color";
rollup = d3.nest().key(function(d) {
return d[sum_by];
}).rollup(function(d) {
return d3.sum(d, function(g) {
return g.value;
});
}).entries(harvest);
Run Code Online (Sandbox Code Playgroud)
给我这个:
rollup = [{key: "green", values: 4},
{key: "red", values: 6}]
Run Code Online (Sandbox Code Playgroud)
这正是我想要的.
但是,我的数据中的值由数组组成,长度相等:
harvest = [{type: "apple", color: "green", values: [1,2,3,4]},
{type: "apple", color: "red", values: [5,6,7,8]},
{type: "grape", color: "green", values: …Run Code Online (Sandbox Code Playgroud) 我正在使用d3制作堆积条形图.
数据是一个数组,每个条形图有一个对象(例如"喜欢").然后每个对象包含一个值数组,每个条形驱动单个矩形:
data = [{
key = 'likes', values = [
{key = 'blue-frog', value = 1},
{key = 'goodbye', value = 2}
]
}, {
key = 'dislikes, values = [
{key = 'blue-frog', value = 3},
{key = 'goodbye', value = 4}
]
}]
Run Code Online (Sandbox Code Playgroud)
图表工作正常,如下:
// Create canvas
bars = svg.append("g");
// Create individual bars, and append data
// 'likes' are bound to first bar, 'dislikes' to second
bar = bars.selectAll(".bar")
.data(data)
.enter()
.append("g");
// Create rectangles per …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据集:
+----+------+
|code|status|
+-----------+
| 1| "new"|
| 2| null|
| 3| null|
+----+------+
Run Code Online (Sandbox Code Playgroud)
我想编写一个依赖于两列的 UDF。
我按照这个答案中的第二种方法让它工作,即null在 UDF 之外处理,并写入myFn将布尔值作为第二个参数:
df.withColumn("new_column",
when(pst_regs("status").isNull,
myFnUdf($"code", lit(false))
)
.otherwise(
myFnUdf($"code", lit(true))
)
)
Run Code Online (Sandbox Code Playgroud)
为了在 UDF 中处理 null,我看到的一种方法是根据这个答案讨论“用Options”包装参数。我试过这样的代码:
df.withColumn("new_column", myFnUdf($"code", $"status"))
def myFn(code: Int, status: String) = (code, Option(status)) match {
case (1, "new") => "1_with_new_status"
case (2, Some(_)) => "2_with_any_status"
case (3, None) => "3_no_status"
}
Run Code Online (Sandbox Code Playgroud)
但是一行null给出了type mismatch; found :None.type required …
我正在使用d3制作堆积条形图.
由于上一个问题,我使用parentNode .__ data __.key将父节点关联的数据绑定到子节点.
数据是一个数组,每个条形图有一个对象(例如"喜欢").然后每个对象包含一个值数组,每个条形驱动单个矩形:
data = [{
key = 'likes', values = [
{key = 'blue-frog', value = 1},
{key = 'goodbye', value = 2}
]
}, {
key = 'dislikes, values = [
{key = 'blue-frog', value = 3},
{key = 'goodbye', value = 4}
]
}]
Run Code Online (Sandbox Code Playgroud)
该图表工作正常,因此将父度量数据绑定到子svg属性:
// Create canvas
bars = svg.append("g");
// Create individual bars, and append data
// 'likes' are bound to first bar, 'dislikes' to second
bar = bars.selectAll(".bar")
.data(data) …Run Code Online (Sandbox Code Playgroud) 我想用d3动态创建一个SVG元素并绑定一个Bootstrap工具提示.
在非动态HTML方案中,这些工具提示的绑定方式如下:
$('[rel=tooltip]').tooltip
Run Code Online (Sandbox Code Playgroud)
在SVG中动态执行时需要克服的两个问题:
1)SVG中包含的HTML div不呈现
该解决方案是使用container属性的选项(1,2),它的伟大工程:
$('[rel=tooltip]'').tooltip({
container:'body'
});
Run Code Online (Sandbox Code Playgroud)
2)页面加载时元素不存在
这里的建议是使用selector导致工具提示对象委托给指定目标的属性.这有效:
$('body').tooltip({
selector: '[rel=tooltip]'
});
Run Code Online (Sandbox Code Playgroud)
当我尝试结合两种方法时出现问题(见小提琴):
$('body').tooltip({
container: 'body',
selector: '[rel=tooltip]'
});
Run Code Online (Sandbox Code Playgroud)
这似乎忽略了容器属性,并将工具提示附加到SVG的主体内,而不显示它.这个例子的另一个问题是属性的顺序很重要 - 如果它们被颠倒它根本不起作用.
问题是如何同时解决这两个问题?
一种可能更清晰并提供更多控制的方法是在创建元素时直接在d3中附加函数,或者在发生鼠标事件时.我试过了:
.on('mouseenter', $(@).tooltip({container: 'body'}));
Run Code Online (Sandbox Code Playgroud)
哪个给了 TypeError: listener.apply is not a function
你能帮我吗?
我正在使用Guard运行Test :: Unit,我正试图切换到RSpec.
我正在运行Mac OSX,似乎无法让rb-fsevent正常工作.当我启动Guard时,我收到一条消息"[Listen warning]:Listen将轮询更改.请访问https://github.com/guard/listen#polling-fallback了解更多信息."
我尝试了各种方法:
Gemfile(在Michael Hartl的Ruby on Rails教程中推荐):
group :development, :test do
gem "rspec-rails"
gem "guard-rspec"
end
group :test do
gem 'rb-fsevent'
end
Run Code Online (Sandbox Code Playgroud)
编辑:
我还尝试将rb-fsevent包含在开发组中(在Railscast 264中推荐):
group :development, :test do
gem "rspec-rails"
gem "guard-rspec"
gem 'rb-fsevent'
end
Run Code Online (Sandbox Code Playgroud)
但是我得到了同样的错误.一个线索可能是如果我在没有捆绑执行的情况下运行后卫,那么我得到"警卫在这里!看起来你的项目有一个Gemfile,但你guard在Bundler之外运行." bundle exec在教程中似乎没有必要.
关于可能出现什么问题的任何想法,或者我如何能够获得有关该问题的更多信息?
我的应用程序具有关于一组固定国家/地区的不同类型的数据,这些数据保持在一致顺序的数组中.
data =
oranges: [1,2,3]
apples: [1,2,3]
cabbages: [1,2,3]
Run Code Online (Sandbox Code Playgroud)
这些数组通过各种标准组合成新数组,我发现自己想要编写这样的代码:
fruit = []
for key, arr of data # For each array
if key in ['oranges', 'apples'] # It it meets certain criteria
for val, i in arr # Use the values in the creation of a new array
fruit[i] += val
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为如果fruit[i]未初始化+=将不起作用.
有很多方法可以解决这个问题.
1)fruit首先用零填充新数组:
for i in [0..len]
fruit[i] = 0
Run Code Online (Sandbox Code Playgroud)
2)检查是否fruit[i]存在:
if fruit[i]?
fruit[i] += val
else
fruit[i] = val …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用值访问器创建一个带有每层附加数据的D3流图表,如D3 API参考和Stack Overflow中的这个问题所示.
标题附加正常,但似乎没有附加值.关于可能出错的任何想法?
我是d3的新手,所以我确信它很简单.代码如下.
var layers = [
{
"name": "apples",
"values": [
{ "x": 0, "y": 91},
{ "x": 1, "y": 290}
]
},
{
"name": "oranges",
"values": [
{ "x": 0, "y": 9},
{ "x": 1, "y": 49}
]
}
];
var m = 2; // number of samples per layer
var width = 960,
height = 500,
mx = m - 1,
my = 350;
var stack = d3.layout.stack()
.offset("wiggle")
.values(function(d) { …Run Code Online (Sandbox Code Playgroud) 我正在使用before_save调用来更新属于特定主服务器的所有记录.两者都有一个名为item_id的字段:
class Master < ActiveRecord::Base
has_many :records
before_save :update_records
def update_records
self.records.find_each do |r|
r.item_id = self.item_id
r.save
end
end
end
class Record < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)
这是按照预期的方式工作(暂时搁置一下,做这样的事情是否是个好主意).但是我无法通过RSpec测试.这是我试过的:
describe Master do
describe 'before_save' do
it 'updates records belonging to it' do
master = FactoryGirl.create(:master, item_id: 1)
record = FactoryGirl.create(:record, master_id: master.id, item_id: 1)
master.item_id = 2
master.save
record.item_id.should == 2
end
end
end
Run Code Online (Sandbox Code Playgroud)
原因很有趣.该模型在Record模型的第二个实例上工作,该模型成功保存,但不会返回到规范:
"MASTER - CREATED IN SPEC"
#<Master:0x007fd0ed55ec20> {
:id => 26,
:item_id => 1,
}
"RECORD - CREATED …Run Code Online (Sandbox Code Playgroud) javascript ×6
d3.js ×5
rspec ×2
apache-spark ×1
area ×1
coffeescript ×1
factory-bot ×1
fsevents ×1
guard ×1
jquery ×1
layout ×1
listen ×1
scala ×1
stream-graph ×1
svg ×1