Figure解析

“PDFMV框架是问题-数据-特征-模型-价值五个英文字母的首字母组合而成,它是以问题为导向,数据为驱动,利用特征和模型从数据中学习到知识,以创造价值的系统化过程。”

1 图形解析

一个图形包括哪些元素呢?图1,图形的解析,展示构成一个Figure的一些matplotlib元素名称。我们可以使用matplotlib库实现对各个元素的设计和管理

图1 一个Figure的解析

2 matplot库画图的各个元素

  • 1:Figure Figure包括图形的所有元素,这些图形的元素都可以做定制化。
  • 2:Axes Axes是figure的sub-section。一个figure可以包括多个Axes,每个Axes可以表示多个graphs。图1中,一个Axes,包括两个线图。
  • 3:Axis Axis是axes的一个元素,二维空间有x轴和y轴,三维空间有x轴,y轴和z轴。
  • 4:Label 标记,用于对坐标轴,图形进行解释,让图形的意思更明了。
  • 5:Legend 图例,当一个坐标系统有多幅图,图1中,有两个直线图,每个线图有它们自己的标记和表示,把所有标记放在一块称之为图例,用来增加可视化清晰特性。
  • 6:Title 图标题,每一个坐标轴系统都会有一个标题,增强图形可读性,告诉这个图是用来做什么。
  • 7:Ticklabels 坐标轴的刻度以及刻度标签,刻度有粗分和细分,前者是major ticks和minor ticks,这些刻度的命名,称之为major ticklabels和minor ticklabels。
  • 8:Spines 图形的边界线,每个axes包括4个边界线,分别是(上、下,左,右)。
  • 9:Grid 图形的网格线,为了增强图形的可读性,在图1中,虚线是网格线。

3 图形解剖绘制参考代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatter

np.random.seed(19680801)

X = np.linspace(0.5, 3.5, 100)
Y1 = 3+np.cos(X)
Y2 = 1+np.cos(1+X/0.75)/2
Y3 = np.random.uniform(Y1, Y2, len(X))

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1, aspect=1)


def minor_tick(x, pos):
    if not x % 1.0:
        return ""
    return "%.2f" % x

ax.xaxis.set_major_locator(MultipleLocator(1.000))
ax.xaxis.set_minor_locator(AutoMinorLocator(4))
ax.yaxis.set_major_locator(MultipleLocator(1.000))
ax.yaxis.set_minor_locator(AutoMinorLocator(4))
ax.xaxis.set_minor_formatter(FuncFormatter(minor_tick))

ax.set_xlim(0, 4)
ax.set_ylim(0, 4)

ax.tick_params(which='major', width=1.0)
ax.tick_params(which='major', length=10)
ax.tick_params(which='minor', width=1.0, labelsize=10)
ax.tick_params(which='minor', length=5, labelsize=10, labelcolor='0.25')

ax.grid(linestyle="--", linewidth=0.5, color='.25', zorder=-10)

ax.plot(X, Y1, c=(0.25, 0.25, 1.00), lw=2, label="Blue signal", zorder=10)
ax.plot(X, Y2, c=(1.00, 0.25, 0.25), lw=2, label="Red signal")
ax.plot(X, Y3, linewidth=0,
        marker='o', markerfacecolor='w', markeredgecolor='k')

ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom')
ax.set_xlabel("X axis label")
ax.set_ylabel("Y axis label")

ax.legend()


def circle(x, y, radius=0.15):
    from matplotlib.patches import Circle
    from matplotlib.patheffects import withStroke
    circle = Circle((x, y), radius, clip_on=False, zorder=10, linewidth=1,
                    edgecolor='black', facecolor=(0, 0, 0, .0125),
                    path_effects=[withStroke(linewidth=5, foreground='w')])
    ax.add_artist(circle)


def text(x, y, text):
    ax.text(x, y, text, backgroundcolor="white",
            ha='center', va='top', weight='bold', color='blue')


# Minor tick
circle(0.50, -0.10)
text(0.50, -0.32, "Minor tick label")

# Major tick
circle(-0.03, 4.00)
text(0.03, 3.80, "Major tick")

# Minor tick
circle(0.00, 3.50)
text(0.00, 3.30, "Minor tick")

# Major tick label
circle(-0.15, 3.00)
text(-0.15, 2.80, "Major tick label")

# X Label
circle(1.80, -0.27)
text(1.80, -0.45, "X axis label")

# Y Label
circle(-0.27, 1.80)
text(-0.27, 1.6, "Y axis label")

