精华内容
下载资源
问答
  • 常见的视图方式有几种
    千次阅读
    2017-03-26 13:57:15

    如果说UML是一种语言,那么UML的基本词汇包括参与者、用例、边界、类、包、组件、节点等,而UML视图便是其语法,将基本元素组织起来,形成有意义的句子。如果说UML是一种语言,那么其最大的特征就是可视化,一种可视化语言,几种不同的视图从不同的角度展示了软件产品的方方面面的特征。UML视图分为两类,静态视图和动态视图,静态视图包括用例图、类图和包图,描述结构型特征,决定了能做什么,动态视图包括活动图、状态图、时序图和协作图,不能够独立存在,必须特制一个静态视图或UML元素,描述了行为型特征,决定了怎么做,下面从静态视图的用例图开始说起。

    1、用例图

    用例图采用参与者和用例作为基本元素,以不同的视角展现系统的功能性需求。用例图是了解系统的第一个关口,人们通过用例图得知一个系统将会做什么。对客户来说,用例图是它们业务领域的逻辑化表达,对建设单位来说,用例图是系统蓝图和开发的依据。业务用例图是一种用例图,使用业务主角和业务用例展现业务建模的结果,展现了业务系统的功能性需求,如果要描述这些需求的实现途径,则需要借助于业务用例实现图,后者体现了软件工程中需求可追溯的原则。通常来说,即使只有一种实现途径,绘制业务用例实现图也是一种好的建模方法,当有多个实现途径时,如果我们用业务对象和业务过程进行分析,就会发现其中有复用的对象和重叠的过程,这时可以用概念实例图,以业务实例为基本单元,用于展现业务用例分解而来的几个概念用例,它们的关系可能是扩展、包含或精化。概念用例图虽不是必须的,但对于一个复杂的业务用例来说,有助于我们的理解。与业务用例图对应的还有个系统用例图,前者是从用户的角度出发的,后者则是从计算机系统的角度考虑的,同理还有个系统用例是下图。

    2、类图

    类图用于展示系统中的类及其相互之间的关系,本质上说,类图是现实世界问题领域的抽象对象的结构化、概念化、逻辑化描述,包括三个层次,从概念层到说明层,再到实现层,随着抽象层次逐步降低而逐步细化。在概念层上,类图着重于对问题领域的概念化理解,而不是实现,因此类名称都是问题领域实际事物的名称,独立于实现语言和实现方式。说明层类图表达的类和类关系应当是对问题领域在接口层次抽象的描述,通常都非常粗略,虽然表达了计算机的观点,但是在描述上却采用了近似现实世界的语言,以保证从现实世界到代码实现的过渡。实现层类图中的类直接映射到可执行代码,明确采用哪种实现语言、什么设计模式、什么通信标准、遵循什么规范等。

    3、包图

    包图一般用来展示高层次的观点,范围较广,或者可以理解为是一种容器,包装其它范围较小的元素。

    4、活动图

    活动图描述了为了完成某一个目标需要做的活动以及这些活动的执行顺序,实际上描述的是业务流程,是一种过程化的分析方法,UML中由两个层面的活动图,一种用于描述用例场景,另一种用于描述对象交互。活动用例图是最经常使用的,用例表达了参与者的一个目标,用例场景则描述了如何来达到这个目标,活动图用来描述用例场景,也就是通常所说的业务流程。对象活动图用于展示对象的交互。活动图描述了业务流程中活动的执行顺序,却没有描述出谁来执行这些活动,即执行业务流程的职责被遗漏了,在面向过程的分析观点里,对象职责是不重要的,重要的是业务的执行过程,而在面向对象的分析里则与之相反,业务的执行过程不是重要的,对象职责才是最重要的,于是引入了泳道技术,就像一个游泳运动员只能在一个泳道里进行比赛一样,一个对象也只能在一个业务流程中担任一个或一类职责,多多少少解决了活动图不能描述对象职责的遗憾。

    5、状态图

    状态图显示一个状态机,状态机用于对模型元素的动态行为进行建模,更具体地说,就是对系统行为中受时间驱动的方面进行建模。通常使用状态图来说明业务角色或业务实体可能的状态,即导致状态转换的事件和状态转换引起的操作。状态图常常会简化对类的设计的确认。对于类的对象所有可能的状态,状态图都显示它可能接受的消息、将执行的操作和在此之后类的对象所处的状态。需要注意的是,状态图通常只用于描述单个对象的行为,如果要描述对象间的交互,最好采用时序图或协作图。

    6、时序图

    时序图用于描述按时间顺序排列的对象之间的交互模式,按照参与交互的对象所具有的生命线和它们相互发送的消息来显示这些对象。通常我们使用时序图来描述用例实现,通过贡献该用例实现的对象之间的交互来说明用例是如何被对象实现的。使用时序图来描述用例实现是一种从现实世界到对象世界的映射方法,它对我们确定对象职责和接口有着显著的作用,而对象的核心就是职责和接口。时序图和协作图是可以相互转换的,与协作图不同的是,时序图强调消息事件的发生顺序,更方便于阐述事件流的过程,但是时序图却难以表达对象之间关系。

    7、协作图

    协作图描述了对象之间交互的一种模式,通过对象之间的连接和它们相互发送的消息来显示参与交互的对象,与时序图不的是,协作图因为展示了对象间的关系,使得它更容易获得对对象结构的理解,而时序图更适用于获得对于调用过程的理解。

    更多相关内容
  • 这不,今天和大家分享下关于 react 驱动 ui 更新的几种方式,都说 react 是单向数据流,数据驱动 ui,那么你知道在 react 中有几种驱动视图更新的方式呢。 1. setState setState 是众所周知最常见的更新视图方式了...

    前言

    刚为祖国母亲庆完生,眼看假余额就要不足了,小伙伴们玩的是否开心呢,反正我是死宅在家,没出去玩,在家也没好好学习,实属惭愧。这不,今天和大家分享下关于 react 驱动 ui 更新的几种方式,都说 react 是单向数据流,数据驱动 ui,那么你知道在 react 中有几种驱动视图更新的方式呢。

    1. setState

    setState 是众所周知最常见的更新视图的方式了,只需要给个初始 state,需要更新的时候调用 this.setState, 组件会经历 shoudlComponentUpdate => componentWillUpdate => render => componentDidUpdate 四个过程,如果没有在 shouldComponentUpdate 中手动 return false 的情况下,那么 ui 此时就会更新。

    需要注意的是,尽管 this.setState({}) 参数为空对象时,react 一样会更新,调用上面的四个生命周期,只是 ui 视图不有会变化。

    当然这些都要基于 class 组件,因为 setState 是 Component 原型上的方法,必须得是继承 Component的组件才能调用 this.setState。(之前有写过一篇关于setState的文章,感兴趣的大佬也可以去看看。)

    2. forceUpdate

    Calling forceUpdate() will cause render() to be called on the component, skipping shouldComponentUpdate(). This will trigger the normal lifecycle methods for child components, including the shouldComponentUpdate() method of each child. React will still only update the DOM if the markup changes.

    官方说的比较清楚,调用 forceUpdate 后当前组件会跳过 shouldComponentUpdate 这个钩子,尽管手动 return false,也一样会更新,单词字面理解也是强制更新,但是需要注意的是,子组件的更新还是会受到 shouldComponentUpdate 控制。

    Normally you should try to avoid all uses of forceUpdate() and only read from this.props and this.state in render().

    forceUpdate的使用场景一般是视图更新来源于其他非 state、props的数据,比如绑定在 组件实例上的属性,或者是直接修改 this.state.xxx = xxx ,然后调用 this.forceUpdate(),不过官方不建议这么做,正常情况下应该避免使用 forceUpdate,通过 state 或者 props 去更新视图。

    3. 原生操作dom

    在 react 中难免会有操作原生 dom 的时候,比如你用了第三方比如 jquery 这种需要获取 dom 的库,或者你需要实现一个拖拽,双指缩放的组件,对于这些,你也许可以用操作的 dom 的方式绕过 react 的 setState 再到 dom diff 一系列的计算,直接更新 dom ,提高些许性能。

    以上三种更新 ui 的方式,我这边有个Demo, 需要注意的是,当通过 setState 更新改变颜色变红,在点击原生 dom 按钮改变颜色变绿,这时在点击 setState 的按钮,发现视图不更新,但是还是走了 render 函数,这是因为点击原生 dom 按钮前, this.state.backgroundColor 值是 red,原生操作是直接改变的 dom style,在点回 setState 按钮,其实 this.state.backgroundColor的值还是 red, 虽然走了更新逻辑,但是由于 react 的 新老 virtual dom 对比的时候,发现颜色并没改变, 导致没有 patch 到 ui 上

    4. dispatch action

    上面的几种方式都是通过 react 本身自带的 state 去更新 ui, 当项目中使用 redux 时, 我们一般会通过 dispach 一个 action, 改变 store,然后更新 ui,dispatch action 是通过改变 props 去驱动视图的,大家在使用的时候有没有想过为什么 this.props.dispatch({ type: 'xxx' }), 就可以驱动 ui 视图更新呢?

    这边简单的讲下,当我们dispatch 一个 action 的时候, 调用的其实是 store.dispatch,这个都没问题,store.dispatch 会去跑一遍所有注册在 createStore 中的 reducer, 找到对应的 type 更新数据,返回一个新的 state。

    而我们的组件想拿到 store 的数据必须通过 connect(mapStateToProps, mapDispatchToProps)(App) 像这样,react-redux 中的 Connect 组件会在 componengDidMount 的时候去 调用 一个 trySubscribe 的方法,其内部调用 store.subscribe 去订阅一个 handleChange 的方法。

    所以当你 dispatch action 的时候,就会触发 Connect 组件中的方法, Connect 组件中也维护了一个叫做 storeState 的 state,每次拿到新的 sotre 就去调用 setState, 触发 render 函数, render 函数会根据你 connect 中传入的 mapStateToProps, mapDispatchToProps,包括可选参数 mergeProps, 去做一个 props 的合并动作, 最终在 Connect 组件内部 return 出来一个 createElement(WrappedComponent,this.mergedProps) 这样的东西,而 createElement 第二个参数就是你组件的 props, 那么每次 props 变了,就会驱动视图的更新。这就是 Redux 其中的中做原理,当然这边描述的比较简短, 下次单独写一篇关于 react、 redux、 react-redux 的文章。

    总结

    1. 通过调用 this.setState 改变 state 驱动视图。
    2. 通过调用 this.forceUpdate 强制更新视图。
    3. 通过操作原生 dom 更新视图。
    4. 通过改变 props 驱动视图(redux 或者 修改父子组件传递 props )。
    展开全文
  • iOS界面布局的几种方式

    千次阅读 2021-01-06 09:10:10
    一、这是最简单的布局方式,在UI控件初始化时通过- (void)initWithFrame进行设置,或者在init之后在进行设置 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view...

    iOS界面布局之一——使用代码进行布局

    一、这是最简单的布局方式,在UI控件初始化时通过- (void)initWithFrame进行设置,或者在init之后在进行设置

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        UIView * view1 = [[UIView alloc]initWithFrame:CGRectMake(20, 40, 200, 200)];
        view1.backgroundColor=[UIColor redColor];
        UIView * view2 = [[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];
        view2.backgroundColor=[UIColor greenColor];
        [view1 addSubview:view2];
        [self.view addSubview:view1];
    }

    效果是这样的(大家也应该能想的出来)

    当然了,这种情况下我们应该怎样做适配呢,在autoLayout没有出现之前,Apple提供的方法主要是autoresizing(在现在的xib/storyBoard里也能找到相应的设置)。

    typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
        UIViewAutoresizingNone                 = 0,//默认
        UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,//与父视图右边间距固定,左边可变
        UIViewAutoresizingFlexibleWidth        = 1 << 1,//视图宽度可变
        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,//与父视图左边间距固定,右边可变
        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,//与父视图下边间距固定,上边可变
        UIViewAutoresizingFlexibleHeight       = 1 << 4,//视图高度可变
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5//与父视图上边间距固定,下边可变
    };

    二、使用AutoLayout进行页面布局

    AutoLayout是Apple在iOS6之后提出的概念,和之前的autoresizing相比功能更加强大,也是Apple为了适配更多屏幕给出的解决方案,但是当时使用的人不是很多。在iOS7之后,AutoLayout更加完善,也逐渐被大家广为使用,现在,随着iPhone6,6Plus,7,7Plus的推出,AutoLayout布局方式也是大家的首选布局方式。

    AutoLayout主要是通过原生枚举和一些属性设置来创建NSLayoutConstraint对象,主要使用NSLayoutConstraint类的如下方法:

    +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

    下面给大家看一下原生的AutoLayout布局代码

    UILabel * label = [[UILabel alloc]init];
        //使用代码布局 需要将这个属性设置为NO
        label.translatesAutoresizingMaskIntoConstraints = NO;
        label.backgroundColor = [UIColor redColor];
        //创建x居中的约束
        NSLayoutConstraint * constraintx = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
        //创建y居中的约束
        NSLayoutConstraint * constrainty = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];
        //创建宽度约束
        NSLayoutConstraint * constraintw = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100];
        //创建高度约束
        NSLayoutConstraint * constrainth = [NSLayoutConstraint constraintWithItem:label attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100];
        //添加约束之前,必须将视图加在父视图上
        [self.view addSubview:label];
        [self.view addConstraints:@[constraintx,constrainty,constrainth,constraintw]];

    view:要添加约束的视图对象。
    attr:要约束的对象属性,这个就是一些枚举,如

    typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
        NSLayoutAttributeLeft = 1,//左
        NSLayoutAttributeRight,//右
        NSLayoutAttributeTop,//上
        NSLayoutAttributeBottom,//下
        NSLayoutAttributeLeading,//起始边,类似左,只在某些从右向左排列的语言中和NSLayoutAttributeLeft有大区别
        NSLayoutAttributeTrailing,//结束边
        NSLayoutAttributeWidth,//宽度
        NSLayoutAttributeHeight,//高度
        NSLayoutAttributeCenterX,//x中心
        NSLayoutAttributeCenterY,//y中心
        NSLayoutAttributeBaseline,//基线
        NSLayoutAttributeLastBaseline = NSLayoutAttributeBaseline,
        NSLayoutAttributeFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0),
    
        //下面的属性是设置的边距 意义和上面类似 对应左,右等边距
        NSLayoutAttributeLeftMargin NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeRightMargin NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeLeadingMargin NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeTrailingMargin NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeCenterXWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
        NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
        //无,后面会说应用场景
        NSLayoutAttributeNotAnAttribute = 0
    };

    大家可以看的出来,AutoLayout的原生代码是不是看着有点长(或者直接说有段乱),一眼根本看不出来当前的视图是加了哪些约束,哪种约束,何况在实际开发中,这样的代码我们可能会写很多很多。

    所以,有一位国外的大神觉得这样写布局有点太难受了,根本不能给程序员最完美的体验,所以他决定自己写一个AutoLayout布局库,不仅让大家在几行代码下就能完成对UI控件的约束,而且还要简单易读,并且功能强大,之后——-一个在iOS开发界无人不知无人不晓的名字出现了,Masonry。

    Masonry布局库轻量、简便、功能强大,可以满足任意布局的开发,而且到现在也一直在维护。

    下面给大家看看代码:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        UILabel * label = [[UILabel alloc]init];
        [self.view addSubview:label];
        [label mas_makeConstraints:^(MASConstraintMaker *make) {
            make.center.equalTo(self.view);
            make.height.equalTo(@50);
            make.width.equalTo(@50);
        }];
        label.backgroundColor = [UIColor redColor];
    }

    大家看见了吗,你只需要在block里写上三局代码就可以是当前的label居中,设置宽度高度,并且一眼就能看出来你给的约束是什么,是给谁的约束。在开发中,我们需要删减约束,重置约束,更新约束等,这些在Masonry布局库中都有体现,也同样是非常简洁明了。

    更新约束

    [label mas_updateConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(@100);
            make.width.equalTo(@100);
        }];

    重置约束

    [label mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.view.mas_left).offset(10);
            make.top.equalTo(self.view.mas_top).offset(100);
            make.height.equalTo(@100);
            make.width.equalTo(@100);
        }];

    在添加具体约束的时候,我们不仅可以设置约束值的绝对相等关系,还可以设置一些值域的关系,具体如下:

    //绝对相等
    - (MASConstraint * (^)(id attr))equalTo;
    //大于等于
    - (MASConstraint * (^)(id attr))greaterThanOrEqualTo;
    //小于等于
    - (MASConstraint * (^)(id attr))lessThanOrEqualTo;

    优先级

    //手动设置一个优先级参数
    - (MASConstraint * (^)(MASLayoutPriority priority))priority;
    //优先级低
    - (MASConstraint * (^)())priorityLow;
    //优先级中等
    - (MASConstraint * (^)())priorityMedium;
    //优先级高
    - (MASConstraint * (^)())priorityHigh;

    运用中代码如下

    [label mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.view.mas_left).offset(10);
            make.top.equalTo(self.view.mas_top).offset(100);
            make.height.equalTo(@100).priority(1000);
            make.width.equalTo(@100).priorityHigh();
        }];

    在Masonry的使用中,介绍几个容易出问题的地方
    1、首先为控件添加约束时,一定要先添加到父视图上,否则程序会崩溃。
    2、在平时的使用中,Masonry中设置左边约束时,一般有make.left.equalTo(self.view.mas_left).offset(10);
    或者make.leading.equalTo(self.view.mas_leading).offset(10);
    同样右边约束时,有make.right.equalTo(self.view.mas_right).offset(10);
    和make.trailing.equalTo(self.view.mas_trailng).offset(10);

    有一点需要记住,在使用leading的时候对应的设置右边约束时一定要使用trailing,同样在使用left时,也要使用right来设置右边约束,相反也是一样,否则程序会进入崩溃,而且异常断点进入的地方也不会显示这个问题,很难发现是这个问题。

    展开全文
  • 用Python演绎5种常见可视化视图

    千次阅读 2020-06-14 10:00:00
    作者:妄心xyx来源:简书用Python演绎5常见可视化视图通过本篇文章,你将学到:视图的分类,从哪些维度进行分类5种常见视图的概念,以及如何在Python中进行使用,都需要用到哪些函...

    作者:妄心xyx

    来源:简书

    用Python演绎5种常见可视化视图

    通过本篇文章,你将学到:

    • 视图的分类,从哪些维度进行分类

    • 5种常见视图的概念,以及如何在Python中进行使用,都需要用到哪些函数。

    注意:想要更深层次的理解,需要自己动手跑代码,体验数据可视化过程

    今天我来给你讲讲Python的可视化技术。

    如果你想要用Python进行数据分析,就需要在项目初期开始进行探索性的数据分析,这样方便你对数据有一定的了解。其中最直观的就是采用数据可视化技术,这样,数据不仅一目了然,而且更容易被解读。同样在数据分析得到结果之后,我们还需要用到可视化技术,把最终的结果呈现出来。

    可视化视图有哪些?

    按照数据之间的关系,我们可以把可视化视图划分为4类,它们分别是比较、联系、构成和分布。我来简单介绍下这四种关系的特点:

    • 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图。

    • 联系:查看两个或两个以上变量之间的关系,比如散点图。

    • 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图。

    • 分布:关注单个变量,或者多个变量的分布情况,比如直方图。

    同样,按照变量的个数,我们可以把可视化视图划分为单变量分析和多变量分析。

    • 单变量分析指的是一次只关注一个变量。比如我们只关注“身高”这个变量,来看身高的取值分布,而暂时忽略其他变量。

    • 多变量分析可以让你在一张图上可以查看两个以上变量的关系。比如“身高”和“年龄”,你可以理解是同一个人的两个参数,这样在同一张图中可以看到每个人的“身高”和“年龄”的取值,从而分析出来这两个变量之间是否存在某种联系。

    常见视图

    可视化的视图可以说是分门别类,多种多样,今天我主要介绍常用的5种视图,包括了散点图、折线图、直方图、热力图、成对关系。

    1.散点图

    散点图的英文叫做scatter plot,它将两个变量的值显示在二维坐标中,非常适合展示两个变量之间的关系。当然,除了二维的散点图,我们还有三维的散点图。

    在Matplotlib中,我们经常会用到pyplot这个工具包,它包括了很多绘图函数,类似Matlab的绘图框架。在使用前你需要进行引用:

    import matplotlib.pyplot as plt
    

    在工具包引用后,画散点图,需要使用plt.scatter(x, y, marker=None)函数。x、y 是坐标,marker代表了标记的符号。比如“x”、“>”或者“o”。选择不同的marker,呈现出来的符号样式也会不同,你可以自己试一下。

    下面三张图分别对应“x”“>”和“o”。

    除了Matplotlib外,你也可以使用Seaborn进行散点图的绘制。在使用Seaborn前,也需要进行包引用:

    import seaborn as sns
    

    在引用seaborn工具包之后,就可以使用seaborn工具包的函数了。如果想要做散点图,可以直接使用sns.jointplot(x, y, data=None, kind='scatter')函数。其中x、y是data中的下标。data就是我们要传入的数据,一般是DataFrame类型。kind这类我们取scatter,代表散点的意思。当然kind还可以取其他值,这个我在后面的视图中会讲到,不同的kind代表不同的视图绘制方式。

    好了,让我们来模拟下,假设我们的数据是随机的1000个点。

    我们运行一下这个代码,就可以看到下面的视图(第一张图为Matplotlib绘制的,第二张图为Seaborn绘制的)。其实你能看到Matplotlib和Seaborn的视图呈现还是有差别的。Matplotlib默认情况下呈现出来的是个长方形。而Seaborn呈现的是个正方形,而且不仅显示出了散点图,还给了这两个变量的分布情况。

    Matplotlib绘制:

    Seaborn绘制:

    2.折线图

    折线图可以用来表示数据随着时间变化的趋势。

    在Matplotlib中,我们可以直接使用plt.plot()函数,当然需要提前把数据按照X轴的大小进行排序,要不画出来的折线图就无法按照X轴递增的顺序展示。

    在Seaborn中,我们使用sns.lineplot (x, y, data=None)函数。其中x、y是data中的下标。data就是我们要传入的数据,一般是DataFrame类型。

    这里我们设置了x、y的数组。x数组代表时间(年),y数组我们随便设置几个取值。下面是详细的代码。

    然后我们分别用Matplotlib和Seaborn进行画图,可以得到下面的图示。你可以看出这两个图示的结果是完全一样的,只是在seaborn中标记了x和y轴的含义。

    3.直方图

    直方图是比较常见的视图,它是把横坐标等分成了一定数量的小区间,这个小区间也叫作“箱子”,然后在每个“箱子”内用矩形条(bars)展示该箱子的箱子数(也就是y值),这样就完成了对数据集的直方图分布的可视化。

    在Matplotlib中,我们使用plt.hist(x, bins=10)函数,其中参数x是一维数组,bins代表直方图中的箱子数量,默认是10。

    在Seaborn中,我们使用sns.distplot(x, bins=10, kde=True)函数。其中参数x是一维数组,bins代表直方图中的箱子数量,kde代表显示核密度估计,默认是True,我们也可以把kde设置为False,不进行显示。核密度估计是通过核函数帮我们来估计概率密度的方法。

    这是一段绘制直方图的代码。

    我们创建一个随机的一维数组,然后分别用Matplotlib和Seaborn进行直方图的显示,结果如下,你可以看出,没有任何差别,其中最后一张图就是kde默认为Ture时的显示情况。

    4.热力图

    热力图,英文叫heat map,是一种矩阵表示方法,其中矩阵中的元素值用颜色来代表,不同的颜色代表不同大小的值。通过颜色就能直观地知道某个位置上数值的大小。另外你也可以将这个位置上的颜色,与数据集中的其他位置颜色进行比较。

    热力图是一种非常直观的多元变量分析方法。

    我们一般使用Seaborn中的sns.heatmap(data)函数,其中data代表需要绘制的热力图数据。

    这里我们使用Seaborn中自带的数据集flights,该数据集记录了1949年到1960年期间,每个月的航班乘客的数量。

    通过seaborn的heatmap函数,我们可以观察到不同年份,不同月份的乘客数量变化情况,其中颜色越浅的代表乘客数量越多,如下图所示:

    5.成对关系

    如果想要探索数据集中的多个成对双变量的分布,可以直接采用sns.pairplot()函数。它会同时展示出DataFrame中每对变量的关系,另外在对角线上,你能看到每个变量自身作为单变量的分布情况。它可以说是探索性分析中的常用函数,可以很快帮我们理解变量对之间的关系。

    pairplot函数的使用,就好像我们对DataFrame使用describe()函数一样方便,是数据探索中的常用函数。

    这里我们使用Seaborn中自带的iris数据集,这个数据集也叫鸢尾花数据集。鸢尾花可以分成Setosa、Versicolour和Virginica三个品种,在这个数据集中,针对每一个品种,都有50个数据,每个数据中包括了4个属性,分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。通过这些数据,需要你来预测鸢尾花卉属于三个品种中的哪一种。

    这里我们用seaborn中的pairplot函数来对数据集中的多个双变量的关系进行探索,如下图所示。从图上你能看出,一共有sepal_length、sepal_width、petal_length和petal_width4个变量,它们分别是花萼长度、花萼宽度、花瓣长度和花瓣宽度。

    下面这张图相当于这4个变量两两之间的关系。比如矩阵中的第一张图代表的就是花萼长度自身的分布图,它右侧的这张图代表的是花萼长度与花萼宽度这两个变量之间的关系。

    End.

    作者:妄心xyx

    来源:简书

    本文为转载分享,如有侵权请联系后台删除

    ---------End---------

    关注后回复“w”,加我私人微信


    分享”和“在看”是更好的支持!

    展开全文
  • H3C常见视图及命令

    千次阅读 2017-09-23 10:33:00
    H3C常见视图及命令 H3C Comware的视图模式 1.用户视图:查看系统的硬件和系统的信息 2.系统视图(类似于Cisco的配置模式) 3.路由协议视图 4.接口视图 5.用户界面视图 各种视图之间的关系 命令级别 H3C...
  • 5架构视图

    万次阅读 2019-03-06 16:29:37
    很少人对“架构”全面的了解和认识能并说清楚架构是什么,更谈不上掌握了。事实上,也只有极少数人能成为或者被冠以“架构师”这样的title。为此,笔者总结了对架构的一些理解,希望能够补充很多初入门的人在这...
  • 种常见磁盘阵列设置

    千次阅读 2021-07-31 03:49:11
    1.安装好所有的硬盘后,开启系统。2.在POST过程中,出现以下画面时,请按。注:按下可进入Preboot CLI:此...如下图:为物理视图(Physical View)画面,显示了连接到控制器的硬盘。若要将连接到控制器的存储设备在物理...
  •  在最上一层,视图被划分为三个视图域:结构,动态行为,模型管理。 结构主要描述了系统中的结构成员及其相互关系。结构元素包括类,用例,构件和节点。结构元素为研究系统的动态行为奠定了...
  • 几种常见的数据分区方法

    千次阅读 2020-05-18 20:00:00
    数据分区方法 数据的分区方法(Partitioning methods)大概以下几种: •垂直分区(Vertical partitioning)•水平分区(Horizontal partitioning)•混合分区(Hybrid partitioning) 垂直分区(Vertical ...
  • PostgreSQL的几种常见问题和解决方法

    千次阅读 2021-08-19 10:27:13
    PostgreSQL的几种常见问题和解决方法 ** 1. 前言 1.1 概述 本文介绍了postgresql的几种常见问题,并从现象出发,逐步排查问题,分析导致问题的原因并给出解决方案。 本文介绍的问题分为两大类:一类是关于...
  • 数据库视图 sql

    千次阅读 2021-01-28 08:08:21
    数据库必知词汇:数据库视图视图是从一个或个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,...
  • SpringMVC-方法四种类型返回值总结,你用过几种

    千次阅读 多人点赞 2019-05-06 08:35:59
    今天松哥就来和大家聊一聊 SpringMVC 中四不同类型的返回值,看看没有 get 到你的知识盲点? 1. ModelAndView 以前前后端不分的情况下,ModelAndView 应该是最最常见的返回值类型了,现在前后端分离后,后端都是...
  • 面试中css常见几种问题。

    千次阅读 2018-05-15 14:58:09
    2016年毕业,计算机行业,接触前端是2014 年吧,要说总结,真的是除了在学校里做的个本的笔记外就没有了啦。从事前端工作两年多了,一点总结都没有,也是一直处于原生开发,react和vue的文档看了又看,却一直没有...
  • web前端开发之几种布局方式之响应式布局

    万次阅读 多人点赞 2016-10-09 10:55:22
    一理解几种布局的概念 1、静态布局(Static Layout) 即传统Web设计,对于PC设计一个Layout,在屏幕宽高调整时,使用横向和竖向的滚动条来查阅被遮掩部分;  意思就是不管浏览器尺寸具体是多少,网页布局就...
  • Vue 组件间通信几种方式(完整版)

    千次阅读 多人点赞 2019-05-27 17:36:12
    一般来说,组件可以以下几种关系: 如上图所示,A 和 B、B 和 C、B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代)。 针对不同的使用场景,如何选择行之有效的通信方式?这是我们所...
  • Vue组件通信的六种方式

    千次阅读 2022-02-02 11:32:59
    一般来说,组件可以以下几种关系: 如上图所示,A 和 B、B 和 C、B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代)。 针对不同的使用场景,如何选择行之有效的通信方式?这是我们所...
  • Vue组件间通信的8种方式

    千次阅读 2022-02-10 01:02:35
    1.常用的父子组件通讯方式:props,emit 父组件传入属性,子组件通过props来接收,在子组件中就可以用this.xxx方式使用。 子组件通过$emit(事件名,参数)向外弹出一个自定义事件,在父组件中的属性监听事件,可以...
  • 视图用来向用户展示模型中的数据,依赖于模型而存在,决定了相关页面数据的展现方式常见的的视图包括:tree、form、search、kanban、graph等,企业版支持更多的视图形式,如:gantt、 dashboard等 2.视图的声明...
  • 几种常见设计模式的理解

    千次阅读 2015-08-31 10:58:49
    几种常见设计模式的理解 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 最早提出“设计模式”概念的...
  • 一、简介:  架构模式是一个通用的...是软件工程中的一软件架构模式,把软件系统分为三个基本部分:  模型(Model):负责存储系统的中心数据。  视图(View):将信息显示给用户(可以定义多个视图)。  ...
  • 所以我们要通过其他方式来动态改变ui视图,1、runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要用getActivity.runOnUiThread开启线程 这种方法最简单,方便更新一些不需要判断的...
  • 时间序列--可视化的几种方式

    千次阅读 2018-12-27 09:34:15
    除了最常见的,还可以设置分组,比如 from pandas import Series from pandas import DataFrame from pandas import TimeGrouper from matplotlib import pyplot series = Series.from_csv('daily-minimum-...
  • ListView列表视图控件

    千次阅读 2016-01-22 17:23:05
    ListView列表视图控件通常用于显示数据,用户可以对这些数据和显示方式进行某些控制。还可以把包含在控件中的数据显示为列和行(像网格一样),或者显示为一列,或者显示为图标表示。 其实列表视图控件的作用,就像...
  • 生成json的几种方式

    千次阅读 2019-09-03 10:12:00
    大家好,我是IT修真院武汉分院第17期的学员汪天驰,一枚正直纯洁善良的java程序员,今天给大家分享一下,修真院官网java任务2,深度思考中的知识点——生成json的几种方式 (1)背景介绍: JSON(JavaScript Objec.....
  • 1.1. ClickHouseSQL之数据定义语言 DDL本节介绍 ClickHouse 中进行数据库、表结构的定义和管理。1.1.1.概述在SQL中,数据定义语言( DDL ) 用来创建和修改数据库Schema,例如表、索引和用户等。...常见DDL 语句包括...
  • 面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对...Soa的开发方法一般主要开源的dubbo、dubbox、mule、wso2、cxf,以及付费的oracle soa、ibm soa等。 SOA是一粗粒度、松耦合服...
  • Java中遍历Map的几种方式

    千次阅读 2017-12-06 11:20:46
    Map中取值的三种常见方法: Map中提供给了一些常用方法,如keySet()、value()、entrySet()用于取出元素 keySet()方法:返回此映射中所包含的键的 set 视图(集合) public SetK> keySet() value()方法:返回此...
  • 文章目录6.1 理解视图解析6.2 创建JSP视图6.3 小结 本章内容: 将模型数据渲染为HTML 使用JSP视图 通过tiles定义视图布局 使用Thymeleaf视图 在《Spring实战》的书中是包括6.3 使用Apache Tiles视图定义布局和6.4 ...
  • View布局的显示方式有几种?2. RelativeLayout的属性3. Design Support Library4. view系统架构 1. View布局的显示方式有几种? 1.1 线性布局(LinearLayout):就是一个ViewGroup以线性方向显示它的子视图...
  • 几种常见的python的Web框架比较

    千次阅读 2019-07-23 15:11:25
    Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。Django本身是一个高级别的PythonWeb框架,它鼓励快速开发和干净、实用的设计。它是由经验丰富的开发人员构建的,它处理了Web开发中的许多麻烦,因此您可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,726
精华内容 45,090
热门标签
关键字:

常见的视图方式有几种