2014-10-04 1 views
0

В настоящее время я успешно планирую скорость ветра и направление ветра, используя стандартный линейный график скорости ветра и график рассеяния для направления ветра.Highcharts полярная диаграмма данные о ветре от JSON

Текущие windSpeed и windDirection объекты DOM выглядеть следующим образом:

windDirection = "[202,229,218,208,230]"; 
windSpeed = "[9,13.4,12,9.7,6.6]"; 

В действительности обе эти переменные содержат сотни, если не тысячи точек данных. Каждая точка данных windDirection соответствует точке данных windSpeed в том же месте, и в наборе данных есть равное количество windDirection и windSpeed точек данных.

Целью является построение этих данных на ветровой розе, которая имеет стандартные N, NNE, NE, ENE, E, ESE, SE, SSE, S, SSW, SW, WSW, W, WNW, NW, NNW ярлыки с ветром. Очень похоже на рисунок Highcharts Polar Wind Rose demo @ highcharts.com, но использование существующих объектов DOM вместо создания таблиц HTML для данных.

Использование двух серий данных, как показано ниже, не дает желаемого результата.

series: [{ 
      data: windDirection 
     },{ 
      data: windSpeed 
     } 
] 

я приступил к созданию точки пары данных из моих данных, который следует за Highcharts API Reference for series.data пример, полученный вывод, как это:

data: [[windDirection1,windSpeed1], [windDirection2,windSpeed2], and so on] 

Такой подход не удалось, а также. Вы можете просмотреть его на JSFiddle: http://jsfiddle.net/02v3tduo/19/

В идеале я хотел бы, чтобы не создавать копию windDirection и windSpeed в DOM, поскольку оба набора данных достаточно велики уже.

Я видел этот вопрос/ответ на SO Highcharts: Wind Rose chart with JSON data, но я не уверен, что тот же ответ применим и в моем случае. Предлагаемый ответ кажется очень громоздким при работе с большими наборами данных, поскольку каждый из рядов данных необходимо будет построить до отображения графика.

Я не знаю, как действовать на этом этапе. Я понимаю, что мои данные, вероятно, нужно соединить в 5-10-градусные бункеры, чтобы они не выглядели «рассеянными» из-за отсутствия лучшего термина. Я могу разобраться с биннингами после того, как ветер поднялся правильно.

ответ

2

В целом, неясно, о чем вы просите. Однако я постараюсь ответить.

Прежде всего, вы создаете строку вместо массива, какую-то конкретную причину? Просто используйте:

windDirectionJSON = JSON.parse(windDirection); 
windSpeedJSON = JSON.parse(windSpeed); 
windDataJSON = []; 
for (i = 0; i < windDirectionJSON.length; i++) { 
    windDataJSON.push([ windDirectionJSON[i], windSpeedJSON[i] ]); 
} 

Теперь определим массив категорий, которые будут отображаться на XAxis:

var categories = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW']; 

Затем поиграйте с XAxis:

xAxis: { 
     min: 0, 
     max: 360, // max = 360degrees 
     type: "", 
     tickInterval: 22.5, // show every 16th label 
     tickmarkPlacement: 'on', 
     labels: { 
      formatter: function() { 
       return categories[this.value/22.5] + '°'; // return text for label 
      } 
     } 
    }, 

И рабочий пример: http://jsfiddle.net/02v3tduo/21/

Примечание: это хорошая идея t o сортировать свои точки данных по ветру, начинать с 0.Как это: http://jsfiddle.net/02v3tduo/22/

windDataJSON.sort(function(a,b) { return a[0] - b[0]; }); 
+0

Спасибо за сортировкой это для меня. Данные выводятся из кода .Net DataTable и анализируются следующим образом в C# windSpeed ​​= string.Join (",", from r in wind.Rows.OfType () select r [2] == DBNull.Value? «null»: r [2]); Я могу узнать, можно ли это изменить. --- В чем преимущество сортировки точек данных по ветру? Похоже, сортировка задержит рендеринг графика дальше? –

+1

У вас нет ошибок в консоли, ваша подсказка всегда будет правильно работать, и размер для баров будет правильно рассчитан. –

0

У меня есть простой способ: Вы можете обратиться к данным серии

// Parse the data from an inline table using the Highcharts Data plugin 
 
