我正在尝试使用R作为打印报告制作一个Sankey图表。我目前使用了两种方法来做到这一点,但都没有达到我想要的效果。
我对这个情节的问题在于,我无法解决如何控制绘图周围的空白(它似乎是固定的,不适应不同大小的数据集)或注释文本的位置。我想为许多类似但不同大小的数据集重复这个图,但文本放置的位置变化很大。这是我目前用于添加文本注释的代码:
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")
我的问题是(a)我想修复每一侧的类别顺序(如在第一张图像中)和(b)我想在第一张图像中注释图表。 我的问题是:
答案 0 :(得分:3)
经过大量的修补和捏捏代码之后,我已经设法制作了我想要的东西(解决了我原来问题的第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>
")