打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何做绘制知识图谱的小工具?

前几天,在 《记录一次自己准备汇报的过程》 中,提到我用 C# 语言做了一个封装 Echarts 的用户控件,今天系里一位老师,让我帮忙绘制一下这幅图表。

img01 原始图表

于是,我继续对 Echarts 中的 关系图 进行封装,绘制之后的图表如下所示:

img02 顶点表

img03 边表

img04 图表1

img05 图表2

后面两幅图是根据 顶点表边表 构造而成的。根据内容应该是有关于概率与数理统计课程的知识图谱。下面是我学习线性代数组建的知识图谱,有关知识图谱的知识以及具体应用,我会在后面来介绍。

img06 线性代数的知识图谱

img07 线性代数的知识图谱

下面介绍一下封装 Echarts 的大体思路:

首先,我们来看看 Echarts 官方给的引用 Eharts 的方法。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
    <script src="echarts.min.js"></script>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {
            title: {
                text'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data:['销量']
            },
            xAxis: {
                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
            },
            yAxis: {},
            series: [{
                name'销量',
                type'bar',
                data: [52036101020]
            }]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    
</script>
</body>
</html>

从这个例子中,我们可以看到绘制图表最关键的就是构造option对象,然后把这个对象作为参数传给setOption()方法,这样根据option对象中配置的参数,如titlelegendxAxisyAxisseries等,就可以绘制相应的图表了。

而 C# 开发环境中有专门用来显示网页的 WebBrowser 控件,通过该控件的Navigate()方法,我们可以在该控件中打开对应位置的网页。通过该控件的HtmlDocument属性可以得到代表当前网页的Document对象,通过该对象的InvokeScript()方法,可以执行该Document中包含的JavaScript代码。

//WebBrowser中的属性与方法
public void Navigate(string urlString);
public HtmlDocument Document { get; }
//HtmlDocument中的方法
public object InvokeScript(string scriptName, object[] args);

有了这些知识储备,我们就可以在指定目录放置一个展示 Echarts 图表的网页(例如:echarts.html),在里面写一个接收 option对象并给myChart.setOption(option)赋值的JavaScript函数(showChart(option))就可以了。

网页部分的代码(echarts.html):

<!DOCTYPE html>
<html lang="en-US">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css" />
<script src="./jquery-1.11.2.min.js"></script>
<script src="./bootstrap/js/bootstrap.min.js"></script>
<script src="./json2.js"></script>

<head>
    <title></title>
</head>

<body>
    <div class="container-fluid">
        <div id="main" style="height:350px;"></div>
    </div>
    <script src="./echarts.js"></script>
    <script>
        var myChart = echarts.init(document.getElementById('main'));
        var option = {
            title: {
                text'ECharts 入门示例'
            },
            tooltip: {},
            legend: {
                data: ['销量']
            },
            xAxis: {
                data: ["衬衫""羊毛衫""雪纺衫""裤子""高跟鞋""袜子"]
            },
            yAxis: {},
            series: [{
                name'销量',
                type'bar',
                data: [52036101020]
            }]
        };
        myChart.setOption(option);
    
</script>

    <script type="text/javascript">
        function showChart(option{
            myChart.clear();
            var op = JSON.parse(option);
            myChart.setOption(op);
        }

        function setPosition(height{
            var divMain = document.getElementById("main");
            divMain.style.height = height + "px";
            window.onresize = myChart.resize();
        }
    
</script>
</body>
</html>

自定义控件部分的代码:

public partial class Echarts : UserControl
{
    public Echarts()
    
{
        InitializeComponent();
    }
    public object Option { getset; }
    private bool _blnDocumentLoaded;

    public void InitialECharts()
    
{
        if (_blnDocumentLoaded)
        {
            object[] objArray = new object[1];
            objArray[0] = this.Option;
            HtmlDocument htmlDocument = webBrowser1.Document;

            if (htmlDocument != null)
                htmlDocument.InvokeScript("showChart", objArray);
        }
        else {
            string strHtml = Application.StartupPath + @"\echarts.html";

            if (File.Exists(strHtml))
            {
                webBrowser1.Navigate(strHtml);
            }
        }            
    }

    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    
{
        object[] objArray = new object[1];
        objArray[0] = Option;
        HtmlDocument htmlDocument = webBrowser1.Document;
        if (htmlDocument != null)
        {
            htmlDocument.InvokeScript("showChart", objArray);
            objArray[0] = Height;
            htmlDocument.InvokeScript("setPosition", objArray);
            _blnDocumentLoaded = true;
        }
    }
    private void webBrowser1_SizeChanged(object sender, EventArgs e)
    
{
        if (_blnDocumentLoaded)
        {
            object[] objArray = new object[1];
            objArray[0] = Height;
            HtmlDocument htmlDocument = webBrowser1.Document;
            if (htmlDocument != null)
                htmlDocument.InvokeScript("setPosition", objArray);
        }
    }
}

到此为止,这个封装 Echarts 的控件就做好了,至于如何利用 C# 语言生成option对象,即一个Json数据的方法,我在后面会为大家介绍,今天就到这里吧!See You!


经过8年多的发展,LSGO软件技术团队在地理信息系统、数据统计分析、计算机视觉领域积累了丰富的研发经验,也建立了人才培养的完备体系。

欢迎对算法设计与实现感兴趣的同学加入,与我们共同成长进步。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
HtmlDocument.InvokeScript 方法,执行在 HTML 页面中定义的动态脚本函数
C#用webBrowser1操作<iframe>问题 C#/.NET 编程开发 华军知道 ...
Echarts  java 后台交互
Echarts自动刷新数据
Echarts实现图表联动(多图联动、图表间联动)
echarts 怎么点击图例显示该折线,隐藏其他折线
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服