当前位置: 首页 > article >正文

数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图

目录

目录

一、绘制折线图

1.使用pyplot

2.使用numpy

 ​编辑

3.使用DataFrame

 ​编辑

二、绘制条形图(柱状图)

1.简单条形图

2.绘制叠加条形图 

3.绘制并列条形图

4.水平条形图

 ​编辑

三、绘制饼状图 

四、绘制散点图和直方图

1.散点图

2.直方图


一、绘制折线图

1.使用pyplot

import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [1,2,3,4,5]
# 调用绘制线性图函数plot
plt.plot(x,y,
    color='#3589FF',    # 线的颜色
    linestyle=':',      # 线的风格
    linewidth=2,        # 线的宽度
    marker='o',         # 标记点样式
    markerfacecolor='r',# 标记点颜色
    markersize=10,      # 标记点的大小
    alpha=1,            # 图形的透明度
    label="x=y"         # 设置图例的label
)
plt.legend()
plt.show()

2.使用numpy

import numpy as np
plt.rcParams['font.sans-serif'] = "SimSong"
# numpy数据
y1 = np.random.random(6) # 第1条折线y轴
y2 = np.random.random(6) # 第2条折线y轴
x = np.arange(6) # 公用的x轴

plt.plot(x, y1, label='成都') # 绘制第1条折线图
plt.plot(x, y2, label='武汉') # 绘制第2条折线图
plt.legend(loc='best') # 显示折线
 
plt.title('各城市房价(单位: 万)', fontsize=20) # 设置标题 和 标题大小
index_name = ['1月', '2月', '3月', '4月', '5月', '6月'] # 设置刻度
plt.xticks(x, index_name) # 将x坐标刻度数值与字符对应

plt.show() # 显示图形

 

其中,这句代码的效果是,它将x数组中的数值与index_name列表中的字符串对应起来,并显示在图表的x轴上。这样,图表的x轴上将显示’1月’、‘2月’、‘3月’、‘4月’、‘5月’和’6月’,而不是默认的数值刻度。这对于增强图表的可读性和直观性非常有用,特别是当x轴代表时间序列时

index_name = ['1月', '2月', '3月', '4月', '5月', '6月'] # 设置刻度
plt.xticks(x, index_name) # 将x坐标刻度数值与字符对应

 如果没有这段代码会发生

3.使用DataFrame

import pandas as pd
# 使用DataFrame数据
data_frame = pd.DataFrame({
    'Python基础': np.random.randint(10, 100, 5),
    'Python爬虫': np.random.randint(10, 100, 5),
    'Python Web': np.random.randint(10, 100, 5),
})

plt.plot(data_frame, marker='o')

# 显示图例
plt.legend(data_frame, loc=2)

# 设置x轴刻度标签
plt.xticks([0, 1, 2, 3, 4], ['1月', '2月', '3月', '4月', '5月'])
plt.title('2020年课程购买人数')
plt.xlabel('月份')
plt.ylabel('购买人数')

# 设置网格的宽度
plt.grid()

# 显示图形
plt.show()

 

二、绘制条形图(柱状图)

1.简单条形图

下面这段代码是使用matplotlib库中的pyplot模块绘制条形图

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

参数:

参数名描述默认值
x条形图x轴的位置序列,即条形图基线的位置。无(必须提供)
height条形图y轴的值,即条形图的高度。无(必须提供)
width条形图的宽度。0.8
bottom条形图的底部y坐标,表示条形图从哪个y坐标开始。None
align条形图的对齐方式,'center’表示条形图中心对齐,'edge’表示边缘对齐。‘center’
data要绘制的数据。None
**kwargs传递给条形图的其它参数,如颜色、标签等。

绘制一个简单的条形图

x = [1,2,3,4,5]
height = [2.5,3.5,4.5,5.6,6.9]
plt.bar(x,height)

给条形图上方添加说明

# 给坐标为 (1,2.5)位置上方添加2.5说明
plt.text(1,2.5,2.5)

# 使这个说明居中,并且在条形图底部
plt.text(1,2.5,2.5,ha='center',va='bottom') #通常使用bottom
# 使这个说明居中,并且在条形图上部
plt.text(1,2.5,2.5,ha='center',va='top')

# 给每个条形图添加说明,使用zip
# zip 的作用就是将x和height 合并成一个元组,通过for循环赋值给x,height
for x,height in zip(x,height):
  plt.text(x,height,height,ha='center',va='bottom')

 

补充元素

x = [1,2,3,4,5]
height = [2.5,3.5,4.5,5.6,6.9]
index_name = ['星期一','星期二','星期三','星期四','星期五']
plt.xticks(x,index_name)
plt.bar(x,height)
plt.title('销售量(单位:万元)')
for x,height in zip(x,height):
  plt.text(x,height,height,ha='center',va='bottom')
plt.show()

2.绘制叠加条形图 

x = [1,2,3,4,5]
height1 = [2.5,3.5,4.5,5.6,6.9]
height2 = [2,3,4,5,6]
index_name = ['星期一','星期二','星期三','星期四','星期五']
plt.xticks(x,index_name)
plt.bar(x,height1) # 绘制第一个条形图
plt.bar(x,height2,color='g') # 绘制第二个条形图
plt.title('销售量(单位:万元)')
plt.show()