# Title
circle(1.60, 4.13)
text(1.60, 3.93, "Title")

# Blue plot
circle(1.75, 2.80)
text(1.75, 2.60, "Line\n(line plot)")

# Red plot
circle(1.20, 0.60)
text(1.20, 0.40, "Line\n(line plot)")

# Scatter plot
circle(3.20, 1.75)
text(3.20, 1.55, "Markers\n(scatter plot)")

# Grid
circle(3.00, 3.00)
text(3.00, 2.80, "Grid")

# Legend
circle(3.70, 3.80)
text(3.70, 3.60, "Legend")

# Axes
circle(0.5, 0.5)
text(0.5, 0.3, "Axes")

# Figure
circle(-0.3, 0.65)
text(-0.3, 0.45, "Figure")

color = 'blue'
ax.annotate('Spines', xy=(4.0, 0.35), xytext=(3.3, 0.5),
            weight='bold', color=color,
            arrowprops=dict(arrowstyle='->',
                            connectionstyle="arc3",
                            color=color))

ax.annotate('', xy=(3.15, 0.0), xytext=(3.45, 0.45),
            weight='bold', color=color,
            arrowprops=dict(arrowstyle='->',
                            connectionstyle="arc3",
                            color=color))

ax.text(4.0, -0.4, "Made with http://matplotlib.org",
        fontsize=10, ha="right", color='.5')

plt.show()

代码来源:https://matplotlib.org/3.2.1/gallery/showcase/anatomy.html

为什么我们要从宏观上面了解和认识图形的各个元素呢?

  1. 这是让我们知道一个Figure包括哪些元素,这些元素分别是什么以及有什么作用,彼此之间的关系层次是什么。
  2. 这是让我们清楚一个Figure要做定制化,可以从哪些细节入手。

因此,做Figure之前,先想想它有哪些组件,这些组件怎么设计和实现,根据现有的数据和探索的关系,需要选择什么样的Grpah

本文分享自微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Python环境】Scrapy爬虫轻松抓取网站数据

    网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人。当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”...

    陆勤_数据人网
  • 【数据科学】统计算法在Kaggle数据科学竞赛成功

    最近,数学建模平台Kaggle举办了一个大数据联合竞赛来预测股票价格的短期变化。 联合举办的另一个平台BattleFin——也是致力于众包投资分析人才的发现和培...

    陆勤_数据人网
  • 【Python环境】matplotlib - 2D 与 3D 图的绘制

    类MATLAB API 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 让我们加载它: from pylab impo...

    陆勤_数据人网
  • java泛型通配符 ? extends T 和 ? super T 的区别和用法

    ? extends T :表示上界是T, ? 都是继承自T的,都是T的子类; ? super T :表示下界是T,?都是T的父类;

    IT云清
  • 搞linux开发的能拿多少钱?

    古人有个很恰当的比喻,无襄阳荆州不足以用武,无汉中则巴蜀不足以存险,无关中河南不能以豫居,形势使然也。操作系统亦是如此:无Linux,操作系统不能以服务器自居。...

    程序员互动联盟
  • ERROR 2049 (HY000): Connection using old (pre-4.1.1)

        测试环境新装了MySQL服务器,在登陆时无法成功登陆。其提示为使用的旧的认证协议而被拒绝。其具体的错误提示为ERROR 2049 (HY000): Co...

    Leshami
  • Web.Config文件中使用configSource

    我们都知道,在asp.net中修改了配置文件web.config后,会导致应用程序重启,所有会话(session)丢失。然而,应用程序的配置信息放在配置文件里是...

    aehyok
  • Linux Lite 宣布使用基于 Linux Kernel 4.14 的内核

    Linux Lite 项目维护成员 Jerry Bezencon 今天发布推文,这款基于 Ubuntu 的发行版本现在已经基于最新的 Linux Kernel ...

    Debian社区
  • Z3简介及在逆向领域的应用

    前几天在萌新粉丝群看到机器人分享了z3求解约束器,正好在寒假的时候仔细研究过这个模块,今天就和大家分享下z3的简易使用方法和在ctf中该模块对于求解逆向题的帮助

    安恒网络空间安全讲武堂
  • Citrix XenApp越权访问漏洞

    一、简介 Citrix XenApp™是一种按需应用交付解决方案,能够在数据中心对所有Windows应用实现虚拟化、集中部署和管理,并能作为一项服务、通过任何...

    FB客服

扫码关注云+社区

领取腾讯云代金券