pyhthon中星号_pyhthon的Matplotlib库的详细信息,之,matplotlib,详解

pyhthon中星号_pyhthon的Matplotlib库的详细信息,之,matplotlib,详解首先要导入 mayplotlib 是一个类似于 matlab 的工具包 一 认识 matplotlib 在任何绘图之前 我们需要一个 Figure 对象 可以理解成我们需要一张画板才能开始绘图 在拥有 Figure 对象之后 在作画前我们还需要轴 没有轴的话就没有绘图基准 所以需要添加 Axes importmatplo pyplotaspltf plt figure ax fig add

首先要导入mayplotlib,是一个类似于matlab的工具包。

一.认识matplotlib

在任何绘图之前,我们需要一个Figure对象,可以理解成我们需要一张画板才能开始绘图。在拥有Figure对象之后,在作画前我们还需要轴,没有轴的话就没有绘图基准,所以需要添加Axes。

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(111)

ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title=’An Example Axes’,

ylabel=’Y-Axis’, xlabel=’X-Axis’)

plt.show()

在处理复杂的绘图工作时,需要使用 Axes 来完成作画

fig = plt.figure()

ax1 = fig.add_subplot(221)

ax2 = fig.add_subplot(222)

ax3 = fig.add_subplot(223)

ax4 = fig.add_subplot(224)

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

axes[0,0].set(title=’Upper Left’)

axes[0,1].set(title=’Upper Right’)

axes[1,0].set(title=’Lower Left’)

axes[1,1].set(title=’Lower Right’)

0899b8dab2197b2f4b792e3863f814ff.png

二.多种绘图方式

1.plot二维图

用linespace生成一组等间隔数据

import matplotlib.pyplot as plt

import numpy as np

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

y = np.cos(x)

z=np.cos(2*x)

plt.plot(x, y, x,z,ls=”-“, lw=2, label=”plot figure”)

plt.legend()

plt.show()

310d8e4613ba82910793d050cfb7999b.png

进一步从数组中选择元素

mask=y>=0 //产生一组bool值

plt.plot(x[mask],y[mask],’ro-‘) //参数例如颜色,线条等和matlab基本类似

plt.legend()

plt.show()

af95e9f4293e3664c937606685159fe3.png

以通过关键字参数的方式绘图

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

data_obj = {‘x’: x,

‘y1’: 2 * x + 1,

‘y2’: 3 * x + 1.2,

‘mean’: 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}

fig, ax = plt.subplots()

#填充两条线之间的颜色

ax.fill_between(‘x’, ‘y1’, ‘y2′, color=’yellow’, data=data_obj)

ax.plot(‘x’, ‘mean’, color=’black’, data=data_obj)

plt.show()

8d4f28acb06fa52ff9c45a14c4f28121.png

2.scatter散点图

只画点,但是不用线连接起来。

x = np.arange(10) //arange函数用于创建等差数组,返回array对象

y = np.random.randn(10)

plt.scatter(x, y, color=’black’, marker=’o’)

plt.show()

d3b5137119ed39e11fcc91f0dced8be9.png

np.random.seed()

N = 50

x = np.random.rand(N)

y = np.random.rand(N)

colors = np.random.rand(N)

area = (30 * np.random.rand(N))2 # 0 to 15 point radii

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

plt.show()

dbbbad5041212bddc360972699f1d33b.png

3.条形图

np.random.seed(1)

x = np.arange(5)

y = np.random.randn(5)

fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2))

vert_bars = axes[0].bar(x, y, color=’black’, align=’center’)

horiz_bars = axes[1].barh(x, y, color=’blue’, align=’center’)

#在水平或者垂直方向上画线

#plt.axhline(y=0.0, c=”r”, ls=”–“, lw=2)

#y:水平参考线的出发点,c:参考线的线条颜色,ls:参考线的线条风格,lw:参考线的线条宽度

axes[0].axhline(0, color=’gray’, linewidth=2)

axes[1].axvline(0, color=’gray’, linewidth=2)

plt.show()

