matplotlib绘制柱状图、条形图等多种图形

【前言】
1、matplotlib实现柱状图,条形图的绘制
2、网上查找了很多博主的资料,发现虽然都可以实现,但是所使用的方法是各种各样的,对于新手而言并不太友好。
3、楼主这里采用的是最简单的方式去实现各种图表,对于有些陌生的关键字会给出解释,并且绘制的过程中会慢慢的增加一些绘图的小技巧。
4、楼主在参考孙兴华的视频之后,在这里进行一个小小的总结。对于想自学的同学来说,可以作为一个参考

一、柱状图

在这里插入图片描述plt.text() 详解
在这里插入图片描述

代码实现


import pandas as pd
import matplotlib.pyplot as plt


df_BarChart = pd.read_excel(r'E:\pythonProject\matplotlib各种图表\bar_1.xlsx', dtype={'累计值': 'object'})

print(df_BarChart.head())
plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 给定 x,y轴的数据
plt.bar(x=df_BarChart.loc[:,'省市'],height=df_BarChart.loc[:,'累计值'],color="orange",width=0.5,label='累计值')

plt.xlabel('省市')    # 设置x,y轴的标签
plt.ylabel('累计值')
# 设置标题、字体大小、加粗
plt.title('各省市售电量累计值', fontsize=12,fontweight='bold')
plt.xticks(df_BarChart.loc[:,'省市'],rotation='45')  # 把底部的标签进行倾斜
plt.ylim([0,60])   # 设置y轴的刻度
plt.tight_layout()   # 紧凑形布局
# 设置图例与plt.bar() 中的label是对应的
plt.legend()
# 精确值  x,y表示在轴中的位置,s表示需要展现的文本,color设置字体颜色,va设置水平的位置,ha设置垂直的距离
for x,y in enumerate(df_BarChart.loc[:,'累计值']):
    plt.text( x=x,y=y+0.6,s='%d'% y ,color='red', va='center',ha='center'
    )

plt.show()

效果展示
在这里插入图片描述

柱状图的延深-----分组柱状图

代码实现


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df_groupbar=pd.read_excel('E:\pythonProject\matplotlib各种图表\groupbar_2.xlsx',dtype={'累计值,':'object'})
print(df_groupbar.head())

# 使用numpy模块 将x轴数字化,因为你的第二个柱子是在第一个柱子的基础上画的(
# 就类似于在第一个柱子的旁边画第二个柱子,所以画第二个柱子的时候需要挪动一个)
xticks=np.arange(len(df_groupbar.loc[:,'省市']))

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 设置两个轴的数据、bottom用来调整上下显示,label用来表示左右,但是需要挪动轴
plt.bar(range(len(df_groupbar.loc[:,'省市'])),df_groupbar.loc[:,'累计值'],width=0.5,color='orange',label='累计值')
plt.bar(xticks+0.35,df_groupbar.loc[:,'总值'],width=0.5,color='yellow',label='总值')
# 把x轴用汉字显示出来
plt.xticks(range(len(df_groupbar.loc[:,'省市'])),df_groupbar.loc[:,'省市'])
plt.xlabel('省市')
plt.ylabel('销售量')
plt.title('各省市售电量累计值、总值')
plt.legend()

# 显示精确值【的第一个柱状图】
for x1,y1 in enumerate(df_groupbar.loc[:,'累计值']):
    plt.text( x=x1, y=y1, s='%d' % y1  )
# 显示精确值【的第二个柱状图】
for x2,y2 in enumerate(df_groupbar.loc[:,'总值']):
    plt.text( x=x2, y=y2,s='%d' % y2 )
plt.show()

效果展示
在这里插入图片描述

柱状图的延深-----叠加柱状图

过一段时间更新...

二、条形图

需要把:orientation="horizontal",然后x,与y的数据交换,再添加bottom=x,即可水平条形图注意:刻度标签需要垂直居中显示

代码实现



import  numpy as np
import pandas as pd
import  matplotlib.pyplot as plt

df_horizontalBar=pd.read_excel(r'E:\pythonProject\matplotlib各种图表\horizontalBar.xlsx')
print(df_horizontalBar.head())

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 绘图 用orientation='horizontal'设置条形图、alpha=0.5设置透明度
plt.bar(x=0,bottom=df_horizontalBar.loc[:,"省市"],height=0.5,width=df_horizontalBar.loc[:,"第一个月"],orientation='horizontal',color='orange',label='第一个月',alpha=0.5)

# 设置x、y轴标签、标题
plt.xlabel("售电量")
plt.ylabel("省市")
plt.title('各省市3月份分售电量')

#精确值 把x、y轴交换一下
for y1,x1 in enumerate(df_horizontalBar.loc[:,"第一个月"]):
    plt.text( x=x1+0.5,y=y1,s=x1,ha='center',va='center',color='red')

# 设置图例
plt.legend(loc='lower right',ncol=3,fontsize=8)

plt.show()

效果展示
在这里插入图片描述

条形图的延深----叠加的条形图

代码实现


import  numpy as np
import pandas as pd
import  matplotlib.pyplot as plt

df_horizontalBar=pd.read_excel(r'E:\pythonProject\matplotlib各种图表\horizontalBar.xlsx')
print(df_horizontalBar.head())

plt.rcParams['font.sans-serif'] = ['KaiTi']   # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# 绘制的基本原理在一个柱子的基础上进行第二个柱子的绘制
plt.bar(x=0,bottom=df_horizontalBar.loc[:,"省市"],height=0.5,width=df_horizontalBar.loc[:,"第一个月"],orientation='horizontal',color='orange',label='第一个月')
plt.bar(x=df_horizontalBar.loc[:,"第一个月"],bottom=df_horizontalBar.loc[:,"省市"],height=0.5,width=df_horizontalBar.loc[:,"第二个月"],orientation="horizontal",color="yellow",label='第二个月')
plt.bar(x=df_horizontalBar.loc[:,"第一个月"]+df_horizontalBar.loc[:,"第二个月"],bottom=df_horizontalBar.loc[:,"省市"],height=0.5,width=df_horizontalBar.loc[:,"第三个月"],orientation="horizontal",color="blue",label='第三个月')

plt.xlabel("售电量")
plt.ylabel("省市")
plt.title('各省市3月份分售电量')

#精确值的设置也同理
for y1,x1 in enumerate(df_horizontalBar.loc[:,"第一个月"]):
    plt.text( x=x1-2,y=y1,s=x1,ha='center',va='center',color='black')
for y2,x2 in enumerate(df_horizontalBar.loc[:,"第一个月"]+df_horizontalBar.loc[:,"第二个月"]):
    plt.text( x=x2-2,y=y2,s=x2,ha='center',va='center', color='black')
for y3,x3 in enumerate(df_horizontalBar.loc[:,"第一个月"]+df_horizontalBar.loc[:,"第二个月"]+df_horizontalBar.loc[:,'第三个月']):
    plt.text( x=x3-2,y=y3,s=y3,ha='center',va='center',color='black')

# 设置图例
plt.legend(loc='lower right',ncol=3,fontsize=8)

plt.show()

效果展示
在这里插入图片描述

三、饼图

在这里插入图片描述

代码实现

import numpy as pd
import pandas as pd
import matplotlib.pyplot as plt

df_pie = pd.read_excel(r'E:\pythonProject\matplotlib各种图表\pie.xlsx')
print(df_pie.head())

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# x-->数据区域,labels-->标签名称,autopct-->>显示百分比,explode-->指定那个模块突出,逆时针
# shadow=True 加一个这个可以使饼图变成3D的效果。
plt.pie(x=df_pie.loc[:,'销售量'],labels=tuple(df_pie.loc[:,'水果名']),autopct='%.2f%%',explode=[0,0,0.25,0,0])
plt.title('水果销量图')
plt.show()

效果展示
在这里插入图片描述
在这里插入图片描述

四、折线图

在这里插入图片描述

代码实现


import numpy as pd
import pandas as pd
import matplotlib.pyplot as plt

df_linechart=pd.read_excel(r'E:\pythonProject\matplotlib各种图表\line_chart.xlsx')
print(df_linechart.head())

plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

# marker可以指定数据点的样式,ms表示大小
plt.plot(df_linechart.loc[:,'时间'],df_linechart.loc[:,'苹果'],color='red',marker='*',ms=10)
plt.plot(df_linechart.loc[:,'时间'],df_linechart.loc[:,'草莓'],color='yellow',marker='<',ms=10)
plt.plot(df_linechart.loc[:,'时间'],df_linechart.loc[:,'葡萄'],color='purple',marker='<',ms=10)
plt.plot(df_linechart.loc[:,'时间'],df_linechart.loc[:,'沙糖桔'],color='orange',marker='v',ms=10)

# 精确值 【使用双重遍历,把每一天折线都循环一次】
for  name in [df_linechart.loc[:,'苹果'],df_linechart.loc[:,'草莓'],df_linechart.loc[:,'葡萄'],df_linechart.loc[:,'沙糖桔']]:
    for x,y in zip(df_linechart.loc[:,'时间'],name):
        plt.text(x=x,y=y,s=str(y),ha='center',va='center',color='green' ,fontsize=12)

plt.show()

效果展示
在这里插入图片描述

五、散点图

代码实现


import  numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df_scatter=pd.read_excel('E:\pythonProject\matplotlib各种图表\scatter.xlsx',dtype={'日期':'object'})
print(df_scatter.head())

# by=直接指定即可,inplace=True 表示在原数据上修改,ascending 默认为升序
df_scatter.sort_values(by='日期',inplace=True,ascending=False)

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 指定默认字体,解决中文不显示的问题
plt.rcParams['axes.unicode_minus'] = False   # 解决保存图像是负号'-'显示为方块的问题

plt.scatter(df_scatter['日期'],df_scatter['进口矿产总数'],s=df_scatter['进口矿产总数'],marker='o',c=df_scatter['进口矿产总数'])
# 设置右边图例
plt.colorbar()
plt.xlabel('日期')
plt.ylabel('进口矿产总数')
plt.title('散点图')

plt.show()

效果展示
在这里插入图片描述

六、直方图

代码实现

import  numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df_hist=pd.read_excel('E:\pythonProject\matplotlib各种图表\hist.xlsx')
print(df_hist.head())

#解决中文显示问题,不加的话中文都显示小方块
plt.rcParams['font.sans-serif'] = ['KaiTi'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False

plt.hist(df_hist.loc[:,'身高'],bins=30,facecolor='orange',edgecolor='red')
plt.show()

效果展示
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值