matplotlib 绘图基础

本文详细介绍了matplotlib的绘图基础,包括pylab的类MATLAB API,面向对象API的figure对象使用,如add_axes和add_subplot方法,以及pyplot的方式。讨论了自定义曲线外观、多图绘制、共享坐标轴、添加标题和图例、散点图、直方图、饼图等多种图表类型。此外,还涵盖了文本、箭头、注解的添加以及图表样式的定制,最后展示了热力图的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib 绘图基础

pylab - 类MATLAB API

  • 最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。
  • pylab 是 matplotlib 面向对象绘图库的一个接口。它的语法和 Matlab 十分相近。也就是说,它主要的绘图命令和 Matlab 对应的命令有相似的参数。
# 在jupyter notebook里面需要添加此命令才能打印图表,jupter lab里面则不需要
%matplotlib inline
# 导入所需包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

plt.style.use('ggplot')
# 解决中文乱码问题
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

# 解决坐标轴刻度负号乱码
plt.rcParams['axes.unicode_minus'] = False

# 设置图片大小,单位为英寸
plt.rc('figure', figsize=(6, 4))
x = np.linspace(-5,5,10)
y = x**2

plt.figure()   #实例化一个绘图对象
plt.plot(x,y,'r')   #绘图
plt.xlabel('x')   #添加坐标轴标签
plt.ylabel('y')
plt.title('matplotlib方式绘图');   #添加标题

[外链图片转存失败(img-LpQMHbaS-1562729989747)(output_5_0.png)]

from pylab import *

x = np.linspace(-5,5,10)
y = x**2

figure()
plot(x,y,'b')
xlabel('x')
ylabel('y')
title('pylab方式绘图');

[外链图片转存失败(img-oZxtNzSg-1562729989748)(output_6_0.png)]

# 创建子图,选择绘图用的颜色与描点符号:
subplot(1,2,1)
plot(x,y,'r--')
subplot(1,2,2)
plot(y,x,'g*-');

[外链图片转存失败(img-H55cTbWH-1562729989748)(output_7_0.png)]

此类 API 的好处是可以节省你的代码量,但是我们并不鼓励使用它处理复杂的图表。处理复杂图表时, matplotlib 面向对象 API 是一个更好的选择。

matplotlib 面向对象 API

  • 使用面向对象API的方法和之前例子里的看起来很类似,不同的是,我们并不创建一个全局实例,而是将新建实例的引用保存在 fig 变量中,如果我们想在图中新建一个坐标轴实例,只需要调用 fig实例的 add_axes 方法
  • 尽管会写更多的代码,好处在于我们对于图表的绘制有了完全的控制权,可以很容易地多加一个坐标轴到图中
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1026)
# 导入包
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1026)

调用figure创建一个绘图对象,并且使它成为当前的绘图对象。(可选)

面向对象的方式

通过figure对象的.add_axes的方法添加坐标轴

x = np.linspace(0,5,10)
y = x**2

fig = plt.figure(figsize=(8,4)) #创建一个绘图对象
# fig = plt.figure(figsize=(8,4), dpi=100)
# figsize参数:指定绘图对象的宽度和高度,单位为英寸
# dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80

axes = fig.add_axes([0.1,0.1,0.8,0.8])   # 添加坐标轴 left, bottom, width, height (range 0 to 1) 

axes.plot(x,y,'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('面向对象的方式绘图')

# 显示图形
plt.show()

[外链图片转存失败(img-NojEMwd4-1562729989748)(output_16_0.png)]

fig = plt.figure(figsize=(8,4))

axes = fig.add_axes([0.1,0.1,0.8,0.8])   # A 4-length sequence of [left, bottom, width, height] quantities.
axes.plot(x,y,'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('标题1')

axes2 = fig.add_axes([0.2,0.5,0.4,0.3])
axes2.plot(y,x,'g')
axes2.set_xlabel('y')
axes2.set_ylabel('x')
axes2.set_title('标题2')

plt.show()

[外链图片转存失败(img-82yBEGYi-1562729989749)(output_17_0.png)]

fig = plt.figure()

axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])
axes.plot(x, y, 'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('标题1')

axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])
axes2.plot(y, x, 'g')
axes2.set_xlabel('y')
axes2.set_ylabel('x')
axes2.set_title('标题2')