Highcharts.chart('container', { 
 
    
 
    chart: { 
 
     polar: true, 
 
     type: 'column' 
 
    }, 
 

 
    title: { 
 
     text: 'Wind rose for South Shore Met Station, Oregon' 
 
    }, 
 

 
    subtitle: { 
 
     text: 'Source: or.water.usgs.gov' 
 
    }, 
 

 
    pane: { 
 
     size: '85%' 
 
    }, 
 

 
    legend: { 
 
     align: 'right', 
 
     verticalAlign: 'top', 
 
     y: 100, 
 
     layout: 'vertical' 
 
    }, 
 

 
    xAxis: { 
 
     tickmarkPlacement: 'on', 
 
     type:'category' 
 
    }, 
 

 
    yAxis: { 
 
     min: 0, 
 
     endOnTick: false, 
 
     showLastLabel: true, 
 
     
 
     
 
     reversedStacks: false 
 
    }, 
 

 
    
 
\t \t series: [{ 
 
\t \t \t \t "data": [ 
 
\t \t \t \t \t ["ios1", 12], 
 
\t \t \t \t \t ["ios2", 12], 
 
\t \t \t \t \t ["ios3", 12], 
 
\t \t \t \t \t ["ios4", 91], 
 
\t \t \t \t \t ["ios5", 11], 
 
\t \t \t \t \t ["ios6", 12], 
 
\t \t \t \t \t ["ios7", 18], 
 
\t \t \t \t \t ["ios8",19], 
 
\t \t \t \t \t ["ios9",12], 
 
\t \t \t \t \t ["ios10",34], 
 
\t \t \t \t \t ["ios11",11], 
 
\t \t \t \t \t ["ios12",71], 
 
\t \t \t \t \t ["ios13", 66], 
 
\t \t \t \t \t ["ios14", 21], 
 

 

 
\t \t \t \t ], 
 
\t \t \t \t "type": "column", 
 
\t \t \t \t "name": "<40G" 
 
\t \t \t }, { 
 
\t \t \t \t "data": [ 
 
\t \t \t \t \t ["ios1", 12], 
 
\t \t \t \t \t ["ios2", 33], 
 
\t \t \t \t \t ["ios3", 12], 
 
\t \t \t \t \t ["ios4", 10], 
 
\t \t \t \t \t ["ios5", 11], 
 
\t \t \t \t \t ["ios6", 13], 
 
\t \t \t \t \t ["ios7", 9], 
 
\t \t \t \t \t ["ios8",20], 
 
\t \t \t \t \t ["ios9",13], 
 
\t \t \t \t \t ["ios10",74], 
 
\t \t \t \t \t ["ios11",21], 
 
\t \t \t \t \t ["ios12",72], 
 
\t \t \t \t \t ["ios13", 67], 
 
\t \t \t \t \t ["ios14", 22], 
 

 
\t \t \t \t ], 
 
\t \t \t \t "type": "column", 
 
\t \t \t \t "name": "40-100G," 
 
\t \t \t }, { 
 
\t \t \t \t "data": [ 
 
\t \t \t \t \t ["ios1", 12], 
 
\t \t \t \t \t ["ios2", 34], 
 
\t \t \t \t \t ["ios3", 23], 
 
\t \t \t \t \t ["ios4", 11], 
 
\t \t \t \t \t ["ios5", 31], 
 
\t \t \t \t \t ["ios6", 14], 
 
\t \t \t \t \t ["ios7", 10], 
 
\t \t \t \t \t ["ios8", 21], 
 
\t \t \t \t \t ["ios9", 14], 
 
\t \t \t \t \t ["ios10", 21], 
 
\t \t \t \t \t ["ios11", 21], 
 
\t \t \t \t \t ["ios12", 73], 
 
\t \t \t \t \t ["ios13", 68], 
 
\t \t \t \t \t ["ios14", 23], 
 

 
\t \t \t \t ], 
 
\t \t \t \t "type": "column", 
 
\t \t \t \t "name": "100-500G," 
 
\t \t \t }, { 
 
\t \t \t \t "data": [ 
 
\t \t \t \t \t ["ios1", 12], 
 
\t \t \t \t \t ["ios2", 45], 
 
\t \t \t \t \t ["ios3", 14], 
 
\t \t \t \t \t ["ios4", 12], 
 
\t \t \t \t \t ["ios5", 31], 
 
\t \t \t \t \t ["ios6", 15], 
 
\t \t \t \t \t ["ios7", 11], 
 
\t \t \t \t \t ["ios8", 22], 
 
\t \t \t \t \t ["ios9", 15], 
 
\t \t \t \t \t ["ios10", 22], 
 
\t \t \t \t \t ["ios11", 21], 
 
\t \t \t \t \t ["ios12", 74], 
 
\t \t \t \t \t ["ios13", 69], 
 
\t \t \t \t \t ["ios14", 24], 
 

 
\t \t \t \t ], 
 
\t \t \t \t "type": "column", 
 
\t \t \t \t "name": ">500G" 
 
\t \t \t }], 
 
    plotOptions: { 
 
     series: { 
 
      stacking: 'normal', 
 
      shadow: false, 
 
      groupPadding: 0, 
 
      pointPlacement: 'on' 
 
     } 
 
    } 
 
});
<script src="https://code.highcharts.com/highcharts.js"></script> 
 
<script src="https://code.highcharts.com/highcharts-more.js"></script> 
 
<script src="https://code.highcharts.com/modules/data.js"></script> 
 
<script src="https://code.highcharts.com/modules/exporting.js"></script> 
 

 
<div id="container" style="min-width: 420px; max-width: 600px; height: 400px; margin: 0 auto"></div>

+0

https://jsfiddle.net/yksdjx/1f5hLrvr/1/ – cosir

Смежные вопросы