#r #rcharts
#r #rcharts
Вопрос:
Я использую rCharts для создания диаграммы рассеяния, которая отображает рейтинги, которые я рассчитал с течением времени. У меня есть больше информации для каждой отдельной точки данных (рейтинга), и я хотел бы, чтобы каждая точка данных на графике ссылалась на уникальную страницу с дополнительной информацией об этой конкретной точке данных.
Например: я хотел бы иметь возможность навести курсор на первую точку данных на графике и щелкнуть по ней, чтобы перейти на определенную страницу (http://www.example.com/info?id=1 ), который предоставляет больше информации об этом рейтинге или точке данных. Каждая точка данных имеет уникальный идентификатор и уникальный URL-адрес, на который я хотел бы сослаться.
Вот код, который я использую для создания графика
library(rCharts)
age <- c(1:20)
tall <- seq(0.5, 1.90, length = 20)
name <- paste(letters[1:20], 1:20, sep = "")
df <- data.frame(age = age, tall = tall, name = name)
n1 <- nPlot(age ~ tall ,data = df, type = "scatterChart")
n1$xAxis(axisLabel = "the age")
n1$yAxis(axisLabel = "the tall", width = 50)
n1$chart(tooltipContent = "#! function(key, x, y, e ){
var d = e.series.values[e.pointIndex];
return 'x: ' x ' y: ' y ' name: ' d.name
} !#")
n1
Комментарии:
1. Я знаю, что это работает с D3, но я не программист на JavaScript! Извините
2. да, это возможно. Я постараюсь придумать один способ атаковать его.
Ответ №1:
Пока это определенно следует считать взломом, но это работает. Проблемы, с которыми мы сталкиваемся здесь, которые заставляют нас требовать этого взлома, заключаются draw
в том, что функция в стандартном шаблоне rCharts не предоставляет нам места для добавления битов кода для nvd3, а afterScript
for nvd3 выходит за рамки нашего draw
so вызывается до отображения диаграммы. Кроме того, всплывающая подсказка nvd3 — это просто html, но проблема с предоставлением ссылки здесь для щелчка заключается в том, что при наведении курсора мыши всплывающая подсказка исчезает до того, как мы сможем щелкнуть по ней (забавный трюк, но бесполезный).). Итак, в этом взломе мы взломаем функцию содержимого всплывающей подсказки, чтобы также указать функцию события щелчка.
Я пытался прояснить ситуацию с комментариями, но, пожалуйста, дайте мне знать, если все это не имеет смысла. Я, конечно, не делаю карьеру из поддержки :), поэтому я не накопил этот набор навыков.
library(rCharts)
age <- c(1:20)
tall <- seq(0.5, 1.90, length = 20)
name <- paste(letters[1:20], 1:20, sep = "")
#this next line is not entirely necessary if other data
#provides the part of the link address
#will also comment in the js piece below to show
#how to handle that
links <- paste0("http://example.com/",name)
df <- data.frame(age = age, tall = tall, name = name, links = links)
n1 <- nPlot(age ~ tall ,data = df, type = "scatterChart")
n1$xAxis(axisLabel = "the age")
n1$yAxis(axisLabel = "the tall", width = 50)
n1$chart(tooltipContent = "#! function(key, x, y, e ){
d3.selectAll('[class*="nv-path"]').on('click',function(){
//uncomment debugger if you want to see what you have
//debugger;
window.open(d3.select(this).datum().data['point'][4].links,'_blank');
//as stated in the r code generating this
//the link address might be in the data that we already have
//window.open(
// 'http://example.com/' d3.select(this).datum().data['point'][4].name,
// '_blank'
//);
})
//looks like the actual point is below the hover tooltip path
//if tooltips disabled we could do click on the actual points
//d3.selectAll('.nv-group circle').on('click',function(){
// debugger;
//})
var d = e.series.values[e.pointIndex];
return 'x: ' x ' y: ' y ' name: ' d.name
} !#")
n1
Надеюсь, это поможет.
Комментарии:
1. Большое тебе спасибо, дурак, это именно то, что я хочу! еще раз спасибо за четкое объяснение 🙂
2. отлично, дайте мне знать, если я смогу помочь каким-либо другим способом. Как всегда, нам нравится видеть творения rCharts, если это возможно, для совместного использования.
n1$publish()
3. Да, с удовольствием, я создам страницу на github и опубликую ее (это будет блестящее приложение) Я буду держать вас в курсе!