a93a00bd046ccc09a65768839b351012.png

条形图还返回了一个Artists 数组,对应着每个条形,例如上图 Artists 数组的大小为5,我们可以通过这些 Artists 对条形图的样式进行更改,如下例:

ig, ax = plt.subplots()

vert_bars = ax.bar(x, y, color=’lightblue’, align=’center’)

# We could have also done this with two separate calls to `ax.bar` and numpy boolean indexing.

#zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

for bar, height in zip(vert_bars, y):

if height < 0:

bar.set(edgecolor=’darkred’, color=’salmon’, linewidth=3)

plt.show()

7488feee93be26f667e077c8800369ec.png

堆积图:

x=np.arange(5)#给出在y轴上的位置

y=np.array([5,4,7,2,9])#给出具体每个直方图的数值

y1=np.array([3,5,2,4,10])#给出第二组直方图信息

y2=np.array([3,4,6,2,5])#给出第三组数据

plt.bar(x,y,label=’workday’)

plt.bar(x,y1,bottom=y,label=’weekend’)

plt.bar(x,y2,bottom=y+y1,label=’Christmas’)

plt.legend()#列出图例

plt.show()

40061da04e7bfc602c122aa5ca1e610d.png

需要注意的是x,y1,y2即数据来源最好使用np.ndarray格式的数据,普通的python列表数据很可能失败报错。其中将python list数据转为np.ndarray的方式为

list_a=[1,2,3,4]

list_b=np.array(list_a)

4.直方图

用于统计数据出现的次数或者频率,有多种参数可以调整,主要用hist()函数

np.random.seed()

n_bins = 10

x = np.random.randn(1000, 3)

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

#flatten()用于将二维数组转化成一维,只用于array和mat

ax0, ax1, ax2, ax3 = axes.flatten()

colors = [‘red’, ‘tan’, ‘lime’]

#hist()函数参数设置,density控制Y轴是概率还是数量

ax0.hist(x, n_bins, density=True, histtype=’bar’, color=colors, label=colors)

ax0.legend(prop={‘size’: 10})

ax0.set_title(‘bars with legend’)

ax1.hist(x, n_bins, density=True, histtype=’barstacked’)

ax1.set_title(‘stacked bar’)

ax2.hist(x, histtype=’barstacked’, rwidth=0.9)

ax3.hist(x[:, 0], rwidth=0.9)

ax3.set_title(‘different sample sizes’)

fig.tight_layout()

plt.show()

c92e4c5778672de79ddec1e2ed91a1bc.png

5.饼图

autopct=%1.1f%%

表示格式化百分比精确输出,

explode

,突出某些块,不同的值突出的效果不一样。

pctdistance=1.12

百分比距离圆心的距离,默认是0.6.

labels = ‘Math’, ‘English’, ‘Physics’, ‘Chemistry’

sizes = [15, 30, 45, 10]

explode = (0, 0.1, 0, 0) # only “explode” the 2nd slice (i.e. ‘Hogs’)

fig1, (ax1, ax2) = plt.subplots(2)

ax1.pie(sizes, labels=labels, autopct=’%1.1f%%’, shadow=True)

ax1.axis(‘equal’)

ax2.pie(sizes, autopct=’%1.2f%%’, shadow=True, startangle=90, explode=explode,

pctdistance=1.12)

ax2.axis(‘equal’)

ax2.legend(labels=labels, loc=’upper right’)

plt.show()

82015e0b002b57b05f649b219061aa45.png

6.网格图:

X,Y = numpy.meshgrid(x, y)

输入的

x

y

,就是

网格点

的横纵坐标列向量(非矩阵)

输出的

X

Y

,就是

坐标矩阵

ret = np.mgrid[ 第1维,第2维 ,第3维 , …]

返回多值,以多个矩阵的形式返回,

第1返回值为第1维数据在最终结构中的分布,

第2返回值为第2维数据在最终结构中的分布,以此类推。

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

x = np.arange(-5, 5, 0.1)

y = np.arange(-5, 5, 0.1)