bottom参数用于指定堆叠条形图的起始位置

在下面的例子中,bottom=height1表示第二个条形图的底部是第一个条形图的顶部

plt.bar(x,height1,label='python销量') # 绘制第一个条形图
# 
plt.bar(x,height2,color='g',bottom=height1,label='c语言销量') # 绘制第二个条形图
plt.legend()

 

设置图形大小和图形像素,这样图片就更大一些了

plt.figure(figsize=(8,8),dpi=100)

 

测试代码

plt.figure(figsize=(8,8),dpi=100)
x = [1,2,3,4,5]
height1 = [2.5,3.5,4.5,5.6,6.9]
height2 = [2,3,4,5,6]
index_name = ['星期一','星期二','星期三','星期四','星期五']
plt.xticks(x,index_name)
plt.bar(x,height1,label='python销量') # 绘制第一个条形图
plt.bar(x,height2,color='g',bottom=height1,label='c语言销量') # 绘制第二个条形图
plt.title('销售量(单位:万元)')
plt.legend()
plt.show()

3.绘制并列条形图

这里就需要使用numpy,便于相减

注意plt.bar中参数顺序

plt.figure(figsize=(8,8),dpi=100)

# 使用numpy
x = np.arange(5)
height1 = [2.5,3.5,4.5,5.6,6.9]
height2 = [2,3,4,5,6]
index_name = ['星期一','星期二','星期三','星期四','星期五']
plt.xticks(x,index_name)

#条形图宽度为0.3
bar_width=0.3
plt.bar(x,height1,bar_width,label='python销量') # 绘制第一个条形图

# 第二个条形图其实位置为x+bar_width
plt.bar(x+bar_width,height2,bar_width,color='g',label='c语言销量') # 绘制第二个条形图
plt.title('销售量(单位:万元)')
plt.legend()
plt.show()

 

但是底部的x轴课表对应不美观,于是调一下xticks

plt.xticks(x+bar_width/2,index_name) # 加bar_width的一半

 

实验代码

plt.figure(figsize=(8,8),dpi=100)

# 使用numpy
x = np.arange(5)
height1 = [2.5,3.5,4.5,5.6,6.9]
height2 = [2,3,4,5,6]
index_name = ['星期一','星期二','星期三','星期四','星期五']


#条形图宽度为0.3
bar_width=0.3
plt.bar(x,height1,bar_width,label='python销量') # 绘制第一个条形图

# 第二个条形图其实位置为x+bar_width
plt.bar(x+bar_width,height2,bar_width,color='g',label='c语言销量') # 绘制第二个条形图
plt.title('销售量(单位:万元)')

plt.xticks(x+bar_width/2,index_name) # 加bar_width的一半
plt.legend()
plt.show()

4.水平条形图

plt.figure(figsize=(8,8),dpi=100)
index_name = ['python','c语言','java','cpp','php']
y = [1,2,3,4,5]
plt.yticks(y,index_name)
width=[2.5,3.6,4.7,5.8,6.9]

# barh以水平方式画条形图,h就是水平的意思
plt.barh(y,width)

plt.text(2.5,1,2.5)
plt.text(3.6,2,3.6)
plt.text(4.7,3,4.7)
plt.text(5.8,4,5.8)
plt.text(6.9,5,6.9)

plt.show()

 

三、绘制饼状图 

import matplotlib.pyplot as plt  # 导入matplotlib.pyplot模块,用于绘制图表

plt.figure(figsize=(6, 6), dpi=100)  # 创建一个新图形,并设置图形大小为6x6英寸,分辨率为100 DPI
labels = ['A', 'B', 'C', 'D', 'E']  # 定义饼图的标签列表
x = [10, 20, 30.5, 40.6, 50.7]  # 定义饼图的各个部分的值
explode = [0, 0.1, 0, 0, 0]  # 定义饼图各个部分的突出显示程度,这里只突出显示第二个部分

plt.pie(x, labels=labels, autopct='%.2f%%', explode=explode)  # 绘制饼图,设置标签、自动百分比格式和突出显示
plt.legend()  # 显示图例,用于解释各个部分的含义
plt.show()  # 显示绘制好的饼图

其中对于pie函数内部,如果参数顺序对不上,可以强行指定参数顺序如 labels=labels

四、绘制散点图和直方图

1.散点图

我们可以通过绘制折线图方式绘制一个简单的散点图

x = [1,2,3,4,5]
y = [1,2,3,4,5]
plt.plot(x,y)

 

# 设置点的样式为o,颜色为红色
plt.plot(x,y,'ro')
# bo就是蓝色

 

除了通过折线图绘制散点图外。matplotlib中还提供了scatter函数绘制散点图

plt.scatter 是 Matplotlib 库中的一个函数,用于在二维空间中绘制散点图。

plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, edgecolors=None, *, data=None, **kwargs)

 

