uniapp 使用renderjs引入echarts

效果图:

1.1renderjs引入echarts 

组件zmui-echarts.vue:

<template>
	<view class="zmui-echarts" :prop="option" :change:prop="echarts.delay"></view>
</template>

<script>
	export default {
		name: 'zmuiEcharts',
		props: {
			option: {
				type: Object,
				required: true
			}
		}
	}
</script>

//使用renderjs 就让app拥有类似有.HTML文件的环境 能直接挂载.js的能力
<script module="echarts" lang="renderjs"> 
	export default {
		data() {
			return {
				timeoutId: null,
				chart: null
			}
		},
		mounted() {
			if (typeof window.echarts === 'object') {
				this.init()
			} else {
				// 动态引入类库
				const script = document.createElement('script') //创建个标签
				script.src = './static/echarts.min.js'  //引入echarts.min.js
				script.onload = this.init
				document.head.appendChild(script) //全局挂载echarts.min.js
			}
		},
		methods: {
			/**
			 * 初始化echarts
			 */
			init() {
				// 根据id初始化图表
				this.chart = echarts.init(this.$el)
				this.update(this.option)
			},
			/**
			 * 防抖函数,500毫秒内只运行最后一次的方法
			 * @param {Object} option
			 */
			delay(option) {
				if (this.timeoutId) {
					clearTimeout(this.timeoutId)
					this.timeoutId = null
				}
      this.timeoutId = setTimeout(() => {
					this.update(option)
				}, 500)
			},
			/**
			 * 监测数据更新
			 * @param {Object} option
			 */
			update(option) {
				console.log('option', option)
				if (this.chart) {
					// 因App端,回调函数无法从renderjs外传递,故在此自定义设置相关回调函数
					if (option) {
						// tooltip
						if (option.tooltip) {
							// 判断是否设置tooltip的位置
							if (option.tooltip.positionStatus) {
								option.tooltip.position = this.tooltipPosition()
							}
							// 判断是否格式化tooltip
							if (option.tooltip.formatterStatus) {
								option.tooltip.formatter = this.tooltipFormatter(option.tooltip.formatterUnit, option.tooltip.formatFloat2,
									option.tooltip.formatThousands)
							}
						}

						// legend
						if (option.legend) {
							console.log('option.legend', option.legend)
							if (Object.prototype.toString.call(option.legend) == '[object Array]') {
								for (let i in option.legend) {
									if (option.legend[i].formatterStatus) {
										option.legend[i].formatter = this.legendFormatter(option.legend[i].formatterType, option.legend[i].formatterArr)
									}
								}
								console.log(12)
							} else {
								if (option.legend.formatterStatus) {
									console.log(56)
									// option.legend.formatter = this.legendFormatter(option.legend.formatterType, option.legend.formatterArr)
									// option.legend.formatter = function(value) {
									// 	return '1'
									// }
								}
								console.log(34)
							}
						}

						// y轴
						if (option.yAxis) {
							if (option.yAxis.axisLabel) {
								if (option.yAxis.axisLabel.formatterStatus) {
									option.yAxis.axisLabel.formatter = this.yAxisFormatter(option.yAxis.axisLabel.formatterData)
								}
							}
							
							if (option.yAxis[0].axisLabel.water) {
									let currentChooseName = option.yAxis[0].axisLabel.water.currentChooseName
									let name = option.yAxis[0].axisLabel.water.name
									console.log('name========>', name,currentChooseName)
									option.yAxis[0].axisLabel.formatter =  function(value) {
										let level = null
										if (currentChooseName == '西铝饮用水' || currentChooseName == '和尚山') {
											if (name == 'CODMn') {
												switch (value) {
													case 2:
														level = 2.0;
														break;
													case 4:
														level = 4.0;
														break;
													case 6:
														level = 6.0;
														break;
													case 10:
														level = 10.0;
														break;
												}
												return level;
											}else if (name == 'TP') {
												switch (value) {
													case 0.02:
														level = 0.02;
														break;
													case 0.1:
														level = 0.1;
														break;
													case 0.2:
														level = 0.2;
														break;
													case 0.3:
														level = 0.3;
														break;
												}
												return level;
												
											}else if (name == 'DO') {
												switch (value) {
													case 7.5:
														level = 7.5;
														break;
													case 6:
														level = 6.0;
														break;
													case 5:
														level = 5.0;
														break;
													case 3:
														level = 3.0;
														break;
												}
												return level;
											}else if (name == 'TN') {
												switch (value) {
													case 0.2:
														level = 0.2;
														break;
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
												}
												return level;
											} else if (name == 'NH3-N') {
												switch (value) {
													case 0.15:
														level = 0.15;
														break;
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
												}
												return level;
											}
											
										}else if(currentChooseName !== '西铝饮用水' || currentChooseName !== '和尚山') {
											if (name == 'CODMn') {
												switch (value) {
													case 4:
														level = 4.0;
														break;
													case 6:
														level = 6.0;
														break;
													case 10:
														level = 10.0;
														break;
														case 15:
															level = 15.0;
															break;
												}
												return level;
											}else if (name == 'TP') {
												switch (value) {
															
													case 0.1:
														level = 0.1;
														break;
													case 0.2:
														level = 0.2;
														break;
													case 0.3:
														level = 0.3;
														break;
														case 0.4:
															level = 0.4;
															break;
												}
												return level;
											} else if (name == 'DO') {
												switch (value) {
													
													case 6:
														level = 6.0;
														break;
													case 5:
														level = 5.0;
														break;
													case 3:
														level = 3.0;
														break;
														case 2:
															level = 2.0;
															break;
												}
												return level;
											}else if (name == 'TN') {
												switch (value) {
													
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
														case 2:
															level = 2.0;
															break;
												}
																			
												return level;
											} else if (name == 'NH3-N') {
												switch (value) {							
													case 0.5:
														level = 0.5;
														break;
													case 1:
														level = 1.0;
														break;
													case 1.5:
														level = 1.5;
														break;
														case 2:
															level = 2.0;
															break;
												}
												return level;
											}
										} 
										
									}
							}
						}

						// 颜色渐变
						if (option.series) {
							for (let i in option.series) {
								let linearGradient = option.series[i].linearGradient
								if (option.series[i].axisLabel && option.series[i].axisLabel.formatterText) {
									option.series[i].axisLabel.formatter = function(value) {
										if (value === 0) {
											return '0 \n 健康';
										} else if (value === 1) {
											return '50 \n 优';
										} else if (value === 2) {
											return '100 \n 良';
										} else if (value === 3) {
											return '150 \n 轻度';
										} else if (value === 4) {
											return '200 \n 中度';
										} else if (value === 5) {
											return '300 \n 重度';
										} else if (value === 6) {
											return '500 \n 严重';
										}
									}
								}
								if (linearGradient) {
									option.series[i].color = new echarts.graphic.LinearGradient(linearGradient[0], linearGradient[1],
										linearGradient[2], linearGradient[3], linearGradient[4])
								}

								if (option.series[i].itemStyle) {
									if (option.series[i].itemStyle.normal) {
										if (option.series[i].itemStyle.normal.formatterColor) {
											option.series[i].itemStyle.normal.color = this.colorFormatter(option.series[i].itemStyle.normal.formatterType,option.series[i])
										}
									}
								}

								if (option.series[i].markLine) {
									if (option.series[i].markLine.label) {
										if (option.series[i].markLine.label.normal) {
											if (option.series[i].markLine.label.normal.formatterLabel) {
												option.series[i].markLine.label.normal.formatter = this.labelFormatter(option.series[i].markLine.label.normal
													.formatterType, option.series[i].markLine.label.normal.formatterValue)
											}
										}
									}
								}
							}
						}
					}
					
					console.log(option)
					this.chart.clear() // 这个不要删掉哟,不然切换不同图形的时候会有bug
					// 设置新的option
					this.chart.setOption(option, option.notMerge)
				}
			},
			waterFormatterYAxis (value) {
				/* let name = null
				switch (value) {
					case 2:
						name = 2.0;
						break;
					case 4:
						name = 4.0;
						break;
					case 6:
						name = 6.0;
						break;
					case 10:
						name = 10.0;
						break;
				} */
				console.log('value', value)
				// return name;
			},
			/**
			 * 设置tooltip的位置,防止超出画布
			 */
			tooltipPosition() {
				return (point, params, dom, rect, size) => {
					// 其中point为当前鼠标的位置,size中有两个属性:viewSize和contentSize,分别为外层div和tooltip提示框的大小
					let x = point[0]
					let y = point[1]
					let viewWidth = size.viewSize[0]
					let viewHeight = size.viewSize[1]
					let boxWidth = size.contentSize[0]
					let boxHeight = size.contentSize[1]
					let posX = 0 // x坐标位置
					let posY = 0 // y坐标位置
					if (x >= boxWidth) { // 左边放的下
						posX = x - boxWidth - 1
					}
					if (y >= boxHeight) { // 上边放的下
						posY = y - boxHeight - 1
					}
					return [posX, posY]
				}
			},
			/**
			 * tooltip格式化
			 * @param {Object} unit 数值后的单位
			 * @param {Object} formatFloat2 是否保留两位小数
			 * @param {Object} formatThousands 是否添加千分位
			 */
			tooltipFormatter(unit, formatFloat2, formatThousands) {
				return params => {
					if (Array.isArray(params)) {
						var params = params[0]
						// #ifdef H5
						var result = params.data.fullDate + '/n' + params.seriesName + ":" + params.data.value
						// #endif
						// #ifdef APP-PLUS
						var result = params.data.fullDate + '</br>' + params.seriesName + ":" + params.data.value
						// #endif
					} else {
						// #ifdef H5
						var result = params.data.fullDate + '/n' + params.seriesName + ":" + params.data.value
						// #endif
						// #ifdef APP-PLUS
						var result = params.data.fullDate + '</br>' + params.seriesName + ":" + params.data.value
						// #endif
					}
					return result
				}
			},
			/**
			 * 保留两位小数
			 * @param {Object} value
			 */
			formatFloat2(value) {
				let temp = Math.round(parseFloat(value) * 100) / 100
				let xsd = temp.toString().split('.')
				if (xsd.length === 1) {
					temp = (isNaN(temp) ? '0' : temp.toString()) + '.00'
					return temp
				}
				if (xsd.length > 1) {
					if (xsd[1].length < 2) {
						temp = temp.toString() + '0'
					}
					return temp
				}
			},
			/**
			 * 添加千分位
			 * @param {Object} value
			 */
			formatThousands(value) {
				if (value === undefined || value === null) {
					value = ''
				}
				if (!isNaN(value)) {
					value = value + ''
				}
				let re = /\d{1,3}(?=(\d{3})+$)/g
				let n1 = value.replace(/^(\d+)((\.\d+)?)$/, function(s, s1, s2) {
					return s1.replace(re, '$&,') + s2
				})
				return n1
			},

			/**
			 * Y轴格式化
			 * @param {Object} data
			 */
			yAxisFormatter(data) {
				return params => {
					let result = []
					for (let i in data) {
						if (params == i) {
							result.push(data[i])
						}
					}
					return result
				}
			},
			/**
			 * legend 格式
			 * @param {Object} Type
			 * @param {Object} Arr
			 */
			legendFormatter(Type, Arr) {
				console.log('Arr', Arr)
				return params => {
					let result = ""
					var total = 0;
					for (var i = 0, l = Arr.length; i < l; i++) {
						total += Arr[i].value;
				    }
					let res = Arr.filter(v => v.name === params)
					let val = res[0].value
					let precent=((val/total)*100).toFixed(2) + '%'
					// #ifdef H5
					result = params +"("+ val+"件)"
					// #endif
					// #ifdef APP-PLUS
					result = params +"("+ val+"件)"
					// #endif
					return result
				}
			},
			/**
			 * 颜色设置
			 * @param {Object} Type
			 */
			colorFormatter(Type,series) {
				let value  =0;
				return params => {
					//如果series 里面包含aqiData 数据 按AQI 的值来渲染颜色
					let value =params.value;
					 if(series['aqiData']!=null){
						value =series['aqiData'][params.dataIndex];
					} 
					let result = ""
					if (Type === 'one') {
						result = "rgb(126,0,35)"
						if (value > 0 && value < 51) {
							result = "#00e400"
						} else if (value >= 51 && value < 101) {
							result = "#ffff00"
						} else if (value>= 101 && value < 151) {
							result = "#ff7e00"
						} else if (value >= 151 && value < 201) {
							result = "#ff0000"
						} else if (value >= 201 && value < 301) {
							result = "#7e0023"
						}
					}
					return result
				}
			},
			/**
			 * 标记线
			 * @param {Object} Type
			 * @param {Object} Value
			 */
			labelFormatter(Type, Value) {
				return params => {
					let result = ""
					if (Type === 'one') {
						result = Value
					}
					return result
				}
			},
		}
	}
