Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,也可以和图形工具包一起使用。和 Pandas、Numpy 并成为数据分析三兄弟(我自封的:)。

虽然比起很多其他图形库(Seaborn | pyecharts | plotly | bokeh | pandas_profiling)这个库丑丑呆呆的,甚至有点难用,但人家毕竟是开山始祖,方法全,能够支持你各类骚操作的需求。可以说是现在python数据分析中,用的人最多的图形库了。

很多同学学习了 matplotlib 之后苦于找不到循序渐进的练习。今天我们这里就给大家一次性整理了 50 个常用的代码片段!涵盖了从入门到进阶的多种用法。想做可视化的同学不妨收藏起来,慢慢练习。

一、导入

1.导入matplotlib库简写为pltimport matplotlib.pyplot as plt

二、基本图表

2.用plot方法画出x=(0,10)间sin的图像x = np.linspace(0, 10, 30)

plt.plot(x, np.sin(x));

3.用点加线的方式画出x=(0,10)间sin的图像plt.plot(x, np.sin(x), '-o');

4.用scatter方法画出x=(0,10)间sin的点图像plt.scatter(x, np.sin(x));

5.用饼图的面积及颜色展示一组4维数据rng = np.random.RandomState(0)

x = rng.randn(100)

y = rng.randn(100)

colors = rng.rand(100)

sizes = 1000 * rng.rand(100)

plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,

cmap='viridis')

plt.colorbar(); # 展示色阶

6.绘制一组误差为±0.8的数据的误差条图x = np.linspace(0, 10, 50)

dy = 0.8

y = np.sin(x) + dy * np.random.randn(50)

plt.errorbar(x, y, yerr=dy, fmt='.k')

7.绘制一个柱状图x = [1,2,3,4,5,6,7,8]

y = [3,1,4,5,8,9,7,2]

label=['A','B','C','D','E','F','G','H']

plt.bar(x,y,tick_label = label);

8.绘制一个水平方向柱状图plt.barh(x,y,tick_label = label);

9.绘制1000个随机值的直方图data = np.random.randn(1000)

plt.hist(data);

10.设置直方图分30个bins,并设置为频率分布plt.hist(data, bins=30,histtype='stepfilled', density=True)

plt.show();

11.在一张图中绘制3组不同的直方图,并设置透明度x1 = np.random.normal(0, 0.8, 1000)

x2 = np.random.normal(-2, 1, 1000)

x3 = np.random.normal(3, 2, 1000)

kwargs = dict(alpha=0.3, bins=40, density = True)

plt.hist(x1, **kwargs);

plt.hist(x2, **kwargs);

plt.hist(x3, **kwargs);

12.绘制一张二维直方图mean = [0, 0]

cov = [[1, 1], [1, 2]]

x, y = np.random.multivariate_normal(mean, cov, 10000).T

plt.hist2d(x, y, bins=30);

13.绘制一张设置网格大小为30的六角形直方图plt.hexbin(x, y, gridsize=30);

三、自定义图表元素

14.绘制x=(0,10)间sin的图像,设置线性为虚线x = np.linspace(0,10,100)

plt.plot(x,np.sin(x),'--');

15设置y轴显示范围为(-1.5,1.5)x = np.linspace(0,10,100)

plt.plot(x, np.sin(x))

plt.ylim(-1.5, 1.5);

16.设置x,y轴标签variable x,value yx = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y, label='sin(x)')

plt.xlabel('variable x');

plt.ylabel('value y');

17.设置图表标题“三角函数”x = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y, label='sin(x)')

plt.title('三角函数');

18.显示网格x = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.grid()

19.绘制平行于x轴y=0.8的水平参考线x = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.axhline(y=0.8, ls='--', c='r')

20.绘制垂直于x轴x<4 and x>6的参考区域,以及y轴y<0.2 and y>-0.2的参考区域x = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.axvspan(xmin=4, xmax=6, facecolor='r', alpha=0.3) # 垂直x轴

plt.axhspan(ymin=-0.2, ymax=0.2, facecolor='y', alpha=0.3);  # 垂直y轴

21.添加注释文字sin(x)x = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.text(3.2, 0, 'sin(x)', weight='bold', color='r');

22.用箭头标出第一个峰值x = np.linspace(0.05, 10, 100)

y = np.sin(x)

plt.plot(x, y)

plt.annotate('maximum',xy=(np.pi/2, 1),xytext=(np.pi/2+1, 1),

weight='bold',

color='r',

arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='r'));

四、自定义图例

23.在一张图里绘制sin,cos的图形,并展示图例x = np.linspace(0, 10, 1000)

fig, ax = plt.subplots()

ax.plot(x, np.sin(x), label='sin')

ax.plot(x, np.cos(x), '--', label='cos')

