题目一:

编写程序。在上节课题目5的基础上绘制五边形,隐藏上轴脊和右轴脊、#移动轴脊的位置,绘制如下图。

程序代码:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
polygon = mpathes.RegularPolygon((0.5, 0.5), 5, 0.3, color='y')
ax = plt.axes((0.3, 0.3, 0.5, 0.5))
ax.add_patch(polygon)
# 依次隐藏上轴脊、左轴脊和右轴脊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
#移动轴脊的位置
ax.spines["left"].set_position(("data",0.5))
ax.spines["bottom"].set_position(("data",0.5))
#坐标轴上刻度线的位置
ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")

plt.show()

运行结果:

题目二:

编写程序。根据第6章实例3的要求,绘制展示正弦曲线和余弦曲线的图表,实现过程如下:

  1. 导入numpy、matplotlib.pyplot模块;
  2. 准备数据;
  3. 绘制正弦曲线和余弦曲线;
  4. 设置x轴的刻度标签为-2π、-3π/2、-π、-π/2、0、π/2、π、3π/2、2π;
  5. 设置y轴的刻度标签为-1.0、-0.5、0.0、0.5、1.0;
  6. 隐藏坐标轴的上轴脊和右轴脊;
  7. 将坐标轴的以数据0为中心位置。

程序代码:

import numpy as np
import matplotlib.pyplot as plt

#line
x=np.linspace(-np.pi, np.pi, 256, endpoint=True)

#定义余弦函数正弦函数
c,s=np.cos(x),np.sin(x)
plt.figure(1)

#画图,以x为横坐标,以c为纵坐标
plt.plot(x, c, color="blue", linestyle="-", label="COS", alpha=0.5)
plt.plot(x, s, "r*", label="SIN")

#增加标题
plt.title("COS & SIN")
ax=plt.gca()
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")
ax.spines["left"].set_position(("data",0))
ax.spines["bottom"].set_position(("data",0))
ax.xaxis.set_ticks_position("bottom")
ax.yaxis.set_ticks_position("left")

plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])
plt.yticks(np.linspace(-1,1,5,endpoint=True))

for label in ax.get_xticklabels()+ax.get_yticklabels():
    label.set_fontsize(16)
label.set_bbox(dict(facecolor="white",edgecolor="None",alpha=0.2))

#图例显示
plt.legend(loc="upper left")
#显示网格
plt.grid()

#显示范围
#plt.axis([-1,1,-0.5,1])
plt.fill_between(x,np.abs(x)<0.5,c,c>0.5,color="green",alpha=0.25)
t=1
plt.plot([t,t],[0,np.cos(t)],"y",linewidth=3,linestyle="--")
plt.annotate("cos(1)",xy=(t,np.cos(1)),xycoords="data",xytext=(+10,+30),
textcoords="offset points",arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))

#显示图形
plt.show()

运行结果:

题目三:

编写程序。根据第7章7.1.2,绘制3D线框图,效果如下。

程序代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
#获取测试数量
X, Y, Z = axes3d.get_test_data(0.05)
#绘制3d线框图
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
plt.show()

运行结果:

题目四:

编写程序。根据第7章7.1.2,绘制3D曲面图,效果如下。

程序代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

x1 = np.arange(-5, 5, 0.25)
y1 = np.arange(-5, 5, 0.25)
x1, y1 = np.meshgrid(x1, y1)
r1 = np.sqrt(x1**2 + y1**2)
z1 = np.sin(r1)

fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
#绘制曲面图
ax.plot_surface(x1, y1, z1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
#设置z轴刻度的范围、位置、格式
ax.set_zlim(-1.01, 1.01)

plt.show()

运行结果:

题目五:

编写程序。根据实例1的要求,绘制一个3D散点图,实现过程如下:

  1. 导入numpy、matplotlib.pyplot模块以及Axes3D类;
  2. 准备x、y、z轴的数据;
  3. 创建三维坐标系的绘图区域,并在该区域中绘制3D散点图;
  4. 设置x、y、z轴的标签为“x轴”、“y轴”、“z轴”;
  5. 设置3D图表的标题为“3D散点图”。

程序代码:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

#生成测试数据
x = np.random.randint(0, 40, 30)
y = np.random.randint(0, 40, 30)
z = np.random.randint(0, 40, 30)
#创建3维坐标系的绘图区域
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
for xx, yy, zz in zip(x, y, z):
    color = 'y'
    if 10 < zz < 20:
        color = 'b'
    elif zz >= 20:
        color = "#008B8B"
    ax.scatter(xx, yy, zz, c=color, marker='*', s=160, linewidth=1, edgecolor='black')
ax.set_xlabel('x轴')
ax.set_ylabel('y轴')
ax.set_zlabel('z轴')
ax.set_title('3D散点图', fontproperties='simhei', fontsize=14)
plt.tight_layout()
plt.show()

运行结果:

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