我正在开发一个在android应用程序中显示心电图波形的应用程序。我尝试用MPAndroidchart和XYPlotlibrary来绘制心电图数据。我可以看到主要的网格线,但我的要求是同时显示主要和次要的网格线,以便它将类似于心电图图文件。任何人能有任何建议或建议任何库来实现这个功能吗?
发布于 2022-11-30 03:02:23
使用MPAndroidChart的内置图表功能绘制小网格线是不可能的,但您仍然可以手动添加它们以获得所需的外观。
例如:
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
}
产
https://stackoverflow.com/questions/74337958
复制相似问题