绘制数据图

news2024/9/23 11:13:13

读取文件:

( 1960 : 30 64 6 )
(1970 : 24 69 7 )
(1980 : 23 68 9 )
(1990 : 18 70 12)
(2000 : 15 68 17 )
(2010 : 13 64 23 )
(2020 : 12 60 28)
( 2030 : 11 59 30 )
( 2040 : 11 56 33 )
 

运行代码:

//绘制数据图
#include"std_lib_facilities.h"
#include"GUI/Simple_window.h"
#include"GUI/Graph.h"
#include"GUI/Point.h"
//------------------------------------------------------------------------
//定义保存数据项的Distribution类型
struct Distribution
{
	int year, young, middle, old;
};
//------------------------------------------------------------------------
//定义读取数据项的输入操作符
istream& operator>>(istream& is, Distribution& d)
{
	char ch1 = 0;
	char ch2 = 0;
	char ch3 = 0;
	Distribution dd;

	if (is >> ch1 >> dd.year
		>> ch2 >> dd.young >> dd.middle >> dd.old
		>> ch3)
	{
		if (ch1 != '(' || ch2 != ':' || ch3 != ')')
		{
			is.clear(ios_base::failbit);
			return is;
		}
	}
	else 
		return is;
	d = dd;
	return is;
}
//--------------------------------------------------------------------------
//定义比例缩放类
class Scale
{
	int cbase;
	int vbase;
	double scale;
public:
	Scale(int b, int vb, double s) :cbase(b), vbase(vb), scale(s) {}
	int operator()(int v)const { return cbase + (v - vbase) * scale; }
};
//---------------------------------------------------------------------------
int main()
try{
	//构造一些常量
	const int xmax = 600;
	const int ymax = 400;

	const int x_orig = xmax / 2;
	const int y_orig = ymax / 2;
	const Point orig(x_orig, y_orig);

	const int r_min = -10;
	const int r_max = 11;

	const int n_points = 3000;

	const int x_scale = 30;
	const int y_scale = 30;

	const int base_year = 1960;
	const int end_year = 2040;

	const int xoffset = 100;
	const int yoffset = 60;

	const int xspace = 40;
	const int yspace = 40;

	const int xlength = xmax - xoffset - xspace;
	const int ylength = ymax - yoffset - yspace;

	const double xscale = double(xlength) / (end_year - base_year);
	const double yscale = double(ylength) / 100;
	//-----------------------------------------------------------------------
    //构建窗口
	Simple_window win(Point(100, 100), xmax, ymax, "Aging Japan");
	//-----------------------------------------------------------------------
	//打开文件
	string file_name = "japanese-age-data.txt";
	ifstream ifs(file_name.c_str());
	if (!ifs)error("can't open ", file_name);
    //-----------------------------------------------------------------------
	//数据比例缩放
	Scale xs(xoffset, base_year, xscale);
	Scale ys(ymax - yoffset, 0, -yscale);
	//------------------------------------------------------------------------
	//构造坐标系
	Axis x(Axis::x, Point(xoffset, ymax - yoffset), xlength,
		(end_year - base_year) / 10,
		"year 1960 1970 1980 1990  "
		"2000   2010  2020  2030  2040");
	x.label.move(-100, 0);
	x.set_color(Color::black);

	Axis y(Axis::y, Point(xoffset, ymax - yoffset), ylength, 10, "% of population");
	y.set_color(Color::black);

	Line current_year(Point(xs(2008), ys(0)), Point(xs(2008), ys(100)));
	current_year.set_color(Color::black);

	current_year.set_style(Line_style::dash);
	//------------------------------------------------------------------------
	//读取文件数据
	Open_polyline children;
	Open_polyline adults;
	Open_polyline aged;

	Distribution d;
	while (ifs >> d)
	{
		if (d.year < base_year || end_year < d.year)
			error("year out of range");
		if (d.young + d.middle + d.old != 100)
			error("percentages don't add up");
		int x = xs(d.year);
		children.add(Point(x, ys(d.young)));
		adults.add(Point(x, ys(d.middle)));
		aged.add(Point(x, ys(d.old)));

	}
	//------------------------------------------------------------------------
	//为图形添加标签并设置颜色
	Text children_label(Point(10, children.point(0).y), "age 0-14");
	children.set_color(Color::red);
	children_label.set_color(Color::red);

	Text adults_label(Point(10, adults.point(0).y), "age 15-64");
	adults.set_color(Color::blue);
	adults_label.set_color(Color::blue);

	Text aged_label(Point(10, aged.point(0).y), "age 65+");
	aged.set_color(Color::dark_green);
	aged_label.set_color(Color::dark_green);
    //------------------------------------------------------------------------
	//将不同的Shape对象添加到Window对象中
	win.attach(children);
	win.attach(adults);
	win.attach(aged);

	win.attach(children_label);
	win.attach(adults_label);
	win.attach(aged_label);

	win.attach(x);
	win.attach(y);
	win.attach(current_year);
	//------------------------------------------------------------------------
	//启动GUI系统
	win.wait_for_button();
	//------------------------------------------------------------------------
}
catch (exception& e) {
	cerr << "error:" << e.what() << '\n';
	keep_window_open();
	return 1;
}
catch (...) {
	cerr << "Oops:unknown exception!\n";
	keep_window_open();
	return 2;
}
//------------------------------------------------------------------------------

