pandas matplotlib 实现多重直方图可视化

目录

前言

一、pandas matplotlib是什么?

二、实现一个简单的直方图

1.基本实现一个直方图

2.展示图

 三.分析

1.如果我们想测试在一周内的消费怎么办?

2.如何将一周内的消费记录用直方图展示出来?

3.解决代码冗余

4.图展示

总结



前言

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形

一、pandas matplotlib是什么?

pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形

二、实现一个简单的直方图

1.基本实现一个直方图

代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams, font_manager
rcParams['axes.unicode_minus'] = False
rcParams['font.family'] = 'SimHei'
# my_font = font_manager.FontProperties(fname="C:/windows/Fonts/simsun.ttc")

# 准备-- 一天的基本数据
consume=["购物","娱乐","学习","饮食"]
price=[98,37.8,10.0,22.0]
plt.bar(x=consume,height=price,label="消费记录")
plt.legend(loc=0)
plt.show()

2.展示图

 三.分析

1.如果我们想测试在一周内的消费怎么办?

使用pandas的date_range,这个方法可以有效地创建一个时间序列。

可是使用pandas的DataFrame,我们必须使用行,列,值来完善这个对象。

因此,在这里,我们使用date_range作为column,消费类型作为index

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams, font_manager
rcParams['axes.unicode_minus'] = False
rcParams['font.family'] = 'SimHei'

date_range = pd.date_range(
    start='2023-01-01',periods=7
)
consume=["购物","娱乐","学习","饮食"]
# 注意:
price=[[90,20,87,122,35,56,12],
       [19,87,76,18,65,76,32],
       [27,16,23,38,65,6,12],
       [23,19,32,28,65,56,2]]
pdf=pd.DataFrame(data=price,columns=date_range,index=consume)
# print(pdf)
index=pdf.index
col=pdf.columns

2.如何将一周内的消费记录用直方图展示出来?

2.1 问题:平铺展示

如果想要平铺展示,只需要设定每个直方图的宽度的起始就行了。第一个直方图宽度起始位置是0,宽度为0.1,第二个起始位0.1,宽度为0.1,那么,依次是

宽度起始宽度
00.1
0.10.1
0.20.1
0.30.1
width=0.1
plt.bar([i+width*0 for i in range(len(index))], pdf["2023-01-0"+str(1)], width=width, label="2023-01-0"+str(1))
plt.bar([i+width*1 for i in range(len(index))], pdf["2023-01-0"+str(2)], width=width, label="2023-01-0"+str(2))
plt.bar([i+width*2 for i in range(len(index))], pdf["2023-01-0"+str(3)], width=width, label="2023-01-0"+str(3))
plt.bar([i+width*3 for i in range(len(index))], pdf["2023-01-0"+str(4)], width=width, label="2023-01-0"+str(4))
plt.bar([i+width*4 for i in range(len(index))], pdf["2023-01-0"+str(5)], width=width, label="2023-01-0"+str(5))
plt.bar([i+width*5 for i in range(len(index))], pdf["2023-01-0"+str(6)], width=width, label="2023-01-0"+str(6))
plt.bar([i+width*6 for i in range(len(index))], pdf["2023-01-0"+str(7)], width=width, label="2023-01-0"+str(7))

plt.legend(loc=0)
plt.show()

2.2 问题:横坐标刻度的设定 (xticks)

plt.xticks([x+width*2 for x in range(4)], index) 

3.解决代码冗余

我们发现,就算解决了问题,代码冗余使得维护异常困难。那么如何使其适宜阅读呢?

将以上的plt.bar(...)代码修改为以下代码

for i in range(7):
    plt.bar ([j + width * i for j in range (len (index))], pdf["2023-01-0" + str (i+1)], width=width, label="2023-01-0" + str (i+1))

4.图展示


四 完整代码 (index我用xxx代替了,可以替换成别的数据)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams, font_manager
rcParams['axes.unicode_minus'] = False
rcParams['font.family'] = 'SimHei'
# my_font = font_manager.FontProperties(fname="C:/windows/Fonts/simsun.ttc")

# 准备-- 一天的基本数据
# consume=[xx,xx,xx,xx]
# price=[98,37.8,10.0,22.0]
# plt.bar(x=consume,height=price,label="xxxx")
# plt.legend(loc=0)
# plt.show()


