小编Der*_*ill的帖子

Javascript求和数组,使用d3.nest()

如果我的数据看起来像这样:

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)

javascript d3.js

5
推荐指数
1
解决办法
8152
查看次数

d3.js:将数据从父节点传递到子节点

我正在使用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)

javascript d3.js

5
推荐指数
1
解决办法
5871
查看次数

如何在 Spark UDF 中使用 Option

我有一个这样的数据集:

+----+------+
|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 …

scala apache-spark

4
推荐指数
1
解决办法
4581
查看次数

d3.js:将数据从父节点传递到子节点onclick事件

我正在使用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)

javascript d3.js

3
推荐指数
1
解决办法
9185
查看次数

绑定Bootstrap工具提示以使用d3动态创建SVG元素

我想用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

你能帮我吗?

javascript jquery svg d3.js twitter-bootstrap

3
推荐指数
1
解决办法
3115
查看次数

无法让rb-fsevent gem在OSX上运行

我正在使用Guard运行Test :: Unit,我正试图切换到RSpec.

我正在运行Mac OSX,似乎无法让rb-fsevent正常工作.当我启动Guard时,我收到一条消息"[Listen warning]:Listen将轮询更改.请访问https://github.com/guard/listen#polling-fallback了解更多信息."

我尝试了各种方法:

  • "gem install rb-fsevent"(根据railscast 275)
  • 将rb-fsevent添加到我的Gemfile中(见下文)
  • 指定rb-fsevent版本(例如0.9.1)
  • 重新启动Guard,Rails和整个系统

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在教程中似乎没有必要.

关于可能出现什么问题的任何想法,或者我如何能够获得有关该问题的更多信息?

rspec ruby-on-rails listen guard fsevents

2
推荐指数
1
解决办法
2603
查看次数

CoffeeScript:初始化或增加数组中的值

我的应用程序具有关于一组固定国家/地区的不同类型的数据,这些数据保持在一致顺序的数组中.

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)

javascript coffeescript

2
推荐指数
1
解决办法
3555
查看次数

正确使用D3 Streamgraph中的stack.values([accessor])?

我正在尝试使用值访问器创建一个带有每层附加数据的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)

javascript layout area d3.js stream-graph

1
推荐指数
1
解决办法
2448
查看次数

使用RSpec和Factory Girl测试before_save

我正在使用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)

rspec ruby-on-rails factory-bot

1
推荐指数
1
解决办法
2758
查看次数