</script>

<style scoped>
	.zmui-echarts {
		width: 100%;
		height: 100%;
	}
</style>

2.使用<zmuiEcharts  :option="echartOptions"></zmuiEcharts>

import zmuiEcharts from '@/components/zmui-echarts/zmui-echarts.vue'
components: {
			zmuiEcharts
		},
<zmuiEcharts  :option="echartOptions"></zmuiEcharts>

export default {
    data(){
        return{
            echartOptions: {
					backgroundColor: '#ffffff',
					title: {
						text: 'mg/L',
						textStyle: {
							fontSize: 12,
							fontWeight: 'normal',
							color: '#858585', //标题颜色
						},
						top: 0,
						left: '4%',
					},
					tooltip: {
						show: false
						// axisPointer: {
						// 	type: "axis",
						// 	textStyle: {
						// 		color: "#000"
						// 	}
						// },
						// formatter: (data) => {
						// 	// 可以自定义文字和样式,用行内样式,数据包含在data参数中
						// 	let text = ` ${data.name}:${data.value}`
						// 	return text
						// }
					},
					grid: {
						top: "5%",
						right: "3%",
						bottom: '13%',
					},
					xAxis: [{
						data: [],
						margin: 20,
						interval: 0,
						rotate: 40,
						color: '#858585',
						textStyle: {
							fontSize: 12
						},
						axisLine: {
							lineStyle: {
								color: '#858585',
							}
						},
						axisTick: {
							show: true
						},
					}],
					axisLine: {
						show: false,
						lineStyle: {
							color: '#858585', //y轴颜色
						}
					},
					axisTick: {
						show: false
					},
					splitLine: {
						show: false
					},
					dataZoom: [{
							"show": true,
							"height": 8,
							"xAxisIndex": [
								0
							],
							bottom: '0%',
							start: 0,
							end: 6,
							handleIcon: "M-292,322.2c-3.2,0-6.4-0.6-9.3-1.9c-2.9-1.2-5.4-2.9-7.6-5.1s-3.9-4.8-5.1-7.6c-1.3-3-1.9-6.1-1.9-9.3c0-3.2,0.6-6.4,1.9-9.3c1.2-2.9,2.9-5.4,5.1-7.6s4.8-3.9,7.6-5.1c3-1.3,6.1-1.9,9.3-1.9c3.2,0,6.4,0.6,9.3,1.9c2.9,1.2,5.4,2.9,7.6,5.1s3.9,4.8,5.1,7.6c1.3,3,1.9,6.1,1.9,9.3c0,3.2-0.6,6.4-1.9,9.3c-1.2,2.9-2.9,5.4-5.1,7.6s-4.8,3.9-7.6,5.1C-285.6,321.5-288.8,322.2-292,322.2z",
							handleSize: "130%",
							handleStyle: {
								color: "#fff",
								shadowColor: "#B1B5B9",
								shadowBlur: 5,
							},
							backgroundColor: "#DEE3F4",
							fillerColor: "#008efe",
							endValue: 5,
						},
						{
							"type": "inside",
							"show": true,
							"height": 15,
							"start": 1,
							"end": 35
						}
					],
					yAxis: [{
						type: 'value',
						min: 0,
						max: 0,
						interval: 0.01,
						name: 'nj',
						nameTextStyle: {
							color: '#ffffff'
						},
						axisLine: {
							show: true
						},
						axisTick: {
							show: false
						},
						splitLine: {
							show: false,
						},
						axisLabel: {
							color: '#858585',
							textStyle: {
								fontSize: 13
							},
							formatter: function(value1) {
								return value1;
							},
							water: {
								name: 'water',
								code: 'code'
							},
				
						},
				
					}],
				
				
					series: [{
						label: {
							normal: {
								show: true,
								color: '#333',
								position: 'top',
							}
						},
						name: 'nj',
						type: 'bar',
						data: [],
						barWidth: '8px',
						itemStyle: {
							normal: {
								formatterColor: true,
								formatterType: "one",
							}
						},
					}]
				}
        }
    }
}


				

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/375901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