ax.legend();

24.调整图例在左上角展示,且不显示边框ax.legend(loc='upper left', frameon=False);

fig

25.调整图例在画面下方居中展示,且分成2列ax.legend(frameon=False, loc='lower center', ncol=2)

fig

26.绘制的图像,并只显示前2者的图例y = np.sin(x[:, np.newaxis] + np.pi * np.arange(0, 2, 0.5))

lines = plt.plot(x, y)

# lines 是 plt.Line2D 类型的实例的列表

plt.legend(lines[:2], ['first', 'second']);

# 第二个方法

#plt.plot(x, y[:, 0], label='first')

#plt.plot(x, y[:, 1], label='second')

#plt.plot(x, y[:, 2:])

#plt.legend(framealpha=1, frameon=True);

27.将图例分不同的区域展示fig, ax = plt.subplots()

lines = []

styles = ['-', '--', '-.', ':']

x = np.linspace(0, 10, 1000)

for i in range(4):

lines += ax.plot(x, np.sin(x - i * np.pi / 2),styles[i], color='black')

ax.axis('equal')

# 设置第一组标签

ax.legend(lines[:2], ['line A', 'line B'],

loc='upper right', frameon=False)

# 创建第二组标签

from matplotlib.legend import Legend

leg = Legend(ax, lines[2:], ['line C', 'line D'],

loc='lower right', frameon=False)

ax.add_artist(leg);

五、自定义色阶

28.展示色阶x = np.linspace(0, 10, 1000)

I = np.sin(x) * np.cos(x[:, np.newaxis])

plt.imshow(I)

plt.colorbar();

29.改变配色为'gray'plt.imshow(I, cmap='gray');

30.将色阶分成6个离散值显示plt.imshow(I, cmap=plt.cm.get_cmap('Blues', 6))

plt.colorbar()

plt.clim(-1, 1);

六、多子图

31.在一个1010的画布中,(0.65,0.65)的位置创建一个0.20.2的子图ax1 = plt.axes()

ax2 = plt.axes([0.65, 0.65, 0.2, 0.2])

32.在2个子图中,显示sin(x)和cos(x)的图像fig = plt.figure()

ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4], ylim=(-1.2, 1.2))

ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4], ylim=(-1.2, 1.2))

x = np.linspace(0, 10)

ax1.plot(np.sin(x));

ax2.plot(np.cos(x));

33.用for创建6个子图,并且在图中标识出对应的子图坐标for i in range(1, 7):

plt.subplot(2, 3, i)

plt.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')

# 方法二

# fig = plt.figure()

# fig.subplots_adjust(hspace=0.4, wspace=0.4)

# for i in range(1, 7):

#     ax = fig.add_subplot(2, 3, i)

#     ax.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')

34.设置相同行和列共享x,y轴fig, ax = plt.subplots(2, 3, sharex='col', sharey='row')

35.用[]的方式取出每个子图,并添加子图座标文字for i in range(2):

for j in range(3):

ax[i, j].text(0.5, 0.5, str((i, j)),fontsize=18, ha='center')

fig

36.组合绘制大小不同的子图,样式如下

Image Namegrid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)

plt.subplot(grid[0, 0])

plt.subplot(grid[0, 1:])

plt.subplot(grid[1, :2])

plt.subplot(grid[1, 2]);

37.显示一组二维数据的频度分布,并分别在x,y轴上,显示该维度的数据的频度分布mean = [0, 0]

cov = [[1, 1], [1, 2]]

x, y = np.random.multivariate_normal(mean, cov, 3000).T

# Set up the axes with gridspec

fig = plt.figure(figsize=(6, 6))

grid = plt.GridSpec(4, 4, hspace=0.2, wspace=0.2)

main_ax = fig.add_subplot(grid[:-1, 1:])

y_hist = fig.add_subplot(grid[:-1, 0], xticklabels=[], sharey=main_ax)

x_hist = fig.add_subplot(grid[-1, 1:], yticklabels=[], sharex=main_ax)

# scatter points on the main axes

main_ax.scatter(x, y,s=3,alpha=0.2)

# histogram on the attached axes

x_hist.hist(x, 40, histtype='stepfilled',

orientation='vertical')

x_hist.invert_yaxis()

y_hist.hist(y, 40, histtype='stepfilled',

orientation='horizontal')

y_hist.invert_xaxis()

七、三维图像

38.创建一个三维画布from mpl_toolkits import mplot3d

fig = plt.figure()

ax = plt.axes(projection='3d')

39.绘制一个三维螺旋线ax = plt.axes(projection='3d')

# Data for a three-dimensional line

zline = np.linspace(0, 15, 1000)

xline = np.sin(zline)

yline = np.cos(zline)

