【问题标题】:inverted label text (half turn) for Chord diagram on holoviews with bokeh带有散景的全息视图上的和弦图的倒置标签文本(半圈)
【发布时间】:2021-04-10 04:50:36
【问题描述】:

https://holoviews.org/reference/elements/bokeh/Chord.html 的示例中,如何将标签文本的方向更改为 180°,以避免在左半圆中将标签文本倒置的旋转(见图)。后端是散景。通过此更改,标签文本将更具可读性。

这是我到目前为止所做的:

import numpy as np

def rotate_label(plot, element):
        angles = plot.handles['text_1_source'].data['angle']
        angles[np.where((angles < -1.5707963267949) | (angles > 1.5707963267949))] += 3.1415926535898

chord.opts(cmap='Category20b',
           edge_cmap='Category20b', 
           edge_color=dim('source').str(), 
           labels='index', 
           node_color=dim('index').str(),
           hooks=[rotate_label]
           )

第一张图片(当前):

第二张图(客观):

【问题讨论】:

    标签: python data-visualization bokeh holoviews chord-diagram


    【解决方案1】:

    这是相当困难的。如果标签文本只有几个字符长,这个带有钩子的解决方案可能是合适的。我确信代码可以写得更清楚,但我没有使用 numpy 的经验。

    import numpy as np
    
    def rotate_label(plot, element):
        white_space = "      "
        angles = plot.handles['text_1_source'].data['angle']
        characters = np.array(plot.handles['text_1_source'].data['text'])
        plot.handles['text_1_source'].data['text'] = np.array([x + white_space if x in characters[np.where((angles < -1.5707963267949) | (angles > 1.5707963267949))] else x for x in plot.handles['text_1_source'].data['text']])
        plot.handles['text_1_source'].data['text'] = np.array([white_space + x if x in characters[np.where((angles > -1.5707963267949) | (angles < 1.5707963267949))] else x for x in plot.handles['text_1_source'].data['text']])
        angles[np.where((angles < -1.5707963267949) | (angles > 1.5707963267949))] += 3.1415926535898
        plot.handles['text_1_glyph'].text_align = "center"
    
    chord.opts(cmap='Category20b',
               edge_cmap='Category20b', 
               edge_color=dim('source').str(), 
               labels='index', 
               node_color=dim('index').str(),
               hooks=[rotate_label]
               )
    

    变量white_space 包含几个空白字符,如有必要,可以调整这些空白字符来定位标签文本。
    居中的标签文本 (plot.handles['text_1_glyph'].text_align = "center") 并不理想。更好的解决方案是将左半圆的标签文本对齐到right,将右半圆的标签文本对齐到left。但我不知道该怎么做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多