Matplotlib画图总结

本文通过实例详细介绍了Matplotlib库的使用方法,包括散点图、柱状图、等高线图、图片显示、3D数据及动画效果的绘制。

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

最近学习了matplotlib的内容,在这里做一些总结。
主要时参考网易云小哥哥的课程讲解,自己也做了一些积累。
学习第三方库,加上自己的理解,再加上实操,是我喜欢的学习方式。
matplotlib画图分为以下几种方式(一一来做练习深入理解):
1.Scatter散点图

import matplotlib.pyplot as plt
import numpy as np
n=1024
#准备数据点,个数为n,产生数据均为平均值为零方差为一。
X=np.random.normal(0,1,n)
Y=np.random.normal(0,1,n)
#为数据点展示提供不同种类颜色
T=np.arctan2(Y,X)
#画图,xy轴,s表示大小,c表示color,alpha代表透明度
plt.scatter(X,Y,s=75,c=T,alpha=0.5)
#x,y轴坐标大小
plt.xlim((-1.5,1.5))
plt.ylim((-1.5,1.5))
#x,y轴坐标值的隐藏
#plt.xticks(())
#plt.yticks(())
#图表展示
plt.show()

展示图如下
这里写图片描述
2.柱状图

n=12
X=np.arange(n)
#根据x数值0-11产生随机数Y1,Y2
Y1=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2=(1-X/float(n))*np.random.uniform(0.5,1.0,n)
#柱状图绘制,主体颜色facecolor边框颜色edgecolor
plt.bar(X,+Y1,facecolor="#9999ff",edgecolor="white")
plt.bar(X,-Y2,facecolor="#ff9999",edgecolor="white")
#利用python zip集合数据获取x,y进行绘制文本信息,设置对其状态
for x,y in X,Y1:
    plt.text(x+0.1,y+0.08,"%.2f"%y,ha="center",va="bottom")
for x,y in zip(X,Y2):
    plt.text(x+0.1,-y-0.12,"%.2f"%y,ha="center",va="bottom")
plt.xlim(-.5,n)
plt.ylim((-1.25,1.25))
plt.xticks(())
plt.yticks(())
plt.show()

如图所示:
这里写图片描述
python zip注释
zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象。例如:zip(iterable1,iterable2, …)iterable – 一个或多个可迭代对象(字符串、列表、元祖、字典)
如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。
Python2中直接返回一个由元组组成的列表,Python3中返回的是一个对象,如果想要得到列表,可以用 list() 函数进行转换。
详见https://www.cnblogs.com/wushuaishuai/p/7766470.html
3.Contours等高线图

#设置每个点x,y高度
def f(x,y):
    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n=256
#生成x,y轴的256个数据
x=np.linspace(-3,3,n)
y=np.linspace(-3,3,n)
#将x,y转化为表格形式,其实等高线就是将每个点布置到网格上,并且将每个点计算出高度将其展示出来
X,Y=np.meshgrid(x,y)
#绘画等高线图的圈圈,8的含义就是区分多个等高线图的圈圈,数字越大区分等高线图越精细
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
#绘画等高线图的线
C=plt.contour(X,Y,f(X,Y),8,colors="black")
plt.clabel(C,inline=True,fontsize=10)
#plt.xticks(())
#plt.yticks(())
plt.show()

如图所示:
这里写图片描述
4.Image图片

#设置图片数据3*3格子
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
              0.365348418405, 0.439599930621, 0.525083754405,
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
#设置显示图片的类型,展示形式,每个参数样式多种
#interpolation图片展现样式参考http://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html
#cmap颜色类型参考https://matplotlib.org/examples/color/colormaps_reference.html
#origin颜色变化形式参考http://matplotlib.org/examples/pylab_examples/image_origin.html
plt.imshow(a, interpolation='none', cmap='cool', origin='lower')
#设置颜色框,缩进程度
plt.colorbar(shrink=.92)
plt.xticks(())
plt.yticks(())
plt.show()

如图所示:
这里写图片描述
5.3D数据

from mpl_toolkits.mplot3d import Axes3D
#figsize:以英寸为单位的宽高,缺省值为 rc figure.figsize (1英寸等于2.54厘米)
fig=plt.figure(figsize=(16,12))
ax=Axes3D(fig)
#设置X,Y的值
#arange([start,] stop[, step,], dtype=None)根据start与stop指定的范围以及step设定的步长,生成一个 ndarray**: dtype
X=np.arange(-4,4,0.25)
Y=np.arange(-4,4,0.25)
X,Y=np.meshgrid(X,Y)
#设置高的值
R=np.sqrt(X**2+Y**2)
Z=np.sin(R)
#绘图,rstride,cstride设置横纵方向的密度程度,绘制颜色
ax.plot_surface(X,Y,Z,rstride=1,cstride=1,cmap="rainbow")
#绘制投影等高线图,zdir按照哪个方向投,最终投影位置是多少,投影颜色是什么
ax.contourf(X,Y,Z,zdir='z',offset=1,cmap="rainbow")
ax.set_zlim=(-2,2)
plt.show()

