簡體   English   中英

在R中制作Sankey圖以進行打印

[英]Making a Sankey diagram in R for printing

我正在嘗試使用R作為打印報告制作一個Sankey圖。 我目前使用了兩種方法來做到這一點,但都沒有達到我想要的效果。

第一個使用Riverplot函數並生成: 在此輸入圖像描述

我對這個圖的問題是我無法弄清楚如何控制圖周圍的空白(它似乎是固定的,不適應不同大小的數據集)或注釋文本的位置。 我想為許多類似但不同大小的數據集重復這個圖,但文本放置的位置變化很大。 這是我目前用於添加文本注釋的代碼:

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圖中修復類別的順序。

經過大量的修補和捏捏代碼之后,我已經設法生產了我想要的東西(解決了我原來問題的第2點)。 在此輸入圖像描述
代碼可以在很多地方進行優化,並且可能更優雅地完成,但我已將其包含在下面,以防它幫助其他任何人。

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>
")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM