Insérer des Liens dans Google api Graphiques de données?
J'ai été jouer avec Google charts un peu plus dans les résultats de google charts terrain de jeu ici:
Le code que j'ai joué est: est-ce
function drawVisualization() {
//Create and populate the data table.
var data = google.visualization.arrayToDataTable([
['Year', 'Austria'],
['2003', 1336060],
['2004', 1538156],
['2005', 1576579],
['2006', 1600652],
['2007', 1968113],
['2008', 1901067]
]);
//Create and draw the visualization.
new google.visualization.BarChart(document.getElementById('visualization')).
draw(data,
{title:"Yearly Coffee Consumption by Country",
width:600, height:400,
vAxis: {title: "Year"},
hAxis: {title: "Cups"}}
);
}
et qui me donne un beau tableau qui ressemble à ceci:
Je suis en train d'avoir ce tableau correspondent aux besoins de mon site, et pour ce faire, j'ai besoin de faire la barre de noms sur la gauche, des liens vers une autre page. Ainsi, par exemple, de 2003 serait un lien sur lequel l'utilisateur peut cliquer sur les sna serait alors en 2004 etc.
J'ai essayé de faire quelque chose comme ceci:
function drawVisualization() {
//Create and populate the data table.
var data = google.visualization.arrayToDataTable([
['Year', 'Austria'],
['<a href="url">Link text</a>', 1336060],
['2004', 1538156],
['2005', 1576579],
['2006', 1600652],
['2007', 1968113],
['2008', 1901067]
]);
//Create and draw the visualization.
new google.visualization.BarChart(document.getElementById('visualization')).
draw(data,
{title:"Yearly Coffee Consumption by Country",
width:600, height:400,
vAxis: {title: "Year"},
hAxis: {title: "Cups"}}
);
}
Mais je ne pouvait espérer pour qu'il soit si facile que ça et il n'était pas. Personne ne sait si cela est possible?
OriginalL'auteur Mike | 2012-10-03
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas triviale car la sortie que vous voyez est le SVG, pas en HTML. Ces étiquettes dans votre exemple ("2004", "2005", etc) sont intégrés à l'intérieur de SVG nœuds de texte, si l'insertion de raw des balises HTML à l'intérieur d'eux ne sera pas rendu au format HTML.
La solution de contournement consiste à rechercher les nœuds de texte contenant les valeurs cibles (encore une fois, "2004", "2005", etc) et de les remplacer par
ForeignObject
éléments.ForeignObject
éléments peuvent contenir HTML ordinaire. Ceux-ci doivent être placés à plus ou moins où l'original SVG nœuds de texte avait été.Voici un extrait d'exemple illustrant tout cela. Elle est à l'écoute de votre exemple précis, de sorte que lorsque vous basculez sur le rendu de ce que vos données réelles est, vous voulez les modifier et de les généraliser cet extrait de code en conséquence.
Note mineure, il y a un peu de jQuery là pour des raisons de commodité, mais vous pouvez remplacer
$('text')
avecdocument.getElementsByTagName("svg")[0].getElementsByTagName("text")
.La solution parfaite! Merci
Parfait. J'ai besoin de liens en vaxis titres. Merci.
OriginalL'auteur manzoid
Manzoid la réponse est bonne, mais "un peu de montage est toujours nécessaire", comme il affiche une boîte d'alerte, plutôt que de suivre le lien. Voici une réponse plus complète, MAIS elle rend les barres cliquable plutôt que de les étiquettes. J'ai créer un DataTable qui comprend les liens, puis créer un DataView de que pour sélectionner les colonnes que je veux afficher. Puis, quand l'sélectionnez l'événement se produit, je viens de récupérer le lien de l'original de la DataTable.
OriginalL'auteur Mark Butler
Depuis le SVG-l'incorporation de la route (et c'est compréhensible) trop poilue pour vous de envie de coucher avec, essayons une approche complètement différente. En supposant que vous avez la possibilité de modifier votre spécification fonctionnelle un peu, de telle sorte que la bars sont cliquables, pas la étiquettes, alors voici une solution beaucoup plus simple qui fonctionne.
Recherchez le
alert
dans cet extrait, c'est la partie que vous pourrez personnaliser à faire la redirection.OriginalL'auteur manzoid
J'ai n'ont apparemment pas assez de points de réputation pour commenter directement à une réponse précédente, donc mes excuses pour ce faire un nouveau post. manzoid la suggestion est bien, mais il a un problème, j'ai trouvé, et il semble que Mark Butler pourrait avoir couru dans le même problème (ou inconsciemment éludée).
Que la ligne de garde le premier point de données d'être cliquable. Je l'ai utilisé sur un Janv-Déc graphique à barres, et seulement Fév-Déc étaient cliquables. Retrait de sel['ligne'] à partir de l'état permet à Jan de travail. Je ne sais pas si la (les) condition est en fait même pas nécessaire, cependant.
OriginalL'auteur overflowing
Vous devez utiliser formateurs.
Si vous remplacez la valeur HTML tri ne fonctionnera pas correctement.
OriginalL'auteur Rafal Enden
Voici une autre solution qui encapsule chaque balise de texte pour les étiquettes avec la balise d'ancrage.
ForeignObject
Voici un échantillon: https://jsfiddle.net/tokkonoPapa/h3eq9m9p/
OriginalL'auteur tokkonopapa