欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)

程序员文章站 2022-05-21 10:50:17
文章目录一、坐标刻度定位器二、散点图三、柱状图四、颜色填充一、坐标刻度定位器1、步骤1)创建:定位器对象 = mp.XXXLocator(…)2)获得坐标轴:ax = mp.gca()3)主刻度:ax.xaxis.set_major_locator(定位器对象) # 例如厘米4)次刻度:ax.xaxis.set_minor_locator(定位器对象) # 例如毫米2、各种定位器mp.NullLocator():无刻度mp.MaxNLocator(nbins=5, steps=[1,...

写在前面:

  • import numpy as np
  • import matplotlib.pylab as mp
  • 因此文章中的np就代表numpy库,mp就代表pylab绘图库

一、坐标刻度定位器

1、步骤
1)创建:定位器对象 = mp.XXXLocator(…)
2)获得坐标轴:ax = mp.gca()
3)主刻度:ax.xaxis.set_major_locator(定位器对象) # 例如厘米
4)次刻度:ax.xaxis.set_minor_locator(定位器对象) # 例如毫米

2、各种定位器

  • mp.NullLocator():无刻度
  • mp.MaxNLocator(nbins=5, steps=[1,3,5,7,9]):最多5个等分刻度,分别是1,3,5,7,9
  • mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10]):直接将刻度放上去
  • mp.AutoLocator():自动刻度,不需要提供参数(方便)
  • mp.IndexLocator(offset=0.5, base=1.5):索引定位器(好用),一参是偏移量,二参是间隔大小
  • mp.MultipleLocator():(好用)默认参数为1,就是主刻度间隔,可以用数字设定参数;次刻度默认为主刻度/10
  • mp.LinearLocator(numticks=21):线性定位器,参数为分成多少个等分,此处为21等分
  • mp.LogLocator(base=2, subs=[1.0]):对数定位器,间距不断扩大,取2的-1次方,2的0次方,2的1次方,2的2次方……

3、练习代码

import numpy as np
import matplotlib.pylab as mp

mp.figure(facecolor="lightgray")  # 创建窗口

# 存储定位器名称
locators=[
    'mp.NullLocator()', 
    'mp.MaxNLocator(nbins=5, steps=[1,3,5,7,9])', 
    'mp.FixedLocator(locs=[0, 2.5, 5, 7.5, 10])', 
    'mp.AutoLocator()',  
    'mp.IndexLocator(offset=0.5, base=1.5)', 
    'mp.MultipleLocator()',
    'mp.LinearLocator(numticks=21)', 
    'mp.LogLocator(base=2, subs=[1.0])',  
]

n_locators = len(locators)  # 获取定位器长度

# 遍历每一个定位器来创建子图
for i, locator in enumerate(locators):
    mp.subplot(n_locators, 1, i+1)  # 创建行数为定位器长度,列数为1,图号为i+1的子图
    mp.xlim(0, 10)  # 水平方向是从0到10
    mp.ylim(-1, 1)  # 垂直方向是-1到1
    mp.yticks(())  # 隐藏y坐标轴
    ax = mp.gca()  # 获取坐标轴
    ax.spines['left'].set_color("none")  # 将左坐标轴透明
    ax.spines['top'].set_color("none")  # 将上坐标轴透明
    ax.spines['right'].set_color("none")  # 将右坐标轴透明
    ax.spines['bottom'].set_position(('data', 0))  # 将底坐标轴设置数据坐标为0的位置

    # 设置主刻度
    ax.xaxis.set_major_locator(eval(locator))  # 以遍历到的定位器为朱刻度
    # 设置次刻度
    ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1))  # 以0.1为最小间隔距离

    # 随便画个图
    mp.plot(np.arange(11), np.zeros(11), c='none')  # 0到10位横坐标,10个0位纵坐标,颜色为空

    # 用文字标识一下定位器
    mp.text(5, 0.3, locator[3:], ha='center', size=12)

mp.tight_layout()  # 紧凑显示
mp.show()  # 显示图表

荐
                                                        Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)

二、散点图

1、方法
mp.scatter(水平坐标数组, 垂直坐标数组, s=点的大小, c=分布数据, cmap=颜色映射方式, alpha=透明度(0到1), marker=点的形状)

2、测试代码

import numpy as np
import matplotlib.pylab as mp

