Отображение нескольких графиков на одной странице, используя ленивые высокие графики
В настоящее время я пишу приложение ruby on rails и использую ленивый гем чартов для отображения некоторых графиков. Однако у меня возникают проблемы с отображением двух графиков на одной странице. Похоже, что последний график переопределяет первый, и поэтому отображается только второй график. Оба графика отображаются, если поставить отдельно. Как мне показать оба графика на одной странице?
Это то, что на моем контроллере
@performance_chart = LazyHighCharts::HighChart.new('graph') do |f|
f.title(:text => "Team Performance")
f.xAxis(:categories => @x_axis)
f.series(:name => @team.name, :yAxis => 0, :data => @performance)
f.series(:name => "Top Scores for " + @team.division.name.capitalize[0...-1] + " Division", :yAxis => 0, :data => @top_scores)
f.series(:name => "Averaged Scores for "+ @team.division.name.capitalize[0...-1] + " Division", :yAxis => 0, :data => @average_scores)
f.yAxis [
{:title => {:text => "Quiz Scores", :margin => 70} }
]
f.chart({:defaultSeriesType=>"line"})
end
#bar graph for individual team members
@member_chart = LazyHighCharts::HighChart.new('column') do |f|
f.title(:text => "Population vs GDP For 5 Big Countries [2009]")
f.xAxis(:categories => ["United States", "Japan", "China", "Germany", "France"])
f.series(:name => "GDP in Billions", :yAxis => 0, :data => [14119, 5068, 4985, 3339, 2656])
f.series(:name => "Population in Millions", :yAxis => 1, :data => [310, 127, 1340, 81, 65])
f.yAxis [
{:title => {:text => "GDP in Billions", :margin => 70} },
{:title => {:text => "Population in Millions"}, :opposite => true},
]
f.legend(:align => 'right', :verticalAlign => 'top', :y => 75, :x => -50, :layout => 'vertical',)
f.chart({:defaultSeriesType=>"column"})
end
это то, что на мой взгляд
<div = class"row">
<div class="card">
<%= high_chart("some_id", @performance_chart) %>
</div>
</div>
<div class="row">
<div class="card">
<%= high_chart("some_id", @member_chart) %>
</div>
</div>
1 ответ
Я обнаружил, что HighChart.new() принимает три параметра, один из которых используется для создания тега div.
def high_chart(placeholder, object, &block)
object.html_options.merge!({:id => placeholder})
object.options[:chart][:renderTo] = placeholder
high_graph(placeholder, object, &block).concat(content_tag("div", "", object.html_options))
end
Поэтому все, что мне нужно было сделать, это изменить имя идентификатора одного из отображаемых графиков, которые я вызвал из контроллера. Если нет, он находит тег div с тем же идентификатором (в моем случае это первый созданный мной график) и заменяет ранее отображенный график. Чтобы исправить проблему, я изменил
<%= high_chart("some_id", @member_chart) %>
в
<%= high_chart("some_other_id", @member_chart) %>