plt.show()

[外链图片转存失败(img-2smgNWrW-1562729989749)(output_18_0.png)]

通过figure对象的.add_subplot方法添加子图

# fig.add_subplot?
fig = plt.figure()
ax = fig.add_subplot(349)  # 参数349的意思是:将画布分割成3行4列,图像画在从左到右从上到下的第9块,如下图:
# ax = fig.add_subplot(3410)  # 若果要在第10块上画图,3410是不可以的!
ax.plot(x,y)
ax.set_title('面向对象的方式绘图-add_subplot')
plt.show()

[外链图片转存失败(img-kcpRnEzW-1562729989749)(output_21_0.png)]

在jupyter notebook里面效果不明显,在python IDLE里面演示

# fig.add_subplot?
fig = plt.figure()
ax = fig.add_subplot(2,1,1)
ax.set_title('面向对象的方式绘图-add_subplot')
ax.plot(x,y)
ax = fig.add_subplot(2,2,3)
ax.plot(x,y)
plt.show()

[外链图片转存失败(img-TkyGqJWX-1562729989749)(output_24_0.png)]

pyplot的方式

通过调用pyplot的plot方法在当前的绘图对象中进行绘图

[0, 2pi] 上的正弦曲线

# 设置图片大小,单位为英寸
plt.rc('figure', figsize=(8, 4))

x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x))
plt.show()

[外链图片转存失败(img-eKIwG3nx-1562729989750)(output_28_0.png)]

# 如果没有第一个参数 x,图形的 x 坐标默认为数组的索引
plt.plot(np.sin(x));

[外链图片转存失败(img-BFKoRoSZ-1562729989750)(output_29_0.png)]

x = np.linspace(0, 2 * np.pi, 50)
# 在调用 plt.plot() 的时候多传入了一组数据集,并用逗号与第一组数据集分隔开。
plt.plot(x, np.sin(x), x, np.sin(2 * x))
plt.title('正弦曲线')  # 添加标题
<matplotlib.text.Text at 0x7ac5f98>

[外链图片转存失败(img-RJTevdlP-1562729989750)(output_30_1.png)]

plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

x = range(0, 50)  
y = [num**2 for num in x]

fig = plt.figure(figsize=(8,5)) # 创建figure实例
ax = fig.add_subplot(111) # 创建axes实例在figure实例fig中
ax.plot(x, y) # 创建二维线图实例在axes中
[<matplotlib.lines.Line2D at 0x7abf320>]

[外链图片转存失败(img-Zs8vPU7a-1562729989751)(output_32_1.png)]

# 获取当前的图表
plt.gcf()
# 获取当前子图
plt.gca()
# 清空当前 figure
plt.clf()
# 清空plt绘制的内容
plt.clf()
# 关闭图 0
plt.close(0)
#  关闭所有图
plt.close('all')
# 获取当前figure的引用,设置图片大小
plt.gcf().set_size_inches(16,8)
<matplotlib.figure.Figure at 0x7e86eb8>
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2

ax1 = plt.subplot(121) # 在图表2中创建子图1
ax2 = plt.subplot(122) # 在图表2中创建子图2

x = np.linspace(0, 3, 100)
for i in range(3):
    plt.figure(1)  # 选择图表1
    plt.plot(x, np.exp(i*x/3))
    
    plt.sca(ax1)  # 选择图表2的子图1
    plt.plot(x, np.sin(i*x))
    
    plt.sca(ax2)  # 选择图表2的子图2
    plt.plot(x, np.cos(i*x))
plt.show()

[外链图片转存失败(img-kLNJ0fhQ-1562729989751)(output_34_0.png)]

[外链图片转存失败(img-83IWYTEd-1562729989751)(output_34_1.png)]

自定义曲线的外观

# plt.plot?
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), color='y',
         linestyle='-.',
         linewidth=5,
         marker='o',
         markersize=3
        );

[外链图片转存失败(img-Qw6H0NiK-1562729989751)(output_37_0.png)]

# 可以将颜色,线型,标记形状写在一起
x = np.linspace(0, 2 * np.pi, 50)
plt.plot(x, np.sin(x), 'y--H',
         linewidth=5,
         markersize=10
        );

[外链图片转存失败(img-hj1IoSvf-1562729989752)(output_38_0.png)]

x = np.linspace(0, 2 * np.pi, 50)
# 两种不同的曲线样式:'r-o' 和 'g--'。字母‘r’和‘g’代表线条的颜色,后面的符号代表线和点标记的类型。
# 例如 '-o' 代表包含实心点标记的实线,'--' 代表虚线。
plt.plot(x, np.sin(x), 'k-o', x, np.cos(x), 'g-.');

[外链图片转存失败(img-fKmnj5A3-1562729989752)(output_39_0.png)]

# plot方法
# plt.plot?

颜色、标记、线型

颜色字符
蓝色b
绿色g
红色r
青色c
品红m
黄色y
黑色k('b’代表蓝色,所以这里用黑色的最后一个字母)
白色w

线型标记
直线-
虚线
点线:
点划线-.

点标记名称标记
.
像素,
o
方形s’
三角形(向下,上,左,右)v, ^, <, >
三角星(向下,上,左,右)1, 2, 3, 4
五角形p
星形*
六角形h
六角形H
加号+
x号x
菱形D
窄菱形d
竖线竖线
横线_

在一个窗口绘制多个图

# plt.subplots?
# subplots的方法
x = linspace(0, 5, 10)
y = x ** 2

fig, axes = plt.subplots(nrows=1, ncols=2)

for ax in axes:
    ax.plot(x, y, 'r')
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_title('title')

plt.show()

[外链图片转存失败(img-jWAYGfcC-1562729989752)(output_45_0.png)]

# subplots的方法
x = linspace(0, 5, 10)
y = x ** 2

fig, axes = plt.subplots(nrows=1, ncols=2)

axes[1].plot(x, y, 'r')
axes[1].set_xlabel('x')
axes[1].set_ylabel('y')
axes[1].set_title('title');

[外链图片转存失败(img-79KCShbp-1562729989752)(output_46_0.png)]

# subplots的方法
x = linspace(0, 5, 10)
y = x ** 2

fig, axes = plt.subplots(nrows=1, ncols=2, sharex=False, sharey=True)  # 共享坐标轴

for ax in axes:
    ax.plot(x, y, 'r')
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    ax.set_title('title')

plt.show()

[外链图片转存失败(img-D17rQqmN-1562729989753)(output_47_0.png)]

# plt.subplot?
# subplot的方法
x = np.linspace(0, 2 * np.pi, 50)

# 调用子绘图方法,生成多个绘图区,并指向某子绘图区并作图
plt.subplot(2, 1, 1)  # 行,列,活跃区
plt.plot(x, np.sin(x), 'bo-', label='sin(x)')
# 添加标题
plt.title('sin(x) vs cos(x)')
# 添加纵坐标标签
plt.ylabel('sin(x)')
# 设置Y轴的范围
plt.xlim(-2,10)
plt.legend()

# 指向第二个绘图子区
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x), 'g.:', label='cos(x)')
# 添加纵横坐标标签
plt.xlabel('x')
plt.ylabel('cos(x)')
# 设置Y轴的范围
plt.ylim(-2,2)
# 显示图例
plt.legend();

[外链图片转存失败(img-XScopjCG-1562729989753)(output_49_0.png)]

共享坐标轴,调整subplot周围间距

# plt.subplots_adjust?

subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

参数说明
left = 0.125左边框位置
right = 0.9右边框位置
top = 0.9上边框位置
bottom = 0.1下边框位置
wspace = 0.2子绘图区之间预留空白空间的宽度,为平均轴宽的一小部分。
hspace = 0.2子绘图区之间预留空白空间的高度,为平均轴宽的一小部分。
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
    for j in range(2):
        axes[i,j].plot(np.random.randn(100),color='b')
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()

[外链图片转存失败(img-uRsAiB8m-1562729989753)(output_53_0.png)]

添加标题,坐标轴标记和图例

图例是位于图像一角或者一侧的用于说明图像中的各种符号、线条等所代表的内容与指标的辅助性标识,它有助于我们更好的了解图像内容。