ax.plot3D(xline, yline, zline);

40.绘制一组三维点ax = plt.axes(projection='3d')

zdata = 15 * np.random.random(100)

xdata = np.sin(zdata) + 0.1 * np.random.randn(100)

ydata = np.cos(zdata) + 0.1 * np.random.randn(100)

ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');

八、宝可梦数据集可视化

41.展示前5个宝可梦的Defense,Attack,HP的堆积条形图pokemon = df['Name'][:5]

hp = df['HP'][:5]

attack = df['Attack'][:5]

defense = df['Defense'][:5]

ind = [x for x, _ in enumerate(pokemon)]

plt.figure(figsize=(10,10))

plt.bar(ind, defense, width=0.8, label='Defense', color='blue', bottom=attack+hp)

plt.bar(ind, attack, width=0.8, label='Attack', color='gold', bottom=hp)

plt.bar(ind, hp, width=0.8, label='Hp', color='red')

plt.xticks(ind, pokemon)

plt.ylabel("Value")

plt.xlabel("Pokemon")

plt.legend(loc="upper right")

plt.title("5 Pokemon Defense & Attack & Hp")

plt.show()

42.展示前5个宝可梦的Attack,HP的簇状条形图N = 5

pokemon_hp = df['HP'][:5]

pokemon_attack = df['Attack'][:5]

ind = np.arange(N)

width = 0.35

plt.bar(ind, pokemon_hp, width, label='HP')

plt.bar(ind + width, pokemon_attack, width,label='Attack')

plt.ylabel('Values')

plt.title('Pokemon Hp & Attack')

plt.xticks(ind + width / 2, (df['Name'][:5]),rotation=45)

plt.legend(loc='best')

plt.show()

43.展示前5个宝可梦的Defense,Attack,HP的堆积图x = df['Name'][:4]

y1 = df['HP'][:4]

y2 = df['Attack'][:4]

y3 = df['Defense'][:4]

labels = ["HP ", "Attack", "Defense"]

fig, ax = plt.subplots()

ax.stackplot(x, y1, y2, y3)

ax.legend(loc='upper left', labels=labels)

plt.xticks(rotation=90)

plt.show()

44.公用x轴,展示前5个宝可梦的Defense,Attack,HP的折线图x = df['Name'][:5]

y1 = df['HP'][:5]

y2 = df['Attack'][:5]

y3 = df['Defense'][:5]

# Create two subplots sharing y axis

fig, (ax1, ax2,ax3) = plt.subplots(3, sharey=True)

ax1.plot(x, y1, 'ko-')

ax1.set(title='3 subplots', ylabel='HP')

ax2.plot(x, y2, 'r.-')

ax2.set(xlabel='Pokemon', ylabel='Attack')

ax3.plot(x, y3, ':')

ax3.set(xlabel='Pokemon', ylabel='Defense')

plt.show()

45.展示前15个宝可梦的Attack,HP的折线图plt.plot(df['HP'][:15], '-r',label='HP')

plt.plot(df['Attack'][:15], ':g',label='Attack')

plt.legend();

46.用scatter的x,y,c属性,展示所有宝可梦的Defense,Attack,HP数据x = df['Attack']

y = df['Defense']

colors = df['HP']

plt.scatter(x, y, c=colors, alpha=0.5)

plt.title('Scatter plot')

plt.xlabel('HP')

plt.ylabel('Attack')

plt.colorbar();

47.展示所有宝可梦的***力的分布直方图,bins=10x = df['Attack']

num_bins = 10

n, bins, patches = plt.hist(x, num_bins, facecolor='blue', alpha=0.5)

plt.title('Histogram')

plt.xlabel('Attack')

plt.ylabel('Value')

plt.show()

48.展示所有宝可梦Type 1的饼图plt.figure(1, figsize=(8,8))

df['Type 1'].value_counts().plot.pie(autopct="%1.1f%%")

plt.legend()

49.展示所有宝可梦Type 1的柱状图ax = df['Type 1'].value_counts().plot.bar(figsize = (12,6),fontsize = 14)

ax.set_title("Pokemon Type 1 Count", fontsize = 20)

ax.set_xlabel("Pokemon Type 1", fontsize = 20)

ax.set_ylabel("Value", fontsize = 20)

plt.show()

50.展示综合评分最高的10只宝可梦的系数间的相关系数矩阵import seaborn as sns

top_10_pokemon=df.sort_values(by='Total',ascending=False).head(10)

corr=top_10_pokemon.corr()

fig, ax=plt.subplots(figsize=(10, 6))

sns.heatmap(corr,annot=True)

ax.set_ylim(9, 0)

plt.show()

作者:王大毛

来源:Python大数据分析

