python-数据分析-Matplotlib-1-基础图形(曲线图-散点-柱状-堆叠柱状-饼状图-直方图)
曲线图
# -*- coding: utf-8 -*- #基础、曲线图 import numpy import matplotlib.pyplot as plt #设置字体 SimHei: 黑体 #需要注意的是,使用中文字体后坐标轴上的负号将会无法显示,需要将`axes.unicode_minus`参数设置为`False`,这样才能让坐标轴上的负号正常显示 plt.rcParams['font.sans-serif'].insert(0, 'SimHei') plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 #如果使用的是Jupyter Notebook、通过下面的魔法指令,我们可以在绘图时生成矢量图(SVG - Scalable Vector Graphics),矢量图的特点是不会因为放大、缩小或旋转等操作而失真 #%config InlineBackend.figure_format = 'svg' #创建画布 #画布大小、分辨率、背景色 #figure()函数可以用来创建画布 figure函数的返回值是一个Figure对象,它代表了绘图使用的画布 ##figsize参数指定画布的尺寸(默认值是[6.4, 4.8]) #dpi参数指定画布的分辨率(默认值是100) #facecolor参数指定画布的背景色(默认值是白色) plt.figure(figsize=(10,10), dpi=120, facecolor='darkgray') #创建坐标系 #subplot()函数来创建坐标系,该函数会返回Axes对象 #subplot的前三个参数分别用来指定整个画布分成 几行几列 以及当前 坐标系的索引 ,这三个参数的默认值都是1 #也可以通过上面创建的Figure对象的add_subplot方法或add_axes方法来创建坐标系,前者跟subplot函数的作用一致,后者会产生嵌套的坐标系 plt.subplot(2, 2, 1) #创建一个2x2的网格,并选择第1个子图 #绘制图表 - 折线图 x = numpy.linspace(-2 * numpy.pi, 2 * numpy.pi, 120) #生成120个点 y = numpy.sin(x) #生成y值 # # #刻度 可不画 默认自动 # plt.xticks([0, 2 * numpy.pi, 4 * numpy.pi, 6 * numpy.pi, 8 * numpy.pi, 10 * numpy.pi, 12 * numpy.pi]) #创建画布 plt.figure(figsize=(8, 4), dpi=120) #绘制折线图 #linewidth参数指定线条的粗细,默认值是1 #marker参数指定线条的标记(用什么符号来画曲线),默认值是None,即不显示标记 #color参数指定线条的颜色,默认值是黑色 plt.plot(x, y, linewidth=2, marker='+', color='red') #如果要同时显示和保存图表,应该先执行savefig函数,再执行show函数,因为在调用show函数时,图表已经被释放,位于show函数之后的savefig保存的只是一个空白的区域 #保存图片 plt.savefig('直方图.png') #显示绘图 plt.show()
散点图
# -*- coding: utf-8 -*- #散点图 import matplotlib.pyplot as plt import numpy as np x = np.array([5550, 7500, 10500, 15000, 20000, 25000, 30000, 40000]) y = np.array([800, 1800, 1250, 2000, 1800, 2100, 2500, 3500]) #创建画布 plt.figure(figsize=(8, 6), dpi=120) #绘制散点图 #scatter 函数表示作用是绘制散点图 # plt.scatter(x, y) #默认 # 自定义散点图 plt.scatter(x, y, s=100, c='red', alpha=0.5, marker='o', label='Data Points') # 添加颜色条 # plt.colorbar(label='Color Mapping') # 添加标题和标签 plt.title("Simple Scatter Plot") plt.xlabel("X-axis") plt.ylabel("Y-axis") #如果要同时显示和保存图表,应该先执行savefig函数,再执行show函数,因为在调用show函数时,图表已经被释放,位于show函数之后的savefig保存的只是一个空白的区域 #保存图片 plt.savefig('直方图.png') plt.show()
柱状图
# -*- coding: utf-8 -*- #柱状图 import matplotlib.pyplot as plt import numpy as np #在对比数据的差异时,柱状图是非常棒的选择,我们可以使用pyplot模块的bar函数来生成柱状图,也可以使用barh函数来生成水平柱状图(也称为“条状图”) #设置字体 plt.rcParams['font.sans-serif'].insert(0, 'SimHei') plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题 x = np.arange(4) y1 = np.random.randint(20, 50, 4) y2 = np.random.randint(10, 60, 4) #绘制画布 plt.figure(figsize=(6, 4), dpi=120) #绘制柱状图 ## 通过横坐标的偏移,让两组数据对应的柱子分开,width参数控制柱子的粗细,label参数为柱子添加标签 plt.bar(x - 0.1, y1, width=0.2, label='A组') plt.bar(x + 0.1, y2, width=0.2, label='B组') #定制横轴 x 的刻度 plt.xticks(x, ['Q1', 'Q2', 'Q3', 'Q4']) #如果不定制、会默认显示 按x或y轴的数据来画 #配置label标签的位置 #'best':自动选择最合适的位置(默认值) #'upper right':右上角 #'upper left':左上角 #'lower left':左下角 #'lower right':右下角 #'right':右侧 #'center left':左侧居中 #'center right':右侧居中 #'lower center':下方居中 #'upper center':上方居中 #'center':居中 plt.legend(loc='upper right') #如果要同时显示和保存图表,应该先执行savefig函数,再执行show函数,因为在调用show函数时,图表已经被释放,位于show函数之后的savefig保存的只是一个空白的区域 #保存图片 plt.savefig('直方图.png') #显示图形 plt.show()
堆叠柱状图
# -*- coding: utf-8 -*- #堆叠柱状图 import matplotlib.pyplot as plt import numpy as np #设置字体 plt.rcParams['font.sans-serif'].insert(0, 'SimHei') plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题 x = np.arange(4) y1 = np.random.randint(20, 50, 4) y2 = np.random.randint(10, 60, 4) labels = ['Q1', 'Q2', 'Q3', 'Q4'] #绘制画布 plt.figure(figsize=(6, 4), dpi=120) #绘制柱状图 plt.bar(labels, y1, width=0.4, label='A组') ## 注意:堆叠柱状图的关键是将之前的柱子作为新柱子的底部,可以通过bottom参数指定底部数据,新柱子绘制在底部数据之上 #bottom 参数指定为y1,即在A组柱子的数据上 plt.bar(labels, y2, width=0.4, bottom=y1, label='B组') #配置label标签的位置 #'best':自动选择最合适的位置(默认值) #'upper right':右上角 #'upper left':左上角 #'lower left':左下角 #'lower right':右下角 #'right':右侧 #'center left':左侧居中 #'center right':右侧居中 #'lower center':下方居中 #'upper center':上方居中 #'center':居中 plt.legend(loc='upper right') #如果要同时显示和保存图表,应该先执行savefig函数,再执行show函数,因为在调用show函数时,图表已经被释放,位于show函数之后的savefig保存的只是一个空白的区域 #保存图片 plt.savefig('直方图.png') #显示 plt.show()
饼状图
# -*- coding: utf-8 -*- #饼状图 #是一个将数据划分为几个扇形区域的统计图表,它主要用于描述数量、频率等之间的相对关系 #在需要展示数据构成的场景下,饼状图、树状图和瀑布图是不错的选择,我们可以使用pyplot模块的pie函数来绘制饼图 import matplotlib.pyplot as plt import numpy as np #设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False #准备数据 data = np.random.randint(100, 500, 7) #随机生成7个数据、随机生成100-500之间的整数 labels = ['苹果', '香蕉', '桃子', '荔枝', '石榴', '山竹', '榴莲'] #绘制画布 plt.figure(figsize=(5, 5), dpi=120) #绘制饼图 plt.pie( data, #自动显示百分比 autopct='%.1f%%', #饼图的半径 radius=1, #百分比到饼图中心的距离 pctdistance=0.8, #颜色(随机生成) colors=np.random.rand(7, 3), #分离距离、数量要与data长度一致 explode=[0.05, 0, 0.1, 0, 0, 0, 0], #阴影效果 shadow=True, #字体属性 textprops=dict(fontsize=10, color='black'), # # 楔子属性(生成环状饼图的关键) wedgeprops=dict(linewidth=1, width=0.35), #标签 labels=labels ) #定制图表标题 plt.title('水果销量', fontsize=15) #如果要同时显示和保存图表,应该先执行savefig函数,再执行show函数,因为在调用show函数时,图表已经被释放,位于show函数之后的savefig保存的只是一个空白的区域 #保存图片 plt.savefig('直方图.png') plt.show()
直方图
# -*- coding: utf-8 -*- #直方图 #在统计学中,直方图是一种展示数据分布情况的图形,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量 #使用pyplot模块的hist函数来绘制直方图,其中bins参数代表了我们使用的分箱方式 import matplotlib.pyplot as plt import numpy as np #设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False #创建数据- 数组 heights = np.array([ 170, 163, 174, 164, 159, 168, 165, 171, 171, 167, 165, 161, 175, 170, 174, 170, 174, 170, 173, 173, 167, 169, 173, 153, 165, 169, 158, 166, 164, 173, 162, 171, 173, 171, 165, 152, 163, 170, 171, 163, 165, 166, 155, 155, 171, 161, 167, 172, 164, 155, 168, 171, 173, 169, 165, 162, 168, 177, 174, 178, 161, 180, 155, 155, 166, 175, 159, 169, 165, 174, 175, 160, 152, 168, 164, 175, 168, 183, 166, 166, 182, 174, 167, 168, 176, 170, 169, 173, 177, 168, 172, 159, 173, 185, 161, 170, 170, 184, 171, 172 ]) #绘制画布 plt.figure(figsize=(6, 4), dpi=120) #绘制直方图 #bins: 直方图的分箱方式、bins数组可以用于定义每个柱的边界 #density: 是否将频率转换为概率密度 density=True时:直方图显示的是概率密度而不是频数。这样,每个柱的高度表示在该区间内数据的概率密度,而整个直方图的面积和为1。 #cumulative: 是否将频率转换为累计频率 #numpy.arange(145, 196, 5):生成从145到195的一个步长为5的数列 - 表示X轴 #横轴(X轴)代表身高的范围 纵轴(Y轴)代表人数(统计数量) # plt.hist(heights, bins=np.arange(145, 196, 5), color='darkcyan') #'darkcyan' 是一种深青色 plt.hist(heights, bins=np.arange(145, 196, 5), color='darkcyan', density=True, cumulative=True) #设置x轴标签 plt.xlabel('身高') #设置y轴标签 plt.ylabel('人数') #设置标题 plt.title('身高直方图') #如果要同时显示和保存图表,应该先执行savefig函数,再执行show函数,因为在调用show函数时,图表已经被释放,位于show函数之后的savefig保存的只是一个空白的区域 #保存图片 plt.savefig('直方图.png') #显示 plt.show()
本文作者:little小新
本文链接:https://www.cnblogs.com/littlecc/p/18244035
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
python学习 / 数据分析
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [翻译] 为什么 Tracebit 用 C# 开发
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端