探索数据可视化:Matplotlib 高级绘图功能(三)

直方图

ax.hist() 方法用于绘制直方图

常用参数及其含义:

  • x:要绘制直方图的数据。
  • bins:指定直方图的箱子(柱子)数量或分布方式。可以是一个整数,表示箱子的数量,也可以是一个列表,指定每个箱子的边界值。
  • range:指定绘制直方图的数据范围,例如 (0, 10) 表示只绘制数据范围在 0 到 10 之间的直方图。
  • density:如果为 True, 表示概率,并进行归一化,使得直方图下面的面积总和为 1。False: 频次。
  • cumulative:如果为 True,则绘制累积直方图。
  • histtype:指定直方图的类型,如 bar(传统的直方图)、barstacked(堆叠直方图)、step(默认),等等。
  • color:指定直方图的颜色。
  • alpha:指定直方图的透明度。
import numpy as np
import matplotlib.pyplot as plt

mu = 100 # 平均值
sigma = 15 # 标准差
# 10000个数据
x = np.random.normal(loc = mu,scale = 15,size = 10000)
fig, ax = plt.subplots()

# bins=10 指定箱子数量为10
# density=False 统计数字在某个范围内的次数(频次)
# rwidth=0.8:指定每个箱子的宽度占总宽度的比例为 0.8,这可以用来调整箱子的宽度
n, bins, patches = ax.hist(x, bins=10, density=False,rwidth=0.8)

在这里插入图片描述

# n:返回直方图每个箱子中数据点的数量,是一个长度为箱子数量的数组
n # array([  26.,  204.,  807., 2055., 2876., 2422., 1176.,  359.,   67., 8.])

# bins:返回直方图的箱子边界值,是一个长度比 n 多 1 的数组
bins
"""
array([ 48.5195012 ,  59.53834689,  70.55719257,  81.57603825,
        92.59488394, 103.61372962, 114.6325753 , 125.65142099,
       136.67026667, 147.68911235, 158.70795804])
"""

# bins[:-1] 取出除了最后一个元素之外的所有元素,保持与直方图的箱子边界值对应
plt.bar(bins[:-1],n,width = 10)
# 添加注释
for i, v in enumerate(n):
    plt.text(bins[i], v + 0.5, str(v), color='black', ha='center')

plt.xlabel('Bins')
plt.ylabel('Frequency')
plt.title('Histogram with Annotations')

在这里插入图片描述

箱型图

plt.boxplot() 绘制箱线图

常用参数:

  • x:表示要绘制箱线图的数据,可以是单个数组或者多个数组组成的列表。
  • notch:设置为 True 时,在箱体中绘制凹口以表示置信区间的中位数估计,默认为 False。
  • vert:设置为 True 时,箱线图垂直绘制;设置为 False 时,箱线图水平绘制。
  • patch_artist:设置为 True 时,箱线图将被绘制为填充的箱体;设置为 False 时,箱线图将被绘制为线条。
  • showmeans:设置为 True 时,显示均值点;默认为 False。
  • meanline:设置为 True 时,显示均值线;默认为 False。
  • showfliers:设置为 False 时,禁用异常值的显示。
data=np.random.normal(size=(500,4)) # 正太分布

lables = ['A','B','C','D']

# 1: 在箱体中绘制凹口以表示置信区间的中位数(黄色线,中位数)
# 查看数据分布情况,看异常值
_ = plt.boxplot(data, 1, 'ro', labels=lables) # 红色的圆点是异常值

在这里插入图片描述


plt.boxplot(data, notch=True, vert=False, patch_artist=True, showmeans=True, meanline=True, showfliers=False)

在这里插入图片描述

散点图

plt.scatter()

常用参数:

  • x:散点的 x 坐标。
  • y:散点的 y 坐标。
  • s:散点的大小。
  • c:散点的颜色。
  • marker:散点的标记形状。
  • cmap:颜色映射,用于设置散点的颜色映射。
  • alpha:设置散点的透明度。
  • label:设置散点的标签。
  • linewidths:散点边界线的宽度。
  • edgecolors:散点边界线的颜色。
data = np.random.randn(100,2)

s = np.random.randint(100,300,size = 100)
color = np.random.randn(100)

plt.scatter(data[:,0], # 横坐标
            data[:,1], # 纵坐标
            s = s, # 尺寸
            c = color, # 颜色
            alpha = 0.5, # 透明度
            label='Points')

# 设置图形标题和坐标轴标签
plt.title('Scatter Plot Example')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 添加图例
plt.legend()

# 显示散点图
plt.show()

在这里插入图片描述

饼图

plt.pie()

常用参数:

  • x:用于绘制饼图的数据,可以是一个数组。
  • labels:每个扇形的标签。
  • colors:每个扇形的颜色。
  • autopct:控制扇形上的显示百分比格式。
  • startangle:起始角度,以逆时针方向测量,即 0 度位于 3 点钟方向。
  • explode:用于突出显示某些扇形,以便与其它扇形区分开。
  • shadow:设置为 True 时,在饼图下方绘制阴影。
  • labeldistance:标签与圆心的距离。
  • pctdistance:百分比标签与圆心的距离。
  • radius:饼图的半径大小。
  • counterclock:设置为 False 时,绘制顺时针方向的饼图。