python画相关性可视化图上三角_完成这50个Matplotlib代码,你也能画出优秀的图表...相关推荐

  1. python画相关性可视化图_Python可视化很简单,一文教你绘制饼图、极线图和气泡图...

    matplotlib库作为Python数据化可视化的最经典和最常用库,掌握了它就相当于学会了Python的数据化可视化,上次呢,已经和大家聊了关于柱状图.条形图和直方图相关的东东,相信大家已经掌握了哈 ...

  2. python画相关性可视化图_Python可视化matplotlibseborn16-相关性热图

    本文速览普通相关性heatmap聚类相关性heatmap 本文将了解到什么? 1.数据准备 2.seaborn.heatmap绘制correlation heatmap 默认参数绘制correlati ...

  3. python画相关性可视化图_Python可视化16matplotlibseborn-相关性热图(correlation heatmap)...

    本文将了解到什么? 0.成品图展示 1.数据准备 2.seaborn.heatmap绘制correlation heatmap 默认参数绘制correlation heatmap vmax设置颜色深浅 ...

  4. python画相关性可视化图_Python 可视化 | 关联图 - 散点图1

    什么是关联图? 关联图是查找两个事物之间关系的图像,他能为我们展示出一个事物随着另一个事物的变化如何变化. 典型的关联图有:折线图.散点图.相关矩阵等 我们什么时候会需要关联图? 1.数据报告 &am ...

  5. python在一张图上画多个线条

    python 在一张图上画多个roc ptyon在一张图上添加图例 python将多个roc曲线画到一张图上 说明 我写了一个画图函数,这个函数可以画很多图在一个图上: 可以自由的确定画图个数 调用 ...

  6. MATLAB将两条曲线画在同一个图上

    在MATLAB中将两条曲线画在同一个图上,如果直接采用下面的代码,那么画的第二个图会将第一个图覆盖 plot(x,p1,'LineWidth',2); plot(x,p2,'LineWidth',2) ...

  7. python中用箱线图分析异常值_[宜配屋]听图阁

    前言 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被定义为观察值和平均值的偏差超过3倍 ...

  8. python 三维装箱可视化图代码

    文章目录 描述 基本思路 代码 具体结果 结尾 描述 问题背景,参数,模型和约束条件可以看我前一篇文章: C++调用CPLEX实现三位装箱.这里是只给出后面用python实现三维装箱可视化的代码. 基 ...

  9. 更便捷的画决策分支图的工具_做出更好决策的3个要素

    更便捷的画决策分支图的工具 Have you ever wondered: 您是否曾经想过: How did Google dominate 92.1% of the search engine ma ...

最新文章

  1. 深度揭秘Windows 7
  2. 新生男婴自带新冠抗体,感染者母亲如今抗体消失,医生:抗体转移了
  3. Postman工具之参数化
  4. 本地两台虚拟机构建NFS服务器和客户端
  5. HP ProLiant 服务器 - 基础知识
  6. android8.0和9.0平板电脑区别,安卓9.0和8.0有什么区别? 哪个更好
  7. 校园卡系统mysql与java结合_基于Java+JSP+Mysq+Servletl的校园卡一卡通管理系统
  8. 微信小程序 自定义底部导航栏
  9. 一键拼接所有微信好友头像
  10. 【路径规划】基于蚁群求解多旅行商MTSP问题matlab源码
  11. 相忘于江湖——记另一位朋友
  12. 英国伦敦国王学院计算机申请容易吗,2020年伦敦国王学院容易申请吗
  13. 众创空间和共享办公室有什么不同吗
  14. centos 6.6 安装图形界面 X server gnome Xwindows
  15. PHPMyWind支持ppt导入
  16. 如何通过postman生成接口测试脚本
  17. 电子商务巨头阿里巴巴正考虑在复杂供应链中使用区块链
  18. [附源码]SSM计算机毕业设计高校流动党员信息管理系统JAVA
  19. 当比你聪明的人还比你勤奋
  20. because it is a JDK dynamic proxy that implements问题 看这一篇就够了

热门文章

  1. 存在于实数域的微观粒子7-神经网络与电磁场
  2. 应用化学:从二氯甲烷到四氯化碳
  3. 机器学习书籍资料(自己正在读的)---self-reading ML booklist ( To be continued )
  4. bat 安装mysql_免安装版Mysql一键部署bat文档的方法
  5. access期刊可以重投几次_又被拒稿了?老司机带你一投即中
  6. Ardino基础教程 15_火焰报警器
  7. 雅客EXCEL(2)-数据、文本格式
  8. ESP8266、ESP32 和 ESP32-S2 对比
  9. 【PC工具】chrome插件:n多好用实用chrome插件
  10. 基于FAST-RCNN深度学习的目标识别算法的MATLAB仿真