【大数据处理】matplotlib做简单数据可视化

相关文章及代码下载

matplotlib做简单数据可视化样例代码包

【大数据处理】文档分析

【大数据处理】消费者行为与购物习惯数据分析及可视化

Matplotlib

     Matplotlib是一个Python库,主要用于创建高质量的静态、动态、交互式和三维图形。它提供了丰富的绘图函数和类,可以满足各种数据可视化需求。Matplotlib与NumPy和Pandas等库一起使用时,能够轻松处理大规模的数据集,并进行详细的数据分析。

以下是一些常用到的函数:

matplotlib.pyplot:这是Matplotlib库的主要模块,提供了各种绘图函数和功能。

figure():这个函数用于创建一个新的图形窗口,可以设置图形大小、背景色等属性。

title()、xlabel() 和 ylabel():这些函数用于设置图形的标题、x轴标签和y轴标签。

plot():这个函数用于绘制折线图。可以设置线条颜色、线型和宽度等属性。

scatter():这个函数用于绘制散点图。可以设置点的大小、颜色和形状等属性。

bar():这个函数用于绘制柱状图。可以设置柱子的颜色、位置和宽度等属性。

pie():这个函数用于绘制饼图。可以设置各部分的比例和标签。

subplot():这个函数用于在一个窗口中创建多个子图。可以设置子图的位置和布局。

legend():这个函数用于添加图例,可以设置图例的位置、标签和样式等属性。

show():这个函数用于显示图形。可以设置显示方式(如静态显示或动态显示)和其他参数。

savefig():这个函数用于将图形保存为文件。可以设置文件格式(如PNG、PDF、SVG等)和其他参数。

以下举例2个做简单数据可视化的例子:

1、从网站https://www.kylc.com/stats/global/yearly_overview/g_gdp.html中选取了中国、美国、英国。获取三个国家的从1960-2022年的GDP值,绘制一幅折线图。(从网页中拷贝数据到csv文件中,再编程从文件中获取数据。)

先声明需要引用的库,并初始化字体为SimHei以便使用中文。

filenames定义一个包含三个国家GDP数据的文件名列表。plt.figure():创建一个新的图形。data定义一个包含63个0的列表,用于存储每个国家的GDP数据。year定义一个包含1960到2022年之间的整数列表,用于表示时间轴上的年份。

读取三个CSV文件中的GDP数据,进行对csv数据的处理切割,并将其转换为浮点数存储在data列表中,并用plot开始绘制折线图

以下是完整代码:

import csv
import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]

# 定义文件名列表
filenames = ['中国GDP.csv', '英国GDP.csv', '美国GDP.csv']
plt.figure()

# 定义数据列表
data = [0] * 63
year = [i for i in range(1960, 2023)]


# 读取CSV文件

for filename in filenames:
    with open(filename, 'r' ,encoding='utf-8', errors='ignore') as csvfile:
      csvreader = csv.reader(csvfile)
      header = next(csvreader)  # 跳过标题行
      index = 0
      for row in csvreader:
        line = row[1].split("亿")[0]
        if line.find("万") != -1:
            line = float(line.replace("万", "")) * 10000
        else:
            line = float(line)
        # print(line)
        data[index] = line  # 将第二列转换为浮点数并添加到数据列表中
        index += 1

    data.reverse()
    plt.plot(year, data)
    data = [0] * 63


# 创建折线图
plt.xlabel('年份')
plt.ylabel('GDP(美元)')
plt.xticks(range(1960,2022,10))
plt.yticks(range(500,300000,15000))
plt.legend(['中国GDP', '英国GDP', '美国GDP'])

plt.show()

以下是代码执行结果:

2、在一幅图中绘制四幅子图,其中包括,反映国内或者国际上主要手机品牌在某年或者某季度的销量的饼图。反映广东省各市或者佛山市各区的GDP,以及房价平均值的柱状图(横向和纵向各一幅)。绘制某省2023年的高考一分段的散点图。

先申明应用的库,初始化字体及大小,设置字体为SimHei,以便于中文显示;设置绘图的宽度和高度。其中,25.0表示宽度,8.0表示高度。可以根据需要调整这两个值,以获得更合适的图形大小优化图的展示,并plt.subplots(2, 2)划分为四个子图

第一个子图为饼图,是使用.pie()函数进行绘制。labels定义饼图的标签,即每个扇形的名称。sizes定义饼图每个扇形的尺寸,即每个品牌在2022年销量的百分比。ex定义饼图某些部分的突出显示。这里使用元组的形式指定每个扇形的突出显示程度,值越大,扇形越突出。

