数据可视化---绘制3D图表和统计地图
·
题目一:
编写程序。在上节课题目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的要求,绘制展示正弦曲线和余弦曲线的图表,实现过程如下:
- 导入numpy、matplotlib.pyplot模块;
- 准备数据;
- 绘制正弦曲线和余弦曲线;
- 设置x轴的刻度标签为-2π、-3π/2、-π、-π/2、0、π/2、π、3π/2、2π;
- 设置y轴的刻度标签为-1.0、-0.5、0.0、0.5、1.0;
- 隐藏坐标轴的上轴脊和右轴脊;
- 将坐标轴的以数据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散点图,实现过程如下:
- 导入numpy、matplotlib.pyplot模块以及Axes3D类;
- 准备x、y、z轴的数据;
- 创建三维坐标系的绘图区域,并在该区域中绘制3D散点图;
- 设置x、y、z轴的标签为“x轴”、“y轴”、“z轴”;
- 设置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()
运行结果:

更多推荐

所有评论(0)