柱状图和区域图表的一个五行的数据显示

本文介绍了一个使用Adobe Flex框架创建的应用实例,该应用通过LineChart和AreaChart组件展示了一组随机生成的数据。图表显示了不同元素(如matel、wood等)在左、右两个类别下的数值分布,并可通过按钮刷新这些数据。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="application1_creationCompleteHandler(event)" layout="absolute" width="1000" height="600" xmlns:aeon="aeon.*" xmlns:aswing="org.aswing.*" xmlns:local="*">
	<mx:Style>
		Application{
			fontSize:12px;
		}
	</mx:Style>
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.events.FlexEvent;
			import mx.utils.ObjectProxy;
			
			[Bindable]
			private var expensesAC:ArrayCollection = new ArrayCollection(
			[]
			);
			[Bindable]
			private var objleft:ObjectProxy;
			[Bindable]
			private var objright:ObjectProxy;
			
			private var attrs:Array = ["matel","wood","flood","fire","earth"];
			
			private function randAttr(who:String):void
			{
				var total:Number = 100;
				var list:Array = attrs.slice();
				while(total>0 && list.length>0){
					var key:String = list[Math.floor(Math.random()*list.length)];
					list.splice(list.indexOf(key),1);
					var value:Number = total*Math.random();
					var obj:Object = expensesAC.getItemAt(attrs.indexOf(key));
					obj[who] = value;
					total -= value;
				}
			}


			protected function application1_creationCompleteHandler(event:FlexEvent):void
			{
				expensesAC.addItem({elementname:"matel",left:0,right:0});
				expensesAC.addItem({elementname:"wood",left:0,right:0});
				expensesAC.addItem({elementname:"flood",left:0,right:0});
				expensesAC.addItem({elementname:"fire",left:0,right:0});
				expensesAC.addItem({elementname:"earth",left:0,right:0});
				this.randAttr("left");
				this.randAttr("right");
				expensesAC.refresh();
			}

			protected function button1_clickHandler(event:MouseEvent):void
			{
				this.randAttr("left");
				this.randAttr("right");
				expensesAC.refresh();
			}

		]]>
	</mx:Script>
	<!-- Define custom colors for use as fills in the AreaChart control. -->
	<mx:SolidColor id="sc1" color="blue" alpha=".3"/>
	<mx:SolidColor id="sc2" color="red" alpha=".3"/>
	<mx:SolidColor id="sc3" color="green" alpha=".3"/>
	
	<!-- Define custom Strokes. -->
	<mx:Stroke id = "s1" color="blue" weight="2"/>
	<mx:Stroke id = "s2" color="red" weight="2"/>
	<mx:Stroke id = "s3" color="green" weight="2"/>
	
	<mx:Panel title="LineChart and AreaChart Controls Example" 
			  height="100%" width="471" layout="horizontal" x="122" y="0">
		<mx:Canvas x="122" y="33" width="100%" height="100%">
			<mx:ColumnChart top="-1" id="column" 
							height="156" 
							width="361" 
							paddingLeft="5" 
							paddingRight="5" 
							showDataTips="true" 
							dataProvider="{expensesAC}"
							 x="98">                
				<mx:horizontalAxis>
					<mx:CategoryAxis categoryField="elementname"/>
				</mx:horizontalAxis>
				
				<mx:series>
					<mx:ColumnSeries 
						yField="left" 
						displayName="left"
						fill="{sc1}"
						stroke="{s1}"
						/>
					<mx:ColumnSeries 
						yField="right" 
						displayName="right"
						fill="{sc2}"
						stroke="{s2}"
						/>
				</mx:series>
			</mx:ColumnChart>
			<mx:Legend dataProvider="{Areachart}"/>
			<mx:AreaChart id="Areachart" height="142" width="356"
						  paddingLeft="5" paddingRight="5" 
						  showDataTips="true" dataProvider="{expensesAC}" x="103" y="161">
				
				<mx:horizontalAxis>
					<mx:CategoryAxis categoryField="elementname"/>
				</mx:horizontalAxis>
				
				<mx:series>
					<mx:AreaSeries yField="left" form="curve" displayName="left" areaStroke="{s1}" areaFill="{sc1}"/>
					<mx:AreaSeries yField="right" form="curve" displayName="right" areaStroke="{s2}" areaFill="{sc2}"/>
				</mx:series>
			</mx:AreaChart>
			
		</mx:Canvas>
	</mx:Panel>
	<mx:Button x="10" y="10" label="flush" click="button1_clickHandler(event)"/>
	