# 获得1000个使用随机作为服从正态分布的数据样本(数组)
n = 1000
x = np.random.normal(0, 1, n)  # 一参为标准差,二参为分布平坦性(越大越分散,越小越集中),三参为点的个数
y = np.random.normal(0, 1, n)
d = np.sqrt(x ** 2 + y ** 2)  # 根号下 x平方加y平方 作为点到正态中心的距离

# 绘制图像
mp.figure("Scatter", facecolor="lightgray")
mp.title("Scatter", fontsize=20)  # 图像标题
mp.xlabel('X', fontsize=14)  # X、Y刻度显示的文本
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)  # 刻度标签大小
mp.grid(linestyle=":")  # 网格线
mp.scatter(x, y, s=60, c=d, cmap="jet_r", alpha=0.5, marker='*')  # marker常用D,*,s,默认圆点o

mp.show()

荐
                                                        Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)

三、柱状图

1、方法
mp.bar(水平坐标数组, 高度数组(有正负), ec=边缘颜色, fc=填充颜色, label=标签文本, alpha=透明度 )

2、测试代码

import numpy as np
import matplotlib.pylab as mp

n = 12
x = np.arange(n)

# uniform:均匀分布,在0.5和1.0之内产生n个随机数
y1 = (1 - x/n)* np.random.uniform(0.5, 1.0, n)  # (1 - x/n)为了方便显示
y2 = (1 - x/n)* np.random.uniform(0.5, 1.0, n)

# 图像属性
mp.figure("Bar", facecolor="lightgray")
mp.title("Bar", fontsize=20)  # 图像标题
mp.xlabel('X', fontsize=14)  # X、Y刻度显示的文本
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)  # 刻度标签大小
mp.grid(axis='y', linestyle=":")  # 网格线,并且只画与y相关联的
mp.xticks(x, x+1)  # 设置横坐标刻度,位置为x的,显示数字为x+1
mp.ylim(-1.25, 1.25)  # 设置纵坐标大小,-1.25到1.25


# 绘制图像
mp.bar(x, y1, ec='white', fc='dodgerblue', label="Sample 1")
# 分别取y1中的每个柱,并且在柱的上方显示文本,水平居中,垂直靠底
for _x, _y in zip(x, y1):
    mp.text(_x, _y, '%.2f'%_y, ha='center', va='bottom', size=8)

mp.bar(x, -y2, ec='white', fc='dodgerblue', label="Sample 2", alpha=0.5)
for _x, _y in zip(x, y2):
    mp.text(_x, -_y - 0.015, '%.2f'%_y, ha='center', va='top', size=8)  # _y取负号,-0.015表示不会靠的太近


mp.legend()
mp.show()

荐
                                                        Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)

四、颜色填充

1、方法

  • mp.fill_between(水平坐标数组, 垂直坐标起点数组, 垂直坐标终点数组, 填充条件, color=颜色, alpha=透明度)
  • 取从-π到π的999个点,作为横坐标:x = np.linspace(-np.pi, np.pi, 1000)

2、测试代码

import numpy as np
import matplotlib.pylab as mp

n = 1000
x = np.linspace(0, 8*np.pi, n)
sin_y = np.sin(x)
cos_y = np.cos(x/2)/2

# 图像属性
mp.figure("Fill", facecolor="lightgray")
mp.title("Fill", fontsize=20)  # 图像标题
mp.xlabel('X', fontsize=14)  # X、Y刻度显示的文本
mp.ylabel('Y', fontsize=14)
mp.tick_params(labelsize=10)  # 刻度标签大小
mp.grid(linestyle=":")  # 网格线

# 绘制图像
mp.plot(x, sin_y, c='dodgerblue', label=r"$y=sin(x)$")
mp.legend()  # 显示图例
mp.plot(x, cos_y, c='orange', label=r"$y=\frac{1}{2}cos(\frac{x}{2})$")
mp.legend()

# 填充颜色
# 起点在cos,终点在sin,且条件是cos<sin
mp.fill_between(x, cos_y, sin_y, cos_y<sin_y, color="yellow", alpha=0.5)
# 条件是cos>sin
mp.fill_between(x, cos_y, sin_y, cos_y>sin_y, color="lightblue", alpha=0.5)


mp.show()

荐
                                                        Python之数据分析(坐标刻度定位器、散点图、柱状图、颜色区域填充)

本文地址:https://blog.csdn.net/Viewinfinitely/article/details/107240359