# plt.legend?
x = np.linspace(0, 2 * np.pi, 50)
# 创建画布并设置大小
plt.figure(figsize=(8,5))

plt.plot(x, np.sin(x), 'r-x', label='Sin(x)')
# plt.plot(x, np.cos(x), 'g-^', label='Cos(x)')
plt.plot(x, np.cos(x), 'g-o', label='Cos(x)')

plt.legend(loc=0)
# plt.legend(loc='center right')
# plt.legend(loc='best')              # 展示图例, 并放在最佳位置
plt.xlabel('Rads')                    # 给 x 轴添加标签
plt.ylabel('Amplitude')               # 给 y 轴添加标签
plt.title('Sin and Cos Waves')        # 添加图形标题
plt.ylim(-1.5, 1.5)                   # y轴的刻度范围
plt.grid()                            # 添加网格
plt.savefig("Sin and Cos Waves.png", dpi=800)  # 保存图

plt.show()

[外链图片转存失败(img-qOWRgjoq-1562729989754)(output_57_0.png)]

x = np.linspace(0, 10, 1000)
y = np.sin(x)
z = np.cos(x**2)
# label : 给所绘制的曲线一个名字,此名字在图示(legend)中显示。
# 只要在字符串前后添加"$"符号,matplotlib就会使用其内嵌的latex引擎绘制的数学公式。
plt.plot(x,y,label="$sin(x)$", color="red", linewidth=3)
plt.plot(x ,z, "b--", label="$cos(x^2)$")
# 展示图例
plt.legend(loc='best')

plt.show()

[外链图片转存失败(img-MDRGxRoB-1562729989754)(output_58_0.png)]

刻度及刻度标签

plt.plot(np.random.randn(1000).cumsum())
plt.yticks([-50, -40, -30, -20, -10, 0, 10, 20])
plt.xticks([0, 250, 500, 750, 1000], 
           ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
           rotation=30,
           fontsize=15
          )
plt.title('My first matplotlib plot', fontsize=20)
plt.xlabel('Stages',fontsize=16)
plt.show()

[外链图片转存失败(img-5zgf34I0-1562729989754)(output_60_0.png)]

散点图

x = np.linspace(0, 2 * np.pi, 50)
y = np.random.random(50)
plt.scatter(x,y)
plt.show()

[外链图片转存失败(img-uNGrK45M-1562729989759)(output_62_0.png)]

x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.scatter(x,y);

[外链图片转存失败(img-GxuLZBYp-1562729989760)(output_63_0.png)]

# plot 也可以绘制这张图
plt.plot(x, y,'o')
plt.show()

[外链图片转存失败(img-ZhSYQ3KY-1562729989761)(output_64_0.png)]

彩色映射散点图

# plt.scatter?
x = np.random.randint(1,100,100)
y = np.random.rand(100)

size = np.random.rand(100) * 500
colour = np.random.rand(100)

plt.rc('figure', figsize=(10, 6))
plt.scatter(x, y, size, colour,
            alpha=.7,
            linewidths=7
           )
plt.colorbar()  # 显示色条
plt.show()

[外链图片转存失败(img-aDup34xt-1562729989762)(output_67_0.png)]

# 自定义标记形状
plt.scatter(x, y, size, colour, marker=r'$\clubsuit$')
plt.colorbar()
plt.show()

[外链图片转存失败(img-0pWvAHVq-1562729989763)(output_68_0.png)]

柱状图、条形图

# plt.bar?
size = 5
y = np.random.random(size)
x = np.arange(size)

plt.bar(x, y, width=.5)
plt.show()

[外链图片转存失败(img-eko3YiQc-1562729989763)(output_71_0.png)]

size = 5
a = np.random.random(size)
b = np.random.random(size)
c = np.random.random(size)

d = np.random.random(size)
x = np.arange(size)

total_width, n = 0.9, 3     # 有多少个类型,只需更改n即可
width = total_width / n
x = x - (total_width - width) / 2

plt.bar(x, a,  width=width, label='a')
plt.bar(x + width, b, width=width, label='b')
plt.bar(x + 2 * width, c, width=width, label='c')
plt.legend()
plt.show()