</mx:Application>

这是一个较为复杂的可视化页面布局需求,适用于 Vue3 + Vite 项目。我们可以使用 [ECharts](https://echarts.apache.org/zh/index.html) 进行图表绘制,并结合 Vue 的响应式系统实现动态渲染与数据切换功能。 以下是一个基于你描述的结构图表类型的简化实现框架(部分示例图表示意): --- ## ✅ 实现思路 1. **使用 `Vue3 + Vite` 构建基础项目** 2. **安装 ECharts 其 Vue 封装组件 `vue-echarts`** 3. **使用 `flex` 或 `grid` 布局划分页面区域** 4. **按需引入不同类型的 ECharts 图表** 5. **每个区块根据需要放置图表或表格、纯文本** --- ## 📦 安装依赖 ```bash npm install echarts vue-echarts ``` --- ## 🧱 页面结构(使用 CSS Grid) ```html <template> <div class="dashboard"> <!-- 第一行 --> <LineChart class="chart" /> <BarChart class="chart" /> <PieChart class="chart" /> <!-- 第二行 --> <HorizontalBarChart class="chart" /> <LineChart class="chart" /> <RadarChart class="chart" /> <!-- 第三行 --> <div class="table">表格预留位置</div> <!-- 第四行 --> <DataDisplay class="data-display" label="数据展示1" value="1000" /> <div class="dual-pie"> <PieChart class="mini-chart" /> <PieChart class="mini-chart" /> </div> <DataDisplay class="data-display" label="数据展示2" value="80%" /> <!-- 第五行 --> <div class="switchable-chart"> <div class="switcher"> <button @click="switchTime('month')">本月</button> <button @click="switchTime('quarter')">季度</button> <button @click="switchTime('year')">年度</button> </div> <PieChart class="pie-detail" :key="timeRange" /> </div> <!-- 第六行 --> <DataOnly class="data-only" label="数据A" value="1234" /> <DataOnly class="data-only" label="数据B" value="5678" /> <DataOnly class="data-only" label="数据C" value="9012" /> <!-- 第七行 --> <HorizontalBarChart class="chart" /> <BarChart class="chart" /> <!-- 第八行 --> <CompareBarChart class="chart" /> <CompareLineChart class="chart" /> <TreeChart class="chart" /> <!-- 第九行 --> <LineChart class="chart" /> <BarChart class="chart" /> <DualPieChart class="chart" /> <!-- 第十行 --> <HorizontalTreeChart class="chart" /> <LineChart class="chart" /> <RadarChart class="chart" /> </div> </template> ``` --- ## 🎨 样式布局(CSS Grid) ```css .dashboard { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } .chart { height: 300px; background-color: #f9f9f9; border-radius: 8px; padding: 10px; } .table { grid-column: span 3; height: 200px; background-color: #fff; border: 1px solid #ddd; text-align: center; line-height: 200px; } .data-display, .data-only { background-color: #eef6ff; border-radius: 6px; padding: 15px; text-align: center; } .dual-pie { display: flex; justify-content: space-around; align-items: center; background-color: #f0f8ff; border-radius: 6px; padding: 10px; } .switchable-chart { grid-column: span 3; display: flex; flex-direction: column; align-items: center; } ``` --- ## 📈 示例图表组件(以折线图为例) ### LineChart.vue ```vue <script setup> import { LineChart as EChartsLine } from 'echarts/charts' import { TitleComponent, TooltipComponent, GridComponent, LegendComponent } from 'echarts/components' import * as echarts from 'echarts/core' import { CanvasRenderer } from 'echarts/renderers' import { LineChart } from 'vue-echarts' echarts.use([ TitleComponent, TooltipComponent, GridComponent, LegendComponent, EChartsLine, CanvasRenderer ]) const option = { tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] }, yAxis: {}, series: [ { name: '销量', type: 'line', data: [120, 132, 101, 134, 90, 230, 210], areaStyle: { color: '#a5d8ff' } } ] } </script> <template> <LineChart :option="option" autoresize style="height: 300px" /> </template> ``` --- ## 🔄 动态切换中心圆数据(第五行示例) 在第五行中加入一个可点击切换时间范围的功能,用于更新饼图数据: ```js <script setup> import { ref } from 'vue' import PieChart from './components/PieChart.vue' const timeRange = ref('month') function switchTime(range) { timeRange.value = range } </script> ``` 然后将 `timeRange` 传入饼图组件作为 key 来触发重新渲染,从而加载不同的数据源。 --- ## 💡 相关问题补充
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值