xx, yy = np.meshgrid(x, y ) # 转换成二维的矩阵坐标

fig = plt.figure(1, figsize=(12, 8))

zz = (xx2 + yy2)

ax = fig.add_subplot(2, 2, 1, projection=’3d’)

ax.set_top_view()

ax.plot_surface(xx, yy, zz, rstride=1, cstride=1, cmap=’rainbow’)

plt.show()

813a98f6a8ab3302b38b1eedd0f4d6db.png

7.轮廓图:

机器学习用的决策边界也常用轮廓图来绘画

contourf会填充轮廓线之间的颜色。数据x, y, z通常是具有相同 shape 的二维矩阵。x, y 可以为一维向量,但是必需有 z.shape = (y.n, x.n) ,这里 y.n 和 x.n 分别表示x、y的长度。Z通常表示的是距离X-Y平面的距离,传入X、Y则是控制了绘制等高线的范围。

fig, (ax1, ax2) = plt.subplots(2)

x = np.arange(-5, 5, 0.1)

y = np.arange(-5, 5, 0.1)

xx, yy = np.meshgrid(x, y, sparse=True)

z = np.sin(xx2 + yy2) / (xx2 + yy2)

ax1.contourf(x, y, z)

ax2.contour(x, y, z)

16869840f4a6c3603d1a3f765234163d.png

三.布局,图例说明等

1.区间上下限

ax.set_xlim([xmin, xmax]) #设置X轴的区间

ax.set_ylim([ymin, ymax]) #Y轴区间

ax.axis([xmin, xmax, ymin, ymax]) #X、Y轴区间

ax.set_ylim(bottom=-10) #Y轴下限

ax.set_xlim(right=25) #X轴上限

2.图例说明

fig, ax = plt.subplots()

ax.plot([1, 2, 3, 4], [10, 20, 25, 30], label=’Philadelphia’)

ax.plot([1, 2, 3, 4], [30, 23, 13, 4], label=’Boston’)

ax.scatter([1, 2, 3, 4], [20, 10, 30, 15], label=’Point’)

ax.set(ylabel=’Temperature (deg C)’, xlabel=’Time’, title=’A tale of two cities’)

#加标题,x,y轴标签

ax.set_title(“title”);

ax.set_xlabel(“x”)

ax.set_ylabel(“y”);

ax.legend() //显示条例说明,legend()自身也可以设置

plt.show()

3.区间分段

data = [(‘apples’, 2), (‘oranges’, 3), (‘peaches’, 1)]

fruit, value = zip(*data)

fig, (ax1, ax2) = plt.subplots(2)

x = np.arange(len(fruit))

ax1.bar(x, value, align=’center’, color=’gray’)

ax2.bar(x, value, align=’center’, color=’gray’)

ax2.set(xticks=x, xticklabels=fruit)

#ax.tick_params(axis=’y’, direction=’inout’, length=10) #修改 ticks 的方向以及长度

plt.show()

1b2b131ee47cd1a7ddbfde57b9b69ab9.png

4.布局

fig, axes = plt.subplots(2, 2, figsize=(9, 9))

#水平之间的间隔wspace,垂直方向上的间距hspace,左边距left等等,这里数值都是百分比的

fig.subplots_adjust(wspace=0.5, hspace=0.3,

left=0.125, right=0.9,

top=0.9, bottom=0.1)

#fig.tight_layout() #自动调整布局,使标题之间不重叠

plt.show()

可以调整使他们使用一样的X、Y轴:

fig, (ax1, ax2) = plt.subplots(1, 2, sharex=True, sharey=True)

5.轴相关

fig, ax = plt.subplots()

ax.plot([-2, 2, 3, 4], [-10, 20, 25, 5])

ax.spines[‘top’].set_visible(False) #顶边界不可见

ax.xaxis.set_ticks_position(‘bottom’) # ticks 的位置为下方,分上下的。

ax.spines[‘right’].set_visible(False) #右边界不可见

ax.yaxis.set_ticks_position(‘left’)

# “outward”