运行结果:

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.字体图标

2.1字体图标的产生 字体图标使用场景:主要用于显示网页中通用、常用的一些小图标。 精灵图是有诸多优点的&#xff0c;但是缺点很明显&#xff1a; 1.图片文件比较大 2.图片本身放大和缩小会失真 3.一旦图片制作完毕想要更换非常复杂 字体图标iconfont可以很好的解决以上问题…

Redis特性初识及其安装与配置

目录 1.认识Redis Redis主要特点 主要应用场景 2.MySQL VS NoSQL 3.Redis的安装与配置 redis5的安装 修改配置文件 启动redis 4.Redis客户端 命令行客户端 图形化界面客户端 基于redis的API自行开发客户端 1.认识Redis Redis&#xff08;Remote Dictionary Serve…

Python-Web框架flask使用

目录 1.Web框架 1.1 flask 1.1.1 debug调试 1.1.2 定义参数web服务 获取字符串 ​编辑 1.1.3 html网页渲染 1.13.1 带参数传给网页文件 普通元素 列表元素 字典元素 1.Web框架 1.1 flask python的web框架&#xff0c;目录结构如下&#xff1a; 1.static存放的是css,…

《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.3》

一、环境信息 操作系统&#xff1a;Centos7.6.1810 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 如下图所示&#xff1a; 注意&#xff1a;升级后由于加密算法的区别&#xff0c;低版本的SSH工具可能无法连接&#xff0c;建议改用Xshell7或SecureCRT9.0以上版本。 二、注意事项 1、 …

2023最新版 Navicat 16.2.3安装和试用教程详解:轻松掌握最新版本的数据库管理工具连接Redis

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

kettle开发-Day40-AI分流之case/switch

前言&#xff1a; 前面我们讲到了很多关于数据流的AI方面的介绍&#xff0c;包括自定义组件和算力提升这块的&#xff0c;今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时&#xff0c;我们需要在…

计算机网络 day6

目录 arp协议 arp病毒\欺骗 arp病毒的运行原理 arp病毒产生的后果&#xff1a; 解决方法&#xff1a; ICMP协议 ICMP用在哪里&#xff1f; ICMP协议数据的封装过程 ​编辑 为什么icmp协议封装好数据后&#xff0c;还要加一个ip包头&#xff0c;再使用ip协议再次进…

【UE4 C++】08-生成抛射物来模拟攻击效果

步骤 新建一个C类&#xff0c;父类为Actor&#xff0c;命名为“ASMagicProjectile” 在“ASMagicProjectile.h”中添加如下代码&#xff1a; 在“ASMagicProjectile.cpp”中添加如下代码&#xff1a; 编译后在虚幻编辑器中新建一个蓝图&#xff0c;选择父类为我们刚创建的C类…

vscode插件开发之终端那些事儿

在开发vscode插件的时候&#xff0c;好几个设计都需要集成终端。 查资料后发现vsocd为开发者提供了丰富的终端API。 结合我自己的需求来展开终端的那些事儿吧&#xff1a; 从treeview中点击触发打开一个终端 无关的代码省略&#xff1a; vscode.window.createTerminal({name…

