matplotlib.pyplot.hist(x,bins = None,range = None,color = None,label = None, …, ** kwargs)
x -- 表示输入值。
arr_random = np.random.randn(100) # 创建随机数组-正态
plt.hist(arr_random, bins=8, color='g', alpha=0.7) # 绘制直方图
plt.show() # 显示图形
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# 05_face_recognition
import matplotlib.pyplot as plt
import numpy as np
# 10000 个随机数
random_state = np.random.RandomState(19680801) #控制随机状态,相当于随机种子
random_x = random_state.randn(10000)
# 绘制包含 25个矩形条的直方图
plt.hist(random_x, bins=25)
plt.xlabel("x灰度值",fontsize=20) # 添加x轴的名称
plt.ylabel("y频率",fontsize=20) # 添加y轴的名称
plt.title('人脸识别的灰度直方图',fontsize=20)
plt.show()
由图可知,位于-0.5–0之间的灰度值最多,位于-4–(-3)或3–4之间的灰度值最少
matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,alpha=None,linewidths=None,edgecolors=None, *,**kwargs)
s -- 指定点的大小。
c -- 指定散点的颜色。
# 创建包含整数0~50的数组,用于表示x轴的数据
x = np.arange(51)
# 创建另一数组,用于表示y轴的数据
y = np.random.rand(51) * 10
plt.scatter(x, y,s=12,c='red',alpha=0.5) # 绘制散点图
plt.show()
num = 50
x = np.random.rand(num)
y = np.random.rand(num)
area = (30 * np.random.rand(num)) **2
plt.scatter(x, y, s=area)
# 07_vehicle_speed_and_braking_distance
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据
x_1 = np.arange(10,210,10)
y_1 = np.array([0.5,2.0,4.4,7.9,12.3,17.7,24.1,31.5,39.3,49.2,59.5,70.8,83.1,96.4,110.7,126.0,142.2,159.4,177.6,196.8])
# 绘制散点图
plt.scatter(x_1,y_1)
#加上标题“速度与制动距离”
plt.title("速度与制动距离")
#添加x,y轴标签
plt.xlabel('车速')
plt.ylabel('制动距离')
#显示
plt.plot
bar(x,height,width=0.8,bottom=None,align=‘center’,tick_label=None, xerr=None, yerr=None, **kwargs)
bar()函数会返回一个BarContainer类的对象
# 对比两部电影1-5月份的票房收入
import numpy as np
x= np.arange(5)
y1 = [np.random.randint(20,60) for _ in range(5)]
y2 = [np.random.randint(20,60) for _ in range(5)]
y1
y2
# 确定柱子宽度
width = 0.3
plt.bar(x,y1,width=width)
plt.bar(x+width,y2,width=width)
plt.show()
# 创建包含0~4的一维数组
x = np.arange(5)
# 从上下限范围内随机选取整数,创建两个2行5列的数组
y1, y2 = np.random.randint(1, 31, size=(2, 5))
width = 0.3 # 条形的宽度
ax = plt.subplot(1, 1, 1) # 创建一个子图
ax.bar(x, y1, width, color='r') # 绘制红色的柱形图
# ax.bar(x, y2, width, color='g') # 绘制另一个绿色的柱形图
ax.bar(x+width, y2, width, color='g') # 绘制另一个绿色的柱形图
ax.set_xticks(x+width) # 设置x轴的刻度
# 设置x轴的刻度标签
ax.set_xticklabels(['January', 'February', 'March', 'April ', 'May '])
plt.show() # 显示图形
# 柱状图
# 对比两部电影1-5月份的票房收入
x = np.arange(5)
y1 = [np.random.randint(20,60) for _ in range(5)]
y2 = [np.random.randint(20,60) for _ in range(5)]
# 绘制有一组柱形的柱形图 确定柱子的宽度
width = 0.3
plt.bar(x, y1,width=width)
plt.bar(x, y2,width=width,color='red')
# 绘制有两组柱形的柱形图
plt.bar(x, y1,width=width)
plt.bar(x, y2,width=width)
# 正确绘制有两组柱形的柱形图
plt.bar(x, y1,width=width)
plt.bar(x+width, y2,width=width)
在使用bar()函数绘制图表时,可以通过给该函数的bottom参数传值的方式控制柱形的y值,使后绘制的柱形位于先绘制的柱形的上方
# 绘制堆积柱形图
x = np.arange(5)
y1 = [np.random.randint(20,60) for _ in range(5)]
y2 = [np.random.randint(20,60) for _ in range(5)]
plt.bar(x, y1, tick_label=['a', 'b', 'c', 'd', 'e'], width=width)
plt.bar(x, y2, bottom=y1, width=width)
plt.show()
在使用bar()函数绘制图表时,还可以通过给xerr、yerr参数传值的方式为柱形添加误差棒
# 偏差数据
error = [4, 2, 5, 3.5, 3]
# 绘制带有误差棒的柱形图
plt.bar(x, y1, tick_label=['a', 'b', 'c', 'd', 'e'], width=width)
plt.bar(x, y1, bottom=y1, width=width, yerr=error)
plt.show()
随着互联网与电子商务的快速发展,人们的消费模式发生了翻天覆地的变化,越来越多的消费者选择网络购物,省时省力。
本实例要求根据数据,将财年列的数据作为x轴数据,将GMV列的数据作为y轴数据,使用bar()函数绘制下图所示的柱形图。
# 02_taobao_and_tianmao_GMV
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
x = np.array([2013,2014,2015,2016,2017,2018,2019])
y = np.array([10770, 16780, 24440, 30920, 37670, 48200, 57270])
# 绘制柱形图
width = 0.3
plt.bar(x,y,width=width)
# 添加标题,"阿里巴巴GMV",字体大小25
plt.title('阿里巴巴GMV',fontsize=25)
# 添加x轴的名称"x财年",字体大小20
plt.xlabel('x财年',fontsize=20)
# 添加y轴的名称"yGMV(亿元)",字体大小20
plt.ylabel('yGMV(亿元)',fontsize=20)
#绘图
plt.show()
分析:2013~2019财年的成交总额逐年增加,至2019年已经达到近60000亿元。
使用pyplot的plot()函数可以快速地绘制折线图
plot(x, y, fmt, scalex=True, scaley=True, data=None, label=None, *args, **kwargs)
未来15天最高气温和最低气温
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# 01_maximum_minimum_temperatures
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(4, 19)
y_max = np.array([32, 33, 34, 34, 33, 31, 30, 29, 30, 29, 26, 23, 21, 25, 31])
y_min = np.array([19, 19, 20, 22, 22, 21, 22, 16, 18, 18, 17, 14, 15, 16, 16])
plt.title("气温变化",fontsize=25) # 添加标题
plt.xlabel("x日期",fontsize=20) # 添加x轴的名称
plt.ylabel("y温度",fontsize=20) # 添加y轴的名称
# 绘制折线图
# plt.plot(x, y_max)
# plt.plot(x, y_min)
plt.plot(x, y_max, x, y_min) # 绘制多个线条的折线
plt.show()
barh(y, width, height=0.8, left=None, align=‘center’, *, **kwargs)
import numpy as np
import matplotlib.pyplot as plt
y = np.arange(5)
x1 = np.array([10, 8, 7, 11, 13])
# 条形的高度
bar_height = 0.3
# 绘制条形图
plt.barh(y, x1, tick_label=['a', 'b', 'c', 'd', 'e'], height=bar_height)
plt.show()
y = np.arange(5)
x1 = np.array([10, 8, 7, 11, 13])
x2 = np.array([9, 6, 5, 10, 12])
# 条形的高度
bar_height = 0.3
# 根据多组数据绘制条形图
plt.barh(y, x1, tick_label=['a', 'b', 'c', 'd', 'e'], height=bar_height)
plt.barh(y+bar_height, x2, height=bar_height)
plt.show()
在使用barh()函数绘制图表时,可以通过给left参数传值的方式控制条形的x值,使后绘制的条形位于先绘制的条形右方
# 绘制堆积条形图
plt.barh(y, x1, tick_label=['a', 'b', 'c', 'd', 'e'], height=bar_height)
plt.barh(y, x2, left=x1, height=bar_height)
plt.show()
在使用barh()函数绘制图表时,可以通过给xerr、yerr参数传值的方式为条形添加误差棒
# 偏差数据
error = [2, 1, 2.5, 2, 1.5]
# 绘制带有误差棒的条形图
plt.barh(y, x1, tick_label=['a', 'b', 'c', 'd', 'e'], height=bar_height)
plt.barh(y, x2, left=x1, height=bar_height, xerr=error)
plt.show()
网络购物已经成为人们日常生活的一部分,它在创造新的消费方式的同时,也在改变着人们的消费模式和习惯,成为拉动居民消费的重要渠道。
# 03_substitution_rate_online
import matplotlib.pyplot as plt
import numpy as np
# 显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
x = np.array([0.959, 0.951, 0.935, 0.924, 0.893,
0.892, 0.865, 0.863, 0.860])
y = np.arange(1, 10)
labels = ["家政、家教、保姆等生活服务", "飞机票、火车票", "家具", "手机、手机配件",
"计算机及其配套产品", "汽车用品", "通信充值、游戏充值", "个人护理用品",
"书报杂志及音像制品"]
# 绘制条形图
plt.title("各商品种类的网购替代率",fontsize=25) # 添加标题
plt.xlabel("x网购替代率",fontsize=20) # 添加x轴的名称
plt.ylabel("y各类商品",fontsize=20) # 添加y轴的名称
plt.barh(y, x, tick_label=labels, align="center", height=0.6)
plt.show()
由图可知,工艺品、收藏品的网购替代率最低,家政、家教、保姆等生活服务的网购替代率最高。
使用pyplot的stackplot()函数可以快速地绘制堆积面积图
stackplot(x, y,labels=(), baseline=‘zero’, data=None, *args, **kwargs)
# 绘制有三个填充区域堆叠的堆积面积图
import numpy as np
import matplotlib.pyplot as plt
fig1 = plt.figure()
x = np.arange(6)
y1 = np.array([1,4,3,5,6,7])
y2 = np.array([1,3,4,2,7,6])
y3 = np.array([3,4,3,6,5,5])
# 绘制堆积面积图
plt.stackplot(x, y1, y2, y3)
plt.show()
# 04_logistics_cost_statistics
import numpy as np
import matplotlib.pyplot as plt
# plt.figure(figsize=(20,8),dpi=100) # 提高清晰度
x = np.arange(1, 13)
y_a = np.array([198, 215, 245, 222, 200, 236, 201, 253, 236, 200, 266, 290])
y_b = np.array([203, 236, 200, 236, 269, 216, 298, 333, 301, 349, 360, 368])
y_c = np.array([185, 205, 226, 199, 238, 200, 250, 209, 246, 219, 253, 288])
# 绘制堆积面积图
plt.stackplot(x, y_a, y_b, y_c)
# plt.legend(kinds, loc='upper right', bbox_to_anchor=[1.3, 1.1])
# plt.legend(lines, ['正弦', '余弦'], shadow=True, fancybox=True)
plt.title('物流公司物流费用统计',fontsize=20)
plt.xlabel("月份",fontsize=20) # 添加x轴的名称
plt.ylabel("物流费用(万元)",fontsize=20) # 添加y轴的名称
lines = plt.stackplot(x, y_a, y_b, y_c)
plt.legend(lines, ["A公司", "B公司","C公司"], shadow=True, fancybox=True) # 添加图例
plt.show()
从图中看出,B公司的物流费用呈现明显的增长趋势, A公司和C公司的物流费用呈现平缓的波动趋势。
pie(x,explode=None,labels=None,autopct=None,pctdistance=0.6,startangle=None,*,data=None)
import numpy as np
import matplotlib.pyplot as plt
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制饼图:半径为 0.5,数值保留1位小数
plt.pie(data, radius=1.5, labels=pie_labels, autopct='%3.1f%%')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制圆环图:外圆半径为1.5,楔形宽度为0.7
plt.pie(data, radius=1.5, wedgeprops={'width': 0.7}, labels=pie_labels,
autopct='%3.1f%%', pctdistance=0.75)
plt.show()
# 06_monthly_bills_of_alipay
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.figure(figsize=(20,8),dpi=100) # 提高清晰度
# 处理汉字乱码
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 饼图外侧的说明文字
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用',
'交通出行', '休闲娱乐', '其他']
# 饼图的数据
money_scale = [800 / 3000, 100 / 3000, 1000 / 3000, 200 / 3000,
300 / 3000, 200 / 3000, 200 / 3000, 200 / 3000]
dev_position = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
# 绘制饼图
plt.pie(money_scale, labels=kinds, autopct='%3.1f%%', shadow=True,
explode=dev_position, startangle=90)
plt.show()
绿色扇形的面积最大,说明餐饮美食方面的支出在当月总支出中占比最大;橙色扇形的面积最小,说明人情往来的支出在当月总支出中占比最小。
boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, *, data=None)
import numpy as np
import matplotlib.pyplot as plt
data = np.random.randn(100)
# 绘制箱形图:显示中位数的线条、箱体宽度为0.3、填充箱体颜色、不显示异常值
plt.boxplot(data, meanline=True, widths=0.3, patch_artist=True,
showfliers=False)
plt.show()
本实例要求根据下表的数据,将发电量(亿千瓦时)列的数据作为x轴的数据,将2017年和2018年作为y轴的刻度标签,使用boxplot()函数绘制下图所示的箱形图
# 08_generation_capacity
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
data_2018 = np.array([5200, 5254.5, 5283.4, 5107.8, 5443.3, 5550.6,
6400.2, 6404.9, 5483.1, 5330.2, 5543, 6199.9])
data_2017 = np.array([4605.2, 4710.3, 5168.9, 4767.2, 4947, 5203,
6047.4, 5945.5, 5219.6, 5038.1, 5196.3, 5698.6])
# 绘制箱形图
plt.boxplot([data_2018, data_2017], labels=('2018年', '2017年'),
meanline=True, widths=0.5, vert=False, patch_artist=True)
plt.show()
polar(theta, r, **kwargs)
# 09_holland_professional_interest_test
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6
data = np.array([[0.40, 0.32, 0.35, 0.30, 0.30, 0.88],
[0.85, 0.35, 0.30, 0.40, 0.40, 0.30],
[0.43, 0.89, 0.30, 0.28, 0.22, 0.30],
[0.30, 0.25, 0.48, 0.85, 0.45, 0.40],
[0.20, 0.38, 0.87, 0.45, 0.32, 0.28],
[0.34, 0.31, 0.38, 0.40, 0.92, 0.28]])
angles = np.linspace(0, 2 * np.pi, dim_num, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
data = np.concatenate((data, [data[0]]))
# 维度标签
radar_labels = ['研究型(I)', '艺术型(A)', '社会型(S)',
'企业型(E)', '传统型(C)', '现实型(R)']
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
# 绘制雷达图
plt.polar(angles, data)
# 设置极坐标的标签
plt.thetagrids(angles * 180/np.pi, labels=radar_labels)
# 填充多边形
plt.fill(angles, data, alpha=0.25)
plt.show()
errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, *, data=None, **kwargs)
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y = (25, 32, 34, 20, 25)
y_offset = (3, 5, 2, 3, 3)
plt.errorbar(x, y, yerr=y_offset, capsize=3, capthick=2)
plt.show()
细根生物量的多少反映了根系从土壤中吸收水分和养分的能力,是植物地下部分集汇能力的重要体现。不同树种细根生物量存在差异性,各树种细根生物量在不同季节间差异较为明显。
本实例要求根据下表的数据,将季节列的数据作为x轴的刻度标签,将其他列的数据作为y轴的数据,使用errorbar()函数绘制下图所示的误差棒图。
# 10_fine_root_biomass
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
# 准备 x 轴和 y 轴的数据
x = np.arange(3)
y1 = np.array([2.04, 1.57, 1.63])
y2 = np.array([1.69, 1.61, 1.64])
y3 = np.array([4.65, 4.99, 4.94])
y4 = np.array([3.39, 2.33, 4.10])
# 指定测量偏差
error1 = [0.16, 0.08, 0.10]
error2 = [0.27, 0.14, 0.14]
error3 = [0.34, 0.32, 0.29]
error4 = [0.23, 0.23, 0.39]
bar_width = 0.2
# 绘制柱形图
plt.bar(x, y1, bar_width)
plt.bar(x + bar_width, y2, bar_width, align="center",
tick_label=["春季", "夏季", "秋季"])
plt.bar(x + 2*bar_width, y3, bar_width)
plt.bar(x + 3*bar_width, y4, bar_width)
# 绘制误差棒 : 横杆大小为 3, 线条宽度为 3, 线条颜色为黑色, 数据点标记为像素点
plt.errorbar(x, y1, yerr=error1, capsize=3, elinewidth=2, fmt=' k,')
plt.errorbar(x + bar_width, y2, yerr=error2, capsize=3, elinewidth=2, fmt='k,')
plt.errorbar(x + 2*bar_width, y3, yerr=error3, capsize=3, elinewidth=2, fmt='k,')
plt.errorbar(x + 3*bar_width, y4, yerr=error4, capsize=3, elinewidth=2, fmt='k,')
# plt.legend(lines, ["A公司", "B公司","C公司"], shadow=True, fancybox=True) # 添加图例
plt.show()
# lines = plt.stackplot(x, y_a, y_b, y_c)
# plt.legend(lines, ["A公司", "B公司","C公司"], shadow=True, fancybox=True) # 添加图例
已知某公司预计开辟一个新项目,为确保项目的可行性,将该项目分解成“项目确定”“问卷设计”“试访”“问卷确定”“实地执行”“数据录入”“数据分析”和“报告提交” 8个子任务,并指定了各子任务的周期。
已知每个子任务的开发周期依次为:0.5, 1.5, 1, 3, 0.5, 1, 1,2,下面根据这些数据,使用barh()函数绘制一个甘特图,通过该图表展示整个项目的开发周期。
import numpy as np
import matplotlib.pyplot as plt
ticks = np.array(['报告提交', '数据分析', '数据录入', '实地执行',
'问卷确定', '试访', '问卷设计', '项目确定'])
y_data = np.arange(1, 9)
x_data = np.array(([2,1,1,0.5,3,1,1.5,0.5]))
#x_data = np.array([0.5, 1.5, 1, 3, 0.5, 1, 1, 2])
fig,ax = plt.subplots(1, 1)
ax.barh(y_data, x_data, tick_label=ticks, left=[7.5, 6, 5.5, 3, 3, 2, 1.5, 0], color='#CD5C5C')
[ax.spines[i].set_visible(False) for i in ['top', 'right']]
ax.set_title("任务甘特图")
ax.set_xlabel("日期")
ax.grid(alpha=0.5, axis='x')
plt.show()
contour([X, Y,]Z, [levels,]**kwargs)
X,Y:表示坐标点的网格数据。
Z:表示坐标点对应的高度数据。
levels:表示等高线的数量。若levels为n,则说明绘制n+1条等高线。
colors:表示不同高度的等高线颜色。
cmap:表示颜色映射表。
linewidths:表示等高线的宽度。
linestyles:表示等高线的线型。
需要注意的是,参数X、Y需要接收网格数据,即以坐标矩阵批量地描述点的位置。numpy模块的meshgrid()函数可以生成网格数据。除此之外,contourf()与contour()函数的参数相似,此处不再赘述
import numpy as np
import matplotlib.pyplot as plt
# 计算高度
def calcu_elevation(x1, y1):
h = (1-x1/2 + x1 ** 5 + y1 ** 3) * np.exp(-x1** 2 - y1** 2)
return h
n = 256
x = np.linspace(-2, 2, n)
y = np.linspace(-2, 2, n)
# 利用 meshgrid() 函数生成网格数据
x_grid, y_grid = np.meshgrid(x, y)
fig = plt.figure()
ax = fig.add_subplot(111)
# 绘制等高线
con = ax.contour(x_grid, y_grid, calcu_elevation(x_grid, y_grid), 8, colors='black')
# 填充等高线的颜色
ax.contourf(x_grid, y_grid, calcu_elevation(x_grid, y_grid), 8, alpha=0.75, cmap=plt.cm.copper)
# 为等高线添加文字标签
ax.clabel(con, inline=True, fmt='%1.1f', fontsize=10)
ax.set_xticks([])
ax.set_yticks([])
plt.show()
Axes3D(fig, rect=None, *args, azim=-60, elev=30, zscale=None,sharez=None, proj_type=‘persp’, **kwargs)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
Axes3D类的对象使用plot_wireframe()方法绘制线框图
plot_wireframe(self, X, Y, Z, *args, **kwargs)
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()
Axes3D类的对象使用plot_surface()方法绘制3D曲面图
plot_surface(self, X, Y, Z, *args, norm=None, vmin=None, vmax=None,lightsource=None, **kwargs)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
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()
本实例要求根据一组测试数据,绘制包含若干个五角星的3D散点图,并将位于指定值范围的五角星设置成指定的颜色:若10
# 01_stars_in_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)
# 创建三维坐标系的绘图区域, 并在该区域中绘制3D散点图
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 = '#C71585'
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()
# 引入matplotlib包
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
# 创建Figure实例
fig = plt.figure()
# 添加子图
fig1 = fig.add_subplot(221,projection='3d')
fig2 = fig.add_subplot(2, 2, 2)
fig4 = fig.add_subplot(224, projection='3d')
fig.add_subplot(2, 2, 3)
# 在子图上作图
random_arr = np.random.randn(100)
# 默认是在最后一次使用subplot的位置上作图,即编号为3的位置
plt.plot(random_arr)
# 在fig1---作图3D
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)
#ax = fig1(projection='3d')
# 绘制曲面图
fig1.plot_surface(x1, y1, z1, cmap=cm.coolwarm, linewidth=0, antialiased=False)
# 设置 z 轴刻度的范围、位置、格式
fig1.set_zlim(-1.01, 1.01)
# 在fig2---作图圆环
data = np.array([20, 50, 10, 15, 30, 55])
pie_labels = np.array(['A', 'B', 'C', 'D', 'E', 'F'])
# 绘制圆环图:外圆半径为1.5,楔形宽度为0.7
fig2.pie(data, radius=1.5, wedgeprops={'width': 0.7}, labels=pie_labels,
autopct='%3.1f%%', pctdistance=0.75)
# 在fig4---绘制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()
#--------------------------------------------------
#ax = fig.add_subplot(111, projection='3d')
# 获取测试数据
X, Y, Z = axes3d.get_test_data(0.05)
# 绘制 3D线框图
fig4.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
plt.show()
14.1 basemap概述
在数据可视化中,人们有时需将采集的数据按照其地理位置显示到地图上,常见于城市人口、飞机航线、矿藏分布等场景,有助于用户理解与空间有关的信息。basemap是matplotlib中的地图工具包,它本身不会参与任何绘图操作,而是会将给定的地理坐标转换到地图投影上,之后将数据交给matplotlib进行绘图。
conda install
执行以上命令后,conda命令会自动解析当前的Python环境并下载当前环境对应的basemap包。需要说明的是,在命令执行的过程中会询问用户是否安装,用户只需同意即可。