# 解决中文字体乱码的问题
plt.rcParams['font.sans-serif']='SimHei' 

labels =["五星","四星","三星","二星","一星"] # 标签
percent = [95,261,105,30,9] # 某市星级酒店数量

# 设置图片大小和分辨率
fig=plt.figure(figsize=(5,5), dpi=120)

# 偏移中心量,突出某一部分
# 0.1 表示 10%,自身高度的10%,相对值
explode = (0, 0, 0, 0.1, 0) 

# 绘制饼图:autopct显示百分比,这里保留一位小数;shadow控制是否显示阴影
_ = plt.pie(x = percent, labels=labels, autopct='%0.1f%%',
            explode = explode, shadow=True) # 阴影,3D效果

在这里插入图片描述

热力图

# 标签
vegetables = ["cucumber", "tomato", "lettuce", "asparagus","potato", "wheat", "barley"]
farmers = list('ABCDEFG')

# 查看颜色
plt.colormaps()[:10]
"""
['magma',
 'inferno',
 'plasma',
 'viridis',
 'cividis',
 'twilight',
 'twilight_shifted',
 'turbo',
 'Blues',
 'BrBG']
"""

# 创造数据,随机数
harvest = np.random.randn(7,7)*5 # 农民丰收数据

plt.rcParams['font.size'] = 18
plt.rcParams['font.weight'] = 'heavy'

plt.figure(figsize=(6,6))

# imshow,显示图片
im = plt.imshow(harvest, cmap = 'PuBu')# 因为数值,各不相同

# 绘制文本
for i in range(len(vegetables)):
    for j in range(len(farmers)):
        text = plt.text(j, i, round(harvest[i, j],1),
                       ha="center", va="center", color='r')

在这里插入图片描述

蜘蛛图

plt.rcParams['font.family'] = 'SimHei'
labels=np.array(["个人能力","IQ","服务意识","团队精神","解决问题能力","持续学习"])
y=[83, 61, 95, 67, 76, 88]

# 画图数据准备,角度、状态值
x = np.linspace(0, 2*np.pi, len(labels), endpoint=False)

y = np.concatenate([y,[y[0]]]) # 首尾相接
x = np.concatenate([x,[x[0]]]) # 增加
x 
"""
array([0.        , 1.04719755, 2.0943951 , 3.14159265, 4.1887902 ,
       5.23598776, 0.        ])
"""
y # array([83, 61, 95, 67, 76, 88, 83])
# 用Matplotlib画蜘蛛图
fig = plt.figure(figsize=(6, 6))
# polar=True: 指定子图是一个极坐标图
ax = fig.add_subplot(111, polar=True) 

# 'r*--' 指定线条的样式 'r' 为红色(red)'*' 数据点标记为星号。'--' 线条样式为虚线。
# linewidth=2 指定线条的宽度为 2。
# markersize=30 指定数据点的大小为 30。
ax.plot(x, y, 'r*--', linewidth=2, markersize = 30) # 连线
ax.fill(x, y, alpha = 0.2)

# x = 3.14 ---> 180
# 标签显示,去掉一个
_ = ax.set_thetagrids(x[:-1] * 180/np.pi,
                  labels,
                  fontsize = 18)

在这里插入图片描述

  • 50
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python数据可视化是数据科学领域的重要环节,而matplotlib和pyecharts是两个常用的数据可视化库。 matplotlib是一个功能强大而灵活的绘图库,可以创建各种类型的图表,包括折线图、散点图、柱状图、饼图等。它基于numpy数组进行绘图,可以轻松地处理大量数据。使用matplotlib,我们可以通过简单的几行代码创建出美观而有效的图表,并可以对图表的各个元素进行定制,如颜色、标签、坐标轴等。此外,matplotlib还支持将图表保存为多种格式,包括图片和PDF。 而pyecharts是一个基于echarts的Python库,它提供了一种更为高级和便捷的方式来创建交互式数据可视化。echarts是一款流行的JavaScript可视化库, 包含多种类型的图表,如折线图、散点图、柱状图、雷达图等,而pyecharts则是将echarts的功能封装在Python中,使得开发人员无需掌握JavaScript,就能够创建出强大的交互式图表。pyecharts提供了一套易用的API,通过简洁的代码可以实现复杂的数据可视化需求。另外,pyecharts也支持将图表导出为HTML、图片或PDF格式。 总而言之,matplotlib和pyecharts是两个非常有用的数据可视化工具,它们分别提供了不同的绘图方式和功能。如果需要创建静态图表,并对其进行更加精细的控制,可以选择使用matplotlib;而如果希望创建交互式的图表,并且对绘图过程更为简便,可以考虑使用pyecharts。同时,学习并掌握这两个库,将有助于我们更好地进行数据分析与可视化工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值