pythonmatplotlib数据可视化(五)(patches绘制⼏何图形,圆,矩形,圆。。
⽬录
使⽤模块化patches绘制⼏何图形
圆的实现⽅法
# 导⼊包
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import numpy as np
# 绘图
fig,ax = plt.subplots(2,2)
# ⼦图(221)
circle=Circle((2,2),radius=2,facecolor='white',edgecolor='cornflowerblue')
# (2,2)圆⼼坐标,radius圆的半径,facecolor圆的填充颜⾊,edgecolor圆的轮廓颜⾊
ax[0,0].add_patch(circle)
# 调⽤实例⽅法add_patch()将实例circle以参数值形式添加到坐标轴实例ax[0,0]中,从⽽完成指定位置和半径的圆的绘制
ax[0,0].set_xlim(-1,5)
ax[0,0].set_ylim(-1,5)
# 调⽤实例调整x,y轴的坐标轴显⽰范围
# ⼦图(222)
rectangle=ax[0,1].patch
rectangle.set_facecolor('gold')
# 调⽤rectangle的实例⽅法set_facecolor()设置⼦区坐标轴的背景⾊
circle=Circle((2,2),radius=2,facecolor='white',edgecolor='cornflowerblue')
ax[0,1].add_patch(circle)
ax[0,1].set_xlim(-1,5)
ax[0,1].set_ylim(-1,5)
ax[0,1].set_aspect('equal','box')
# (221)⼦图中,圆呈现出椭圆形,是由于x,y轴的刻度线的变化量不同,采⽤ax[0,1].set_aspect('equal','box')使其相同
# ⼦图(223)
rectangle=ax[1,0].patch
# 通过ax.patch语句来获得rectangle的实例
rectangle.set_facecolor('palegreen')
circle=Circle((2,2),radius=2,facecolor='white',edgecolor='cornflowerblue')
ax[1,0].add_patch(circle)
ax[1,0].axis('equal')
# 相⽐(222)将刻度线的变化量进⾏调整,使之保持相同的增量,不进⾏x,y轴的坐标轴显⽰范围的操作
# ⼦图(224)
rectangle=ax[1,1].patch
rectangle.set_facecolor('lightskyblue')
circle=Circle((2,2),radius=2,facecolor='white',edgecolor='cornflowerblue')
ax[1,1].add_patch(circle)
ax[1,1].axis([-1,5,-1,5]) # 调整x,y轴的坐标轴显⽰范围
ax[1,1].set_yticks(np.arange(-1,6,1)) # 调整刻度线的位置
ax[1,1].axis('equal') # 调整刻度线的变化量
plt.subplots_adjust(left=0.1) # 调整⼦图位置
plt.show()
椭圆的实现⽅法
# 绘图
fig,ax = plt.subplots(1,2,subplot_kw={'aspect':'equal'})
# ⼦图(121)
angles=np.linspace(0,135,4) # 获取四个旋转⾓度的数组
ellipse=[Ellipse((2,2),4,2,a)for a in angles]
# 获得逆时针旋转4个⾓度的椭圆实例列表,这是⼀个推导列表
matplotlib中subplot
for elle in ellipse:
ax[0].add_patch(elle)
elle.set_alpha(0.4)
elle.set_color('cornflowerblue')
# 通过for循环,将椭圆实例分别添加到⼦区1中的坐标轴实例ax[0]中
# 同时使⽤set.alpha()和lor()设置椭圆实例的透明度及填充颜⾊
ax[0].axis([-1,5,-1,5]) # 调整坐标轴的显⽰范围
# ⼦图(222)见补充详解3
num=np.arange(0,100,1)
ellipse=[Ellipse(xy=np.random.rand(2)*10,
width=np.random.rand(1),
height=np.random.rand(1),
angle=np.random.rand(1)*360)
for i in num]
# 通过推导列表⽣成了椭圆中⼼位置、宽度、长度和旋转⾓度,都是随机设定的椭圆实例列表ellipse()
for elle in ellipse:
ax[1].add_patch(elle)
elle.set_alpha(np.random.rand(1))
elle.set_color(np.random.rand(3))
# 通过for循环,调⽤实例⽅法add_patch()将推导列表ellipse中的实例元素添加到坐标轴实例ax[1]中
# 随机设定椭圆实例的透明度和填充颜⾊,其中填充颜⾊使⽤的是0~1闭区间的浮点数形式的RGB元组,即(R,G,B)颜⾊模式ax[1].axis([-1,11,-1,11])
plt.tight_layout()
plt.show()
结果如下:
矩形的实现⽅法
# 绘图
fig,ax = plt.subplots(subplot_kw={'aspect':'equal'})
x1=np.arange(1,2.6,0.1)
y1=x1+2
x2=np.arange(2.5,4.1,0.1)
y2=-x2+7
# 设置背景颜⾊
rectangle=ax.patch
# 通过ax.patch语句来获得rectangle的实例,Rectangle(xy=(0,0),width=1,height=1)
rectangle.set_facecolor('lightskyblue') # 设置坐标轴实例ax的背景⾊
# 房⼦
rectangle1=Rectangle((1,0),3,3,facecolor='w',edgecolor='rosybrown')
# 绘制第⼀个矩形,,矩形左下⾓顶点坐标(1,0),矩形宽度和⾼度都是3,,矩形内部填充颜⾊为⽩⾊w,轮廓颜⾊为棕⾊
# 门
rectangle2= Rectangle((1.5,0),1,1.5,facecolor='w',edgecolor='rosybrown',hatch='|||')
# 与上⾯矩形绘制同理,但是添加了hatch='|||',使房⼦的门产⽣⽊质纹理的展⽰效果
# 窗
rectangle3=Rectangle((2.9,1.7),0.6,0.6,facecolor='w',edgecolor='rosybrown')
rectangle_list=[rectangle1,rectangle2,rectangle3]
# roof line
ax.plot([1,2.5,4],[3,4.5,3],color='rosybrown')
# 绘制房顶三⾓形区域,[1,2.5,4],[3,4.5,3]分别是x,y的坐标值,也即三个坐标点(1,3)(2.5,4.5)(4,3)
# window line
ax.plot([3.2,3.2],[1.7,2.3],color='rosybrown')
ax.plot([2.9,3.5],[2.0,2.0],color='rosybrown')
# 通过plot()实例⽅法,向第三个矩形中添加了窗户的窗框,也即是窗户⾥⾯的⼗字形
# roof filled color
ax.fill_between(x1,3,y1,color='w',interpolate=True)
ax.fill_between(x2,3,y2,color='w',interpolate=True)
for rect in rectangle_list:
ax.add_patch(rect)
# 利⽤for循环,向画布中添加图像
ax.axis([0,5,0,6])
plt.show()
圆弧和楔形的绘制⽅法
# 导⼊包
import matplotlib.pyplot as plt
from matplotlib.patches import Arc,Ellipse,Rectangle,Wedge
import numpy as np
# 绘图
fig,ax = plt.subplots(subplot_kw={'aspect':'equal'})
# shadow,见详解1
shadow=Ellipse((2.5,0.5),4.2,0.5,color='silver',alpha=0.2)
# base
ax.plot([1,4],[1,1.3],color='k')
base = Arc((2.5, 1.1), 3, 1, angle=10, theta1=0, theta2=180, color='k', alpha=0.8)
# (2.5,1.1)圆弧的中⼼位置的坐标,3是圆弧的宽度,1是圆弧的⾼度,angle圆弧逆时针旋转的⾓度# theta1圆弧起点处的⾓度,theta2圆弧终点处的⾓度,color圆弧的颜⾊,alpha圆弧的透明度
# wheel
left_wheel=Ellipse((1,1),0.7,0.4,angle=95,color='k')
right_wheel=Ellipse((4,1.3),0.7,0.4,angle=85,color='k')
# jionstyle
bottom_jionstyle1=Ellipse((2.5,2),1,0.3,facecolor='silver',edgecolor='w')
bottom_jionstyle2=Ellipse((2.5,1.7),1,0.3,facecolor='silver',edgecolor='w')
left_jionstyle=Ellipse((1,5.75),0.5,0.25,angle=90,color='k')
left_arm_jionstyle1=Wedge((0.3,4.55),0.1,0,360,color='k')
left_arm_jionstyle2=Wedge((0,4),0.2,0,290,color='k')
right_jionstyle=Ellipse((4,5.75),0.5,0.25,angle=90,color='k')
right_arm_jionstyle1=Wedge((4.3,6.95),0.1,0,360,color='k')
right_arm_jionstyle2=Wedge((4.3,7.45),0.2,110,70,color='k')
top_jionstyle1=Ellipse((2.5,6.2),0.5,0.2,facecolor='silver',edgecolor='w')
top_jionstyle2=Ellipse((2.5,6.2),0.5,0.2,facecolor='silver',edgecolor='w')
# body
body=Rectangle((1,2.1),3,4,color='steelblue')
# arms
left_arm1=ax.plot([0.3,1-0.125],[4.55,5.75],color='silver',lw=4)
left_arm2=ax.plot([0,3],[4.2,4.55],color='silver',lw=4)
right_arm1=ax.plot([4+0.25,4.3],[5.75,6.95],color='silver',lw=4)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。