这里写图片描述
6.Animation动画效果画图

from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np
fig,ax=plt.subplots()
x=np.arange(0,2*np.pi,0.01)
line,=ax.plot(x,np.sin(x))
def animate(i):
    line.set_ydata(np.sin(x+i/10))
    return line,
def init():
    line.set_ydata(np.sin(x))
    return line,
#animaion动画函数很多,其中FuncAnimation算做其中一种
#参数:fig当前动画面板,fun自定义动画函数,frames有多少帧调用动画函数更新迭代(等i更新到500回到初始点,调用500次animaion)
#init初始化动画函数 interval多长时间更新一次桢调用一次animaion,blit整张图进行更新(所有变化点)
ani=animation.FuncAnimation(fig=fig,func=animate,frames=500,init_func=init,interval=50,blit=True)
#改变上面这些参数就可以实现不同效果形式的动画咯
plt.show()

这里写图片描述

### 如何设置 Matplotlib 生成图表的尺寸 在 Matplotlib 中,可以通过多种方式来调整生成图表的尺寸。以下是具体方法及其说明: #### 使用 `Figure` 对象的参数 `figsize` 当创建一个新的 Figure(画布)对象时,可以直接通过 `figsize` 参数指定其尺寸。该参数接受一个元组 `(width, height)`,单位为英寸。 ```python import matplotlib.pyplot as plt # 创建一个宽度为8英寸、高度为6英寸的画布 fig = plt.figure(figsize=(8, 6)) plt.plot([1, 2, 3], [4, 5, 6]) plt.show() ``` 上述代码中的 `figsize=(8, 6)` 表示生成的图表宽为8英寸,高为6英寸[^5]。 --- #### 动态修改图表尺寸 如果已经创建了一个 Figure 对象,也可以动态地更改其尺寸。这可以通过 `set_figwidth` 和 `set_figheight` 方法实现。 ```python fig = plt.figure() # 修改宽度和高度 fig.set_figwidth(10) # 宽度设为10英寸 fig.set_figheight(5) # 高度设为5英寸 plt.plot([1, 2, 3], [4, 5, 6]) plt.show() ``` 这里分别使用了 `set_figwidth` 和 `set_figheight` 来单独调整宽度和高度[^1]。 --- #### 获取当前图表尺寸 为了验证或调试图表尺寸,可以使用 `get_size_inches` 方法获取当前图表的实际尺寸。 ```python fig = plt.figure(figsize=(6, 4)) print(fig.get_size_inches()) # 输出: [6. 4.] ``` 此方法返回的是一个 NumPy 数组,表示当前图表的宽度和高度(单位为英寸)。它可以帮助开发者确认所设定的尺寸是否生效。 --- #### 调整 DPI 影响实际显示效果 除了设置 `figsize` 外,DPI(每英寸点数)也会影响最终渲染的效果。默认情况下,Matplotlib 的 DPI 是 100。如果希望提高分辨率或者改变输出文件的质量,可以调整这个值。 ```python fig = plt.figure(figsize=(6, 4), dpi=200) plt.plot([1, 2, 3], [4, 5, 6]) plt.savefig('high_res_plot.png') # 保存为高质量图片 plt.show() ``` 在此例子中,虽然 `figsize` 不变,但由于设置了更高的 DPI 值 (200),因此生成的图像更加清晰。 --- #### 自定义字体和其他细节配合整体设计 对于更复杂的场景,可能还需要同步调整其他元素的比例关系,比如坐标轴标签文字大小、图例位置等。下面是一个综合案例展示如何协调各部分样式以匹配新的图表尺寸。 ```python import numpy as np import matplotlib.pyplot as plt font_style = {'family': 'serif', 'color': 'darkred', 'weight': 'normal', 'size': 16} x = np.linspace(0, 10, 100) y = np.sin(x) fig = plt.figure(figsize=(12, 8)) # 更大一些的画布 ax = fig.add_subplot(111) ax.plot(x, y, label='Sine Wave') ax.set_title('A Sine Curve Example', fontsize=20) ax.set_xlabel('X Axis Label', fontdict=font_style) ax.set_ylabel('Y Axis Label', fontdict=font_style) ax.legend(prop={'size': 14}) ax.tick_params(axis='both', which='major', labelsize=14) plt.tight_layout() # 确保不会重叠 plt.show() ``` 这段脚本不仅改变了整个窗口大小,还重新配置了一些附属组件如标题字型大小以及刻度标注风格等内容[^4]。 --- ### 总结 以上介绍了几种常见的用于控制 Matplotlib 图表尺寸的方法,包括初始化阶段利用 `figsize` 参数直接声明期望规格;运行期间借助 API 函数灵活变更现有实例属性;最后考虑附加因素像像素密度影响视觉呈现质量等问题。合理运用这些技术能够帮助我们制作出既美观又实用的数据可视化作品。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值