首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用MPChart系统绘制心电图的网格线

如何用MPChart系统绘制心电图的网格线
EN

Stack Overflow用户
提问于 2022-11-06 17:01:55
回答 1查看 62关注 0票数 0

我正在开发一个在android应用程序中显示心电图波形的应用程序。我尝试用MPAndroidchart和XYPlotlibrary来绘制心电图数据。我可以看到主要的网格线,但我的要求是同时显示主要和次要的网格线,以便它将类似于心电图图文件。任何人能有任何建议或建议任何库来实现这个功能吗?

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 03:02:23

使用MPAndroidChart的内置图表功能绘制小网格线是不可能的,但您仍然可以手动添加它们以获得所需的外观。

例如:

代码语言:javascript
运行
复制
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val chart = findViewById<LineChart>(R.id.chart)


    val lines = mutableListOf<LineDataSet>()

    val x = (0..100).map { i -> 0.1f*i }
    val y = x.map { i -> 5*sin(7*i)*sin(0.5f*i)* cos(3.25f*i) }

    val primaryLine = LineDataSet(x.zip(y).map { Entry(it.first, it.second) }, "primary")
    primaryLine.setDrawCircles(false)
    primaryLine.lineWidth = 3f
    primaryLine.color = Color.RED
    primaryLine.setDrawValues(false)
    primaryLine.isHighlightEnabled = false

    val majorX = 2f
    val majorY = 4f
    val minorX = majorX/5
    val minorY = majorY/5

    val xmin = floor(x.min()/majorX)*majorX
    val xmax = ceil(x.max()/majorX)*majorX
    val ymin = floor(y.min()/majorY)*majorY
    val ymax = ceil(y.max()/majorY)*majorY

    xGridLines(lines, minorX, ymin, ymax, xmin, xmax, false)
    yGridLines(lines, minorY, ymin, ymax, xmin, xmax, false)

    xGridLines(lines, majorX, ymin, ymax, xmin, xmax, true)
    yGridLines(lines, majorY, ymin, ymax, xmin, xmax, true)

    lines.add(primaryLine)

    chart.axisRight.isEnabled = false
    val yAx = chart.axisLeft
    yAx.setDrawLabels(false)
    yAx.setDrawGridLines(false)
    yAx.setDrawAxisLine(false)
    yAx.axisMinimum = ymin
    yAx.axisMaximum = ymax

    val xAx = chart.xAxis
    xAx.setDrawLabels(false)
    xAx.position = XAxis.XAxisPosition.BOTTOM
    xAx.setDrawGridLines(false)
    xAx.setDrawAxisLine(false)
    xAx.axisMinimum = xmin
    xAx.axisMaximum = xmax+0.01f

    chart.data = LineData(lines.toList())
    chart.description.isEnabled = false
    chart.legend.isEnabled = false
}

private fun yGridLines(lines: MutableList<LineDataSet>, spacing: Float, ymin: Float, ymax: Float, xmin: Float, xmax: Float, major: Boolean) {
    val nY = ((ymax-ymin)/spacing).roundToInt()
    for(i in 0..nY) {
        val yl = ymin + i*spacing
        val ep = listOf(Entry(xmin,yl), Entry(xmax,yl))
        lines.add(makeGridLineDataSet(ep, major))
    }
}

private fun xGridLines(lines: MutableList<LineDataSet>, spacing: Float, ymin: Float, ymax: Float, xmin: Float, xmax: Float, major: Boolean) {
    val nX = ((xmax-xmin)/spacing).roundToInt()
    for(i in 0..nX) {
        val xl = xmin + i*spacing
        val ep = listOf(Entry(xl, ymin), Entry(xl,ymax))
        lines.add(makeGridLineDataSet(ep, major))
    }
}

private fun makeGridLineDataSet(e: List<Entry>, major: Boolean): LineDataSet {
    val ds = LineDataSet(e,"")
    ds.setDrawCircles(false)
    if( major ) {
        ds.color = Color.BLACK
        ds.lineWidth = 1f
    }
    else {
        ds.color = Color.BLACK
        ds.lineWidth = 0.5f
        ds.enableDashedLine(10f,10f,0f)
    }
    ds.setDrawValues(false)
    ds.isHighlightEnabled = false
    return ds
}

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

https://stackoverflow.com/questions/74337958

复制
相关文章

相似问题

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