[外链图片转存失败(img-UtmnCvQS-1562729989764)(output_72_0.png)]

# 堆积柱状图
import numpy as np

N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)

ind = np.arange(N) 
width = 0.35

# p1 = plt.bar(ind, menMeans, width, color='#d62728')
# p2 = plt.bar(ind, womenMeans, width, bottom=menMeans)

p1 = plt.bar(ind, menMeans, width, color='#d62728', label='Men')
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans, label='Wowen')
# print(p1[0])

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
# plt.legend((p1[0], p2[0]), ('Men', 'Women'))
plt.legend()
plt.show()
Rectangle(-0.175,0;0.35x20)

[外链图片转存失败(img-O9ErDI8O-1562729989765)(output_73_1.png)]

# 带误差的堆积柱状图
import numpy as np

N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = np.arange(N) 
width = 0.35

p1 = plt.bar(ind, menMeans, width, color='#d62728', yerr=menStd)
p2 = plt.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd)

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
plt.yticks(np.arange(0, 81, 10))
plt.legend((p1[0], p2[0]), ('Men', 'Women'))
# plt.legend()
plt.show()

[外链图片转存失败(img-nXLrSlT9-1562729989766)(output_74_0.png)]

直方图

x = np.random.randn(100)
plt.hist(x, 20)
plt.show()

[外链图片转存失败(img-E8BCRYCQ-1562729989767)(output_76_0.png)]

x = np.random.randn(100)
plt.hist(x, 20, orientation='horizontal')
plt.show()

[外链图片转存失败(img-1RPbg4fM-1562729989768)(output_77_0.png)]

# plt.hist?

plt.hist(x, bins=None, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=‘bar’, align=‘mid’, orientation=‘vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs)

参数说明
x数据
bins组数
histtype{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}
align{‘left’, ‘mid’, ‘right’}
orientation{‘horizontal’, ‘vertical’}
rwidthbar间距
x = np.random.randn(1000)
# 水平直方图
# plt.hist(x, 10, rwidth=0.5, orientation='horizontal')
# 垂直直方图
plt.hist(x, 10, rwidth=0.7, orientation='vertical', align='mid')
plt.show()

[外链图片转存失败(img-tZs2PxOu-1562729989768)(output_80_0.png)]

# mlab.normpdf?
# 返回指定均值和标准差的正态分布的概率分布函数
import matplotlib.mlab as mlab

mu = 100    # 均值
sigma = 15  # 标准差
x = mu + sigma * np.random.randn(1000)

n, bins, patches = plt.hist(x, 50, normed=1)
# 添加拟合曲线
y = mlab.normpdf(bins, mu, sigma)
plt.plot(bins, y, '--')
plt.xlabel('Smarts')
plt.ylabel('Probability density')
plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')

# 调整间距以防止ylabel被覆盖
plt.tight_layout()
plt.show()

[外链图片转存失败(img-rdsPdCwD-1562729989769)(output_82_0.png)]

plt.tight_layout?
# plt.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)
# pad:子图边框和figure边框的距离,用空白填补
# h_pad、w_pad:子图的纵横边框之间的距离,用空白填补

饼图

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)  # 突出'Hogs'

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
        shadow=True,
        startangle=90
       )

# 相等的纵横比确保饼图是圆的
ax1.axis('equal')

plt.show()

[外链图片转存失败(img-sl0t59DJ-1562729989770)(output_85_0.png)]

箱线图,小提琴图

import pandas as pd

df = pd.read_excel(r'某文化企业收入及支出状况.xls')
df = df.iloc[:,1:]
data = df.values
data
array([[264585.6, 203821. , 192918.4,  10902.6,  63036.3],
       [123924.5, 136377.8, 121271.8,  15106. ,  75095.1],
       [ 47646.1, 219183. , 173521.2,  45661.8,  94748.1],
       [178893.4, 197098.2, 146471.1,  50627.1,  28082.7],
       [ 45209.3, 119869. , 105013. ,  14856.9,  21856.7]])
# plt.violinplot?
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(14, 4))

# plot violin plot
axes[0].violinplot(data,
#                    vert=False,
                   showmeans=True,
                   showmedians=True
                  )