python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试&#xff0c;手动测试大家再熟悉不过了&#xff0c;那如何进行自动化登录测试呢&#xff01;本文就基于pythonselenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试&#xff0c;可提供点参考&#xff01;下面就包括测试代…

有没有好的PC端和移动端都能用的便签app?

生活在快节奏的社会环境中&#xff0c;我们每天都要面对大量的事务。为了更好地管理任务和时间&#xff0c;便签app成为了越来越多人选择的工具。因为&#xff0c;便签app不仅能帮助我们记录并安排日常事务&#xff0c;还可以设置提醒事项&#xff0c;准时发送提醒通知告诉我们…

数学建模——插值算法

概念&#xff1a;数模比赛中&#xff0c;常常需要根据有已知的函数点进行数、模型处理和分析&#xff0c;而有时候现有的数据是极少的&#xff0c;不足以支撑分析的进行&#xff0c;这时就需要使用一些数学的方法&#xff0c;“模拟产生“一些新的但又比较靠谱的值来满足需求&a…

为什么很多人说不建议学JAVA,说很难找到工作?

前言 在回答这个问题之前&#xff0c;我曾经也看到了类似的其他语言相关的问题&#xff1a; 那么现在问题来了&#xff0c;什么语言都不建议学&#xff0c;那什么是可以学的呢&#xff1f;看多了所谓的不建议学习的文章和回答固然可以了解到该语言的些许缺点和当前环境下的一些…

NTLM协议

0x01 LM Hash加密算法 LM Hash本质是一个DES加密&#xff0c;从Windows Vista和Windows Server 2008开始就禁用了LM Hash。LM Hash明文密码被限定在14位以内&#xff0c;密码超过14位则会停止使用LM Hash。下面介绍一下LM Hash的加密流程&#xff0c;以Pss1234为例&#xff1a…

Element-Plus搭建CMS页面结构 引入第三方图标库iconfont(详细)

Element-Plus组件库使用 element plus组件库是由饿了么前端团队专门针对vue框架开发的组件库&#xff0c;专门用于电脑端网页的。因为里面集成了很多组件&#xff0c;所以使用他可以非常快速的帮我们实现网站的开发。 安装&#xff1a; npm install element-plus --save 引入…

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了&#xff0c;使用离线安装包就需要自己手动制作一个&#xff1b; 以vs2019为例&#xff1a; 先去官网下载在线安装器 官网下载地址&#xff1a;Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…

表格tr根据内容撑开高度并且每个td继承tr的高度(height:inherit,align-items: stretch)

项目设计图 实际上数据又长又短&#xff0c;例如类型有可能出现2行甚至3行的字数&#xff0c;所以整个行要适配最高的高度&#xff0c;然后其他子元素继承行的高度。 ps&#xff1a;原生的table或者uview的u-table都不怎么好使&#xff0c;所以用view来做 在做的过程中出现高度…

澎湃认证:浪潮信息携手可利邦推出隐私计算一体机解决方案

北京可利邦与浪潮信息联合发布隐私计算一体机解决方案&#xff0c;以浪潮信息inMerge超融合产品为基础设施平台&#xff0c;预装可利邦隐私计算软件平台&#xff0c;通过SRDC一体机进行整机柜交付&#xff0c;助力客户快速上线隐私计算应用系统。该方案已通过浪潮信息澎湃技术认…

Node连接Mongodb数据库

1.初始化 npm init 2.安装mongoose npm i mongoose 3.导入mongoose const mongooserequire("mongoose") 4.连接mongodb服务 mongoose.connect("mongodb://127.0.0.1:27017/user") 说明&#xff1a;mongodb是协议,user是数据库&#xff0c;如果没有会自动创…

Oracle通过函数调用dblink同步表数据方案(全量/增量)

创建对应的包&#xff0c;以方便触发调用 /*包声明*/ CREATE OR REPLACE PACKAGE yjb.pkg_scene_job AS /*创建同步任务*/FUNCTION F_SYNC_DRUG_STOCK RETURN NUMBER;/*同步*/PROCEDURE PRC_SYNC_DRUG_STOCK(RUNJOB VARCHAR2) ; END pkg_scene_job; /*包体*/ CREATE OR REPL…