使用axs[0, 0].pie()函数绘制饼图,其中sizes参数表示扇形的尺寸,labels参数表示扇形的标签,autopct参数表示饼图中显示的百分比值,explode参数表示饼图中的突出显示部分,labeldistance参数表示标签与扇形的距离,pctdistance参数表示百分比与扇形的距离。

.set_title()函数设置子图的标题。                

第二、三个子图为横向纵向的柱状图

areas定义一个包含佛山市各区的名称的列表。gdps定义一个包含佛山市各区的GDP(百万元)的列表。house_prices定义一个包含佛山市各区的房价平均值的列表。

x = np.arange(len(areas)) y = np.arange(len(areas)):定义一个包含各区名称的索引值的列表。width = 0.2:定义每个柱状图的宽度。

使用axs[0, 1].bar()函数绘制GDP横向柱状图,使用axs[0, 1].bar()函数绘制GDP纵向柱状图,width参数表示柱状图的宽度,color参数表示柱状图

使用axs[0, 1].set_title()函数设置子图的标题。使用axs[0, 1].legend()函数设置图例,其中['GDP(百万元)', '房价平均值(元)']参数表示图例的标签列表。

绘制第四个子图为散点图。定义 grade 和 num 列表,分别用于存储分数段和对应考生数量。使用with语句打开csv文件,并使用csv.reader读取文件内容。

跳过标题行,因为分数段和考生数量已经在文件的第一行。遍历csv文件的每一行,将分数段和考生数量分别添加到grade和num列表中。

使用scatter函数绘制散点图,其中x轴为分数段,y轴为考生数量,marker为散点的形状,s为散点的大小。

以下是完整代码:

import matplotlib.pyplot as plt
import numpy as np
import csv
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams['figure.figsize'] = (25.0, 8.0)
# 创建一个新的图形和坐标轴
fig, axs = plt.subplots(2, 2)


# 绘制第一个子图_主要手机品牌在2022年销量的饼图
labels = ['vivo', '荣耀', '苹果', 'oppo', '小米', '其他']
sizes = [5220, 5220, 5130, 5040, 3860, 4350]
ex= (0.03,0.05,0.06,0.04,0.08,0.21) # 指定饼图某些部分的突出显示
axs[0, 0].pie(sizes, labels=labels, autopct='%1.1f%%',explode=ex,labeldistance = 1.1, pctdistance = 0.8)
axs[0, 0].set_title('主要手机品牌在2022年销量的饼图')

# 绘制第二个子图_反映广东省各市或者佛山市各区的GDP(百万元),以及房价平均值(元)的柱状图(横向和纵向各一幅)
areas = ['禅城', '南海', '顺德', '三水', '高明']
gdps = [45841, 75945, 95055, 33430, 23942]
house_prices = [18478, 17404, 17448, 10991, 9890]

x = np.arange(len(areas))
width = 0.2

gold_x = x + width/2
red_x = x + width/2*3

axs[0, 1].bar(gold_x, gdps,width=width , color="gold")
axs[0, 1].bar(red_x, house_prices,width=width , color="red")
axs[0, 1].set_xticks(x+width, labels=areas )
axs[0, 1].set_title('横向2022年佛山市各区的GDP及房价平均值')
axs[0, 1].legend(['GDP(百万元)', '房价平均值(元)'])

# 绘制第三个子图
y = np.arange(len(areas))
height = 0.2
gold_y = y + width/2
red_y = y + width/2*3

axs[1, 0].barh(gold_y, gdps,height=height , color="gold")
axs[1, 0].barh(red_y, house_prices,height=height , color="red")
axs[1, 0].set_yticks(y + height, labels=areas )
axs[1, 0].legend(['GDP(百万元)', '房价平均值(元)'])
axs[1, 0].set_title('纵向2022年佛山市各区的GDP及房价平均值')

#  绘制第四个子图_绘制广东省2023年的高考一分段的散点图
df = pd.read_csv('广东省2023年的高考一分段.csv')
grade = df['分数']
num = df['人数']
'''
index = 0
with open('广东省2023年的高考一分段.csv', 'r' ,encoding='utf-8', errors='ignore') as csvfile:
      csvreader = csv.reader(csvfile)
      header = next(csvreader)  # 跳过标题行

      for row in csvreader:
            if index % 25 == 0: # 太多数据,筛选让画面好看些,如果需要所有数据删除即可
                grade.append(row[0])
                num.append(int(row[1]))
            index += 1

grade.reverse()
num.sort()
'''
axs[1, 1].scatter(grade, num,0.8)
axs[1, 1].set_title('广东省2023年的高考一分段')
axs[1, 1].set_xlabel('分数')
axs[1, 1].set_ylabel('人数')

# 显示图形
plt.show()

以下是代码的执行结果:

以下是实验代码结构:

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值