首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中生成一个用于打印的Sankey图

在R中生成一个用于打印的Sankey图
EN

Stack Overflow用户
提问于 2016-01-12 14:23:31
回答 1查看 1.1K关注 0票数 1

我正试图用R为打印报告制作一个Sankey图。我目前已经使用了两种方法来完成这个任务,但是也没有达到我想要的效果。

第一个函数使用Riverplot函数,并生成以下内容:

这个图的问题是,我无法解决如何控制图周围的空格(它似乎是固定的,并且不适应不同大小的数据集)或注释文本的位置。我想对一些相似但大小不同的数据集重复这个图,但是文本放置在其位置上是非常不同的。这是我目前用于添加文本注释的代码:

代码语言:javascript
复制
riverplot(a, srt = 0)
y_lim<-par("yaxp") #gets y axis limits to spicify text placements
#  text(1.5,y_lim[1], Name,font=2) #labels plot with Name (LA)
text(1,y_lim[1],"2004")
text(2,y_lim[1],"2010")

第二种方法使用rCharts并生成以下内容:

我在这方面的问题是:(a)我想确定每一边类别的顺序(如第一幅图像)和(b)我想对图表进行注释,就像在第一幅图像中一样。我的问题是:

  1. 如何微调Riverplot图形(第一张图像)的格式,或者,
  2. 如何向rCharts Sankey绘图添加注释(我猜想这可能是通过脚本部分,但我对rCharts、d3和javascript还不熟悉),
  3. 是否可以在rCharts sankey图中修复类别的顺序。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-14 21:03:09

经过大量的修改和整理代码后,我成功地产生了我想要的东西(解决了我最初问题的第2点)。

代码可以在许多地方进行改进,而且可能会做得更优雅一些,但我已经将其包括在下面,以防它对其他人有所帮助。

代码语言:javascript
复制
sankeyPlot$setTemplate(
  afterScript = "
<script>

var cscale = d3.scale.ordinal()
.domain(['N','E', 'G' ,'I','T','N ','E ', 'G ' ,'I ','T '])
.range(['#d3d3d3', '#32ca32', '#1f78b4', '#e31a1c','#ecd736','#d3d3d3',    '#32ca32', '#1f78b4', '#e31a1c','#ecd736'])



d3.selectAll('#{{ chartId }} svg path.link')
.style('stroke', function(d){
return cscale(d.source.name);
//returns grey links
})

d3.selectAll('#{{ chartId }} svg .node rect')
.style('fill', function(d){
return cscale(d.name)
})
.style('stroke', 'none')

var text_box = d3.selectAll('#{{ chartId }}').append('svg')
    .attr('width', 500)
    .attr('height', 100)

var TextData = [
    { 'cx': 0, 'cy': 20 ,'label': 'Type A', 'pos': 'left'},
    { 'cx': 250, 'cy': 20,'label': 'Label','pos': 'middle'},
    { 'cx': 500, 'cy': 20, 'label': 'Type B','pos': 'end'}];

var text = text_box.selectAll('text')
                    .data(TextData)
                    .enter()
                    .append('text');

//Add the text attributes
var textLabels = text
             .attr('x', function(d) { return d.cx; })
             .attr('y', function(d) { return d.cy; })
             .text( function (d) { return d.label ; })
              .attr('text-anchor', function(d) { return d.pos ;})
             .attr('font-family', 'sans-serif')
             .attr('font-size', '14px')
             .attr('fill', 'black');

</script>
")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34746181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档