互联网加竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…

qt学习:mplayer播放器(视频)+arm如何播放视频实战+c启动播放器

目录 作用 linux下载 arm下载 使用方法 键盘 命令 命令词有很多&#xff0c;举例几个 在arm上qt实战 配置ui界面 添加头文件&#xff0c;成员&#xff0c;函数 添加视频按钮点击事件 列表选项双击事件 播放按钮点击事件 暂停继续按钮点击事件 停止按钮点击事件 …

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…

Linux系统调试课:Linux错误码介绍

文章目录 一、错误码二、错误码返回案例三、使用 goto 语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢错误代码由内核或用户空间应用程序(通过errno变量)解释。错误处理在软件开发中非常重要,而不仅仅是在内核开发中。幸运的是,内核提供的几种错误,几乎涵盖了可…

一步步建立一个C#项目(连续读取S7-1500PLC数据)

首先创建一个新项目 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来右键解决方案&#xff0c;点击管理NuGet程序包 6、NuGet程序包 7、安装S7net 8、点击安装 9、安装完成 …

杨幂《哈尔滨1944》现场无剧本,大胆突破令人惊艳。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 杨幂在《哈尔滨1944》的拍摄现场&#xff0c;竟然不带剧本&am…

空想--让MYSQL安装双引擎SQL优化器