axes[0].set_title('Violin plot')

# plot box plot
# axes[1].boxplot(data)
axes[1].boxplot(data, sym='r', meanline=True, showmeans=False)
axes[1].set_title('Box plot')

# adding horizontal grid lines
for ax in axes:
    ax.yaxis.grid(True)
    ax.set_ylim(0,300000)
    ax.set_xticks([y + 1 for y in range(len(data))])
    ax.set_xlabel('不同群组')
    ax.set_ylabel('观测')

# add x-tick labels
plt.setp(axes, xticks=[y + 1 for y in range(len(data))],
         xticklabels=['Assets', 'Revenue', 'Spend', 'Margin', 'Pay'])
plt.show()

[外链图片转存失败(img-cyapnznR-1562729989771)(output_90_0.png)]

ax.get_ylim()
(0.0, 300000.0)

添加文本,箭头,注解等

plt.arrow?
# plt.arrow(x, y, dx, dy, hold=None, **kwargs)
# ax.annotate("", xy=(0.5, 0.5), xytext=(0, 0),arrowprops=dict(arrowstyle="->"))
x = np.linspace(0, 10, 1000)
y = np.sin(x)
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=3)

plt.text(2,0,'文本在(2,0)这个点', family='Simhei', fontsize=10)
plt.arrow(4, -0.5, 0.5, 0.5)  # 4, -0.5, 4.5, 0
plt.annotate("我是注解", xy=(0.5, 0.5), xytext=(1, -0.25),arrowprops=dict(arrowstyle="->"))

plt.show()

[外链图片转存失败(img-HiT140CZ-1562729989772)(output_94_0.png)]

定制化图表样式

plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');

[外链图片转存失败(img-2nt8mTkt-1562729989772)(output_96_0.png)]

plt.style.use('ggplot')  # 使用R中ggplot的配色
plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');

[外链图片转存失败(img-70HFqUaK-1562729989773)(output_97_0.png)]

 print(plt.style.available)
['seaborn-dark', 'seaborn-dark-palette', 'seaborn-talk', 'seaborn-ticks', 'seaborn-pastel', 'classic', 'seaborn-poster', 'seaborn-notebook', 'seaborn-bright', 'bmh', 'seaborn-deep', 'seaborn-muted', 'seaborn-paper', 'seaborn-white', 'grayscale', 'seaborn', 'seaborn-whitegrid', 'dark_background', 'fivethirtyeight', 'seaborn-colorblind', 'seaborn-darkgrid', 'ggplot']
plt.style.use('classic')
# plt.style.use('seaborn-dark')
plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');

[外链图片转存失败(img-ZVpKEC55-1562729989774)(output_99_0.png)]

plt.hist(np.random.randn(1000), 10, rwidth=0.5, orientation='vertical', align='mid');

[外链图片转存失败(img-QKmKtijS-1562729989775)(output_100_0.png)]

# 临时样式
with plt.style.context(('seaborn-ticks')):
    plt.plot(np.sin(np.linspace(0, 2 * np.pi)), 'r-o')

[外链图片转存失败(img-fctDo3HZ-1562729989776)(output_101_0.png)]

plt.plot(np.sin(np.linspace(0, 2 * np.pi)), 'r-o');

[外链图片转存失败(img-XYwuMKT5-1562729989776)(output_102_0.png)]

热力图

# plt.pcolor?
# 创建一个二维数组的伪色图。
import numpy as np
from pandas import DataFrame
import matplotlib.pyplot as plt

Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
df = DataFrame(abs(np.random.randn(5, 4)), index=Index, columns=Cols)
df.head()
ABCD
aaa0.0458050.1957310.1844591.250486
bbb0.3047110.6125820.0720540.353929
ccc0.8698580.3764191.4410850.575023
ddd2.4694670.8130310.0806070.457312
eee1.6780160.9890241.7579430.199399
plt.pcolor(df)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.show()

[外链图片转存失败(img-VkgEUkot-1562729989777)(output_106_0.png)]

import seaborn as sns

sns.heatmap(df, annot=True);

[外链图片转存失败(img-2ZqiqMIz-1562729989778)(output_107_0.png)]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值