参数名描述示例值或默认值
x, y这些是位置参数,分别表示散点图中每个点的 x 和 y 坐标。x = [1, 2, 3, …], y = [4, 5, 6, …]
s散点的大小。如果是一个标量,那么所有的点都会是这个大小。s = 100
c散点的颜色。如果是一个标量,那么所有的点都会是这个颜色。c = ‘blue’
marker散点的形状。默认值是 None,此时使用 ‘o’(圆形)。marker = ‘s’
cmap颜色映射,用于将数据值映射到颜色。仅在 c 是一个浮点数数组时使用。cmap = plt.cm.viridis
norm用于缩放 c 的颜色数据,使其在 0 和 1 之间。norm = plt.Normalize(vmin=0, vmax=1)
vmin, vmax当 norm 是 None 时,这两个参数用于将 c 的数据缩放到颜色映射的范围内。vmin = 0, vmax = 1
alpha散点的透明度。值在 0(完全透明)到 1(完全不透明)之间。alpha = 0.5
linewidths散点边缘的线宽。默认值是 None,此时不绘制边缘。linewidths = 1
edgecolors散点边缘的颜色。默认值是 None,此时边缘颜色与散点颜色相同。edgecolors = ‘black’
data如果提供,那么 x, y, s, c 等参数可以通过字符串来指定,这些字符串将映射到 data 的列。data = None
**kwargs其他关键字参数,可以传递给 Line2D 对象,用于进一步自定义散点图。**kwargs = {}
x = [1,2,3,4,5]
y = [1,2,3,4,5]
plt.scatter(x,y)
plt.show()

设置点的颜色为红色

plt.scatter(x,y,color='r')

 

# 设置散点图中点的大小 -- 随机大小
size = np.random.rand(5)*200
plt.scatter(x,y,color='g',s=size)

 

# 绘制多个散点图
x = [1,2,3,4,5]
y = [1,2,3,4,5]
a = np.random.rand(10)
b = np.random.rand(10)
size = np.random.rand(5)*200
plt.scatter(x,y,color='y',s=size)
plt.scatter(a,b,color='b',s=size)
plt.show()

 

2.直方图

直方图是一种用于显示数值数据分布的柱状图。它通过将数据分成若干个区间(或称为“箱子”),然后绘制每个区间内数据的数量或频率来表示数据的分布情况。直方图可以用来展示数据的集中趋势、离散程度以及是否存在异常值等。

直方图是由竖立在x轴上的多个相邻的矩形组成,这些矩形把x轴拆分为一段段彼此不重叠的线段;每个矩形都是有面积的,那么它的面积和所对应的直方图元素的个数是成正比,这种方法就可以用于样本分布统计

x = [1,2,3,4,5]
plt.hist(x) # 绘制直方图
plt.show()

 

# 更改x的值观察一下
x = [1,2,3,4,5,1.1,1.2,1.3]
plt.hist(x) # 绘制直方图
plt.show()

 

# 下面使用直方图绘制一个正态分布
# 使用 NumPy 的 random.normal 函数生成一个包含 100000 个随机数的数组。normal(0,1) 表示生成的数据符合均值为 0、标准差为 1 的正态分布。
data = np.random.normal(0,1,100000)
# bins=200 指定了直方图的箱数,即横轴(x轴)的划分数量。每个箱代表数据中一个范围的数据值,直方图的高度表示该范围内数据点的数量。
plt.hist(data,bins=200)
plt.show()

 


http://www.kler.cn/a/408954.html

相关文章:

  • QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
  • python爬虫初体验(五)—— 边学边玩小游戏
  • fastapi入门
  • c++ unordered_set和unordered_map
  • 网络安全基础——网络安全法
  • 搜索插入位置
  • 【技术支持】vscode不使用插件,两种方式重命名html标签对
  • 基于物联网设计的人工淡水湖养殖系统(华为云IOT)_253
  • 关于mqtt协议与qt联合开发的实现记录
  • 用Tauri框架构建跨平台桌面应用:1、Tauri快速开始
  • 【桂林理工大学主办 | 往届均已EI检索】第五届能源工程、新能源材料与器件国际学术会议(NEMD 2025)
  • ctfshow -web 89-115-wp
  • 数据结构之二:表
  • RoPE——Transformer 的旋转位置编码
  • Centos使用docker搭建Graylog日志平台
  • python中的base64使用小笑话
  • vue从入门到精通(七):事件处理
  • 全新三网话费余额查询API系统源码 Thinkphp全开源 附教程
  • 力扣力扣力:860柠檬水找零
  • 【机器学习监督学习】:从原理到实践,探索算法奥秘,揭示数据标注、模型训练与预测的全过程,助力人工智能技术应用与发展
  • Unity 内置枚举(Option Stencil)
  • 【AI技术赋能有限元分析应用实践】Abaqus、 Ansys、FEniCSx 有限元结合深度学习
  • Java爬虫与淘宝API接口:深度解析销量和商品详情数据获取
  • FMCJ456-14bit 2通道3/2.6/2GS/s ADC +16bit 2通道12.6GS/s DAC FMC AD/DA子卡
  • 网站渗透测试工具zap2docker-stable
  • H.264/H.265播放器EasyPlayer.js网页全终端安防视频流媒体播放器关于iOS不能系统全屏