date_range = pd.date_range(
    start='2023-01-01',periods=7
)
consume=[xx,xx,xx,xx,xx]
# 注意:
price=[[90,20,87,122,35,56,12],
       [19,87,76,18,65,76,32],
       [27,16,23,38,65,6,12],
       [23,19,32,28,65,56,2]]
pdf=pd.DataFrame(data=price,columns=date_range,index=consume)
# print(pdf)
index=pdf.index
col=pdf.columns
width=0.1
plt.bar([i+width*0 for i in range(len(index))], pdf["2023-01-0"+str(1)], width=width, label="2023-01-0"+str(1))
plt.bar([i+width*1 for i in range(len(index))], pdf["2023-01-0"+str(2)], width=width, label="2023-01-0"+str(2))
plt.bar([i+width*2 for i in range(len(index))], pdf["2023-01-0"+str(3)], width=width, label="2023-01-0"+str(3))
plt.bar([i+width*3 for i in range(len(index))], pdf["2023-01-0"+str(4)], width=width, label="2023-01-0"+str(4))
plt.bar([i+width*4 for i in range(len(index))], pdf["2023-01-0"+str(5)], width=width, label="2023-01-0"+str(5))
plt.bar([i+width*5 for i in range(len(index))], pdf["2023-01-0"+str(6)], width=width, label="2023-01-0"+str(6))
plt.bar([i+width*6 for i in range(len(index))], pdf["2023-01-0"+str(7)], width=width, label="2023-01-0"+str(7))

# for i in range(7):
#     plt.bar ([j + width * i for j in range (len (index))], pdf["2023-01-0" + str (i+1)], width=width,
#              label="2023-01-0" + str (i+1))
#     print(i)
# plt.xticks([x+width*2 for x in range(4)], index)
plt.legend(loc=0)
plt.show()
# print(index,col)

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为你提供一个Python+pandas+matplotlib的数据分析与可视化案例,包括源码。这个案例是基于一个汽车销售数据集的分析,目的是探索不同汽车品牌的销售情况以及价格分布等信息。 首先,我们需要导入必要的库和数据集: ```python import pandas as pd import matplotlib.pyplot as plt # 读取数据集 df = pd.read_csv("car_sales.csv") ``` 接下来,我们可以先对数据集进行一些基本的探索,例如查看数据集的前几行、统计描述等: ```python # 查看前几行数据 print(df.head()) # 统计描述 print(df.describe()) ``` 然后,我们可以通过使用pandas的groupby()函数对不同品牌的销售情况进行分组统计,然后绘制柱状图进行可视化: ```python # 按品牌分组统计销售量 brand_sales = df.groupby("Brand")["Units Sold"].sum() print(brand_sales) # 绘制柱状图 brand_sales.plot(kind="bar") plt.title("Car Sales by Brand") plt.xlabel("Brand") plt.ylabel("Units Sold") plt.show() ``` 接着,我们可以通过使用pandas的cut()函数将价格范围分段,然后绘制直方图进行价格分布的可视化: ```python # 将价格范围分段 price_bins = pd.cut(df["Sale Price"], 10) print(price_bins.value_counts()) # 绘制直方图 df["Sale Price"].plot(kind="hist", bins=10) plt.title("Price Distribution") plt.xlabel("Price Range") plt.ylabel("Frequency") plt.show() ``` 最后,我们可以将以上的可视化结果组合在一起,形成一个完整的数据分析和可视化报告: ```python # 按品牌分组统计销售量 brand_sales = df.groupby("Brand")["Units Sold"].sum() # 绘制柱状图 brand_sales.plot(kind="bar") plt.title("Car Sales by Brand") plt.xlabel("Brand") plt.ylabel("Units Sold") plt.show() # 将价格范围分段 price_bins = pd.cut(df["Sale Price"], 10) # 绘制直方图 df["Sale Price"].plot(kind="hist", bins=10) plt.title("Price Distribution") plt.xlabel("Price Range") plt.ylabel("Frequency") plt.show() ``` 以上就是一个简单的Python+pandas+matplotlib数据分析与可视化案例,你可以通过这个案例学习如何使用这些工具进行数据分析和可视化。如果你想查看完整的源码,可以在这里找到:https://github.com/ChitGPT/Python-Data-Analysis-and-Visualization-Examples/blob/main/Car_Sales_Analysis.py

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值