坑人的innodb_thread_concurrencyMYSQL的优化器是硬解析, 应用每次发往MYSQL的SQL是文本格式,需要编译,虽然时间不多,也就几百毫秒的事情,可架不住SQL的请求并发量啊! 为此数据库走了两条路线, 一条是ORACLE的缓存路线, 另外一条就是MYSQL的快速路线. ORACLE是尽可能的深度…

【电路】500W 12V至220V的逆变器

本电路采用LT1073芯片DC&#xff0d;DC转换器&#xff0c;将1.5V电压升压到5V或12V。该IC有三个不同的版本&#xff0c;这取决于输出电压。两个具有5V和12V的固定输出电压&#xff0c;而最有趣的是&#xff0c;可以进行调整。该调整是通过两个电阻器的分压器&#xff0c;连接到…

有没有那种不烂大街的跨年文案?

​迎接新年的曙光&#xff1a;那些不落俗套的跨年文案 当钟声敲响&#xff0c;旧的一年逝去&#xff0c;新的一年悄然来临&#xff0c;我们总希望用一些特别的话语来表达对过去的怀念和对未来的期待。在这个信息爆炸的时代&#xff0c;许多跨年文案都已经被人们看过无数次&…

数据结构第十天(排序算法总结)

目录 前言 常数时间复杂度&#xff1a;O(1) 线性时间复杂度&#xff1a;O(n) 线性对数时间复杂度&#xff1a;O(n log n) 平方时间复杂度&#xff1a;O(n^2) 对数时间复杂度&#xff1a;O(log n) 前言 排序算法的学习可以告一段落了。但算法的学习永不停止。 今天&…

