2014-10-30 57 views
3

我需要爲幾個圖表生成隨機數字。如何爲演示圖表生成隨機數字,大致趨向於右側?

我正在使用JavaScript圖表引擎,因此最終需要JSON中的數字,但如果您在JavaScript之外擁有簡單的方法,則可以處理該轉換。

下面是JavaScript的一個簡單randomNumber發生器:

function randomNumber(minimum, maximum){ 
    return Math.round(Math.random() * (maximum - minimum) + minimum); 
} 
console.log(randomNumber(0,100)); 

以上會工作,如果minmax增長隨着時間的推移。你能爲我指出正確的方向嗎?

這裏有一個JSFiddle嘗試各種解決方案,包括一個方便的圖表:http://jsfiddle.net/9ox4wjrf/

這裏的各種圖表的一個粗略的例子,我需要建立與生成的數據:

rough example of desired results

回答

4

像這樣的東西可能工作:

var a = 0.05; 
var b = 10; //play with these values to your liking 
var y; 

//loop here from 0 to whatever 
y = a * x^2 + b * x * Math.random(); 
//or using your randomMumber function: 
y = a * x^2 + randomMumber(- b * x/2, b * x/2); 

這樣,噪音變大時,再往右

+0

可愛的。奇蹟般有效。你能幫助'y-min'成長爲'x'嗎? (比'y-max'慢) – Ryan 2014-10-30 15:30:16

+0

什麼是'y-min'?我已經稍微更新了我的答案,所以也許它已經回答你的問題了? – strah 2014-10-30 15:34:08

+0

我的意思是y的最小可能值仍然爲0,即使x增長。隨着x的增長,你應該預料到會有更多的噪音是正確的。但噪音應該仍然趨向右側。我只是聯繫了一個jsfiddle的問題。當我在小提琴中找到你的解決方案時,我會在這裏發帖。 – Ryan 2014-10-30 15:40:42

2

定義你的趨勢沒有噪音,隨着越來越多的數字。調用該X並將其複製到另一個數組Y.然後,對於Y中的每個點,添加Math中由內置隨機數生成器生成的數字。這會增加噪音幻覺。

如果您想要更多的隨機選項,請在GitHub上籤出random-js。 https://github.com/mobiusklein/random-js。這是一個偉大的圖書館,但叉子幫助平滑粗糙的邊緣。另外,線性迴歸線的https://github.com/tmcw/simple-statistics

1

這將是僞代碼,但你可以做這樣的事情:

int randomRangePotential = 20; // percentage of random growth/shrinkage 
int likelyhoodOfGrowth = 95; // likelyhood of datapoint being more than the previous 
int numberOfDataPoints = 100; // number of data points to generate 

int lastDataPointValue = 50; 

for (int iterator = 0; iterator < numberOfDataPoints; iterator++) 
{ 
    // generate random number to determine positive or negative growth 0 - 100 
    // generate randomRange, a random number between 1 and randomRangePotential 
    // if random number > likelyhoodOfGrowth 

     // generate random number for datapoint that is (lastDataPoint = lastDataPoint * 1.randomRange) 
     // add the random number to a datapoint 

    // if random number < likelyhoodOfGrowth 

     // generate random number for datapoint that is (lastDataPoint = lastDataPoint * -1.randomRange) 
     // add the random number to a datapoint 

    // lastDataPointValue = thisdatapoint 

}