# 移动左、下边界离 Axes 10 个距离

#ax.spines[‘bottom’].set_position((‘outward’, 10))

#ax.spines[‘left’].set_position((‘outward’, 10))

# “data”

# 移动左、下边界到 (0, 0) 处相交

ax.spines[‘bottom’].set_position((‘data’, 0))

ax.spines[‘left’].set_position((‘data’, 0))

# “axes”

# 移动边界,按 Axes 的百分比位置

#ax.spines[‘bottom’].set_position((‘axes’, 0.75))

#ax.spines[‘left’].set_position((‘axes’, 0.3))

#ax.spines[‘left’].set_color(‘red’)

#ax.spines[‘left’].set_linewidth(2)

plt.show()

8925acacb25d8ecb2927e8c86f02a5aa.png

也可以将轴的刻度设置成对数刻度,调用 set_xscale 与 set_yscale 设置刻度,参数选择 “log”

或者改变刻度

fig, axes = plt.subplots(1, 2, figsize=(10,4))

axes[0].plot(x, x2, x, exp(x))

axes[0].set_title(“Normal scale”)

axes[1].plot(x, x2, x, exp(x))

axes[1].set_yscale(“log”)

axes[1].set_yticks([0, 50, 100, 150])

axes[1].set_title(“Logarithmic scale (y)”)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210686.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午7:07
下一篇 2026年3月19日 上午7:07


相关推荐

  • phpstorm激活码2021-激活码分享

    (phpstorm激活码2021)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月22日
    54
  • python转置矩阵画流程图_python 矩阵转置transpose

    python转置矩阵画流程图_python 矩阵转置transposearr=np.arange(16).reshape((2,2,4))arr的array是这样的array([[[0,1,2,3],[4,5,6,7]],[[8,9,10,11],[12,13,14,15]]])我们对arr进行transpose转置,arr2=arr.transpose((1,0,2)),结果是这样:array([[[0,1,2,3…

    2022年5月8日
    66
  • RT-Thread下finsh原理浅析

    RT-Thread下finsh原理浅析原文:http://www.rt-thread.org/phpBB3/viewtopic.php?f=3&t=2865一直想探寻rtt的finsh原理,最近终于下定决心跑一跑这段代码,若有不对之处还望多多指针。RT-Thread的FinshShell接口实际上是一个线程,入口在shell.c,入口函数为代码:全选voidfinsh_thread_entry(vo…

    2022年5月21日
    39
  • 浏览器缓存详解

    浏览器缓存详解搞懂前端缓存总的来说 如果开启了 ServiceWorke 首先会从 ServiceWorke 中拿如果新开一个以前打开过的页面缓存会从 DiskCache 中拿 前提是命中强缓存 刷新当前页面时浏览器会根据当前运行环境内存来决定是从 MemoryCache 还是从 DiskCache 中拿 可以看到下图最后几个文件有时候是从 MemoryCache 中拿有时候是从 DiskCache 中拿 注意 以上回答全部基于 chrome 浏览器搞懂前端缓存前端缓存 后端缓存扯了些没用的 我们先进入定

    2026年3月26日
    1
  • 浏览器打开JSP文件只显示源代码的问题

    浏览器打开JSP文件只显示源代码的问题地址栏输入 http Tomcat 服务器二点 IP 地址 或域名 端口 JSP 页面的名字如 在 Tomcat 的 webapps 下新建 ch1 文件夹 里面存放 letter jsp 文件 可输入地址 http localhost 8080 ch1 letter jsp

    2026年3月26日
    2
  • DOS攻击工具(dos攻击教程)

    DOS攻击工具(dos攻击教程)DoS(DenialOfService)攻击是指故意的攻击网络协议实现的缺陷或直接通过野蛮手段残忍地耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃然而随着网络上免费的可用DDoS工具增多,DoS攻击也日益增长,下面介绍几款Hacker常用的DoS攻击工具。特别提示:仅用于攻防演练及教学测试用途,禁止非法使用。1、卢瓦(LO…

    2022年4月18日
    562

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号