RBAC权限控制系统-手撸RBAC

手撸RBAC 一、概述 1、什么是RBAC RBAC&#xff08;Role-Based Access Control&#xff09;是一种访问控制机制&#xff0c;它基于角色的概念&#xff0c;将权限授予特定的角色&#xff0c;而不是直接授予个体用户。 这种模型允许管理员根据用户的角色来管理他们的权限&…

elementPlus实现动态表格单元格合并span-method方法总结

最近在做PC端需求的时候&#xff0c;需要把首列中相邻的同名称单元格合并。 我看了一下elementPlus官网中的table表格&#xff0c;span-method可以实现单元格合并。 我们先看一下官网的例子&#xff1a; 合并行或列 多行或多列共用一个数据时&#xff0c;可以合并行或列。 …

9.0 Zookeeper 节点特性

本章节介绍一下 zookeeper 的节点特性和简单使用场景&#xff0c;正是由于这些节点特性的存在使 zookeeper 开发出不同的场景应用。 1、同一级节点 key 名称是唯一的 实例&#xff1a; $ ls / $ create /runoob 2 已存在 /runoob 节点&#xff0c;再次创建会提示已经存在。 …

Mysql大表添加字段失败解决方案

背景 最近遇到一个问题&#xff0c;需要在user用户表千万级别数据中添加两个字段&#xff0c;发现老是加不上去&#xff0c;一直卡死。表数据量不仅大&#xff0c;而且是一个热点表&#xff0c;访问频率特别高&#xff0c;而且该表的访问是在一个大事务中。加字段的时候一直在…

Vue3大事件项目(ing)

文章目录 核心内容1.大事件项目介绍2.大事件项目创建3.Eslint配置代码风格4.配置代码检查工作流问题: pnpm lint是全量检查,耗时问题,历史问题 5.目录调整6.vue-router4 路由代码解析7.引入 Element Plus 组件库8.Pinia 构建仓库 和 持久化9.Pinia 仓库统一管理 核心内容 Vue3…

CX341A 安装驱动与刷固件

参考 驱动安装1 DPDK编译&#xff1a;支持Mellanox 25Gbps网卡 - 知乎 NVIDIA Mellanox CX网卡固件、驱动系列操作 - 知乎 驱动安装2 Mellanox网卡驱动安装指南 Mellanox OFED_崇尚匀速 追求极致的技术博客_51CTO博客 驱动与固件&#xff1a; 家用万兆网络指南 6 - 比…

3、生成式 AI 如何帮助您改进数据可视化图表

生成式 AI 如何帮助您改进数据可视化图表 使用生成式 AI 加速和增强数据可视化。 图像来源:DALLE 3 5 个关键要点: 数据可视化图表的基本结构使用 Python Altair 构建数据可视化图表使用 GitHub Copilot 加快图表生成速度使用 ChatGPT 为您的图表生成相关内容使用 DALL-E 将…

JCTC | 利用几何深度学习对蛋白质-配体结合pose进行等变灵活建模

Overview 该论文解决了药物开发中蛋白质-配体复合结构灵活建模的挑战。作者提出了一种名为FlexPose的新型深度学习框架&#xff0c;它可以直接对复杂结构进行建模&#xff0c;而不需要传统的采样和评分策略。 该模型结合了标量-向量双特征表示和 SE(3)等变网络设计来处理动态结…
最新文章