Bootstrap

Python教程:使用Matplotlib模块画柱状图、饼形图、直方图

Matplotlib是Python中一个用于数据可视化的库,它提供了用于绘制各种静态、动态、交互式的图形的工具和API。Matplotlib可用于以可视化的形式展示数据和模型的结果,包括折线图、散点图、柱状图和分布图等。它同时具有高度的可定制性,可以自定义图形的样式、标签、颜色和字体等。

Matplotlib具有简单易用的API,可以快速绘制各种类型的图表。Matplotlib的底层绘图库是NumPy库中的ndarray,因此可以与NumPy和SciPy等Python科学计算库一起使用。Matplotlib也可以与图形用户界面库结合使用,从而提供交互性图形的绘制。它是Python中最常用的绘图库之一。

01 添加属性

#1.导入模块
import matplotlib.pyplot as plt
import numpy as np

#2.创建x
x=np.linspace(0,10,100)

#3.给plot方法添加参数label
plt.plot(x,x+0,'--g',label='--g')
plt.plot(x,x+1,'-.r',label='-.r')
plt.plot(x,x+2,':b',label=':b')
plt.plot(x,x+3,'.k',label='.k')
plt.plot(x,x+4,',c',label=',c')
plt.plot(x,x+5,'*y',label='*y')
# 使用legend()图例,左上角upper left fancybox边框  framealpha透明度  shadow阴影  borderpad边框宽度
plt.legend(loc='upper right',fancybox=True,framealpha=0.5,shadow=True,borderpad=1) #默认的位置在左上角upper left  可以通过loc进行修改
plt.show()

02柱状图的画法

#导入模块
import matplotlib.pyplot as plt
import numpy as np
#创建x ,y  表示x年份  y表示年份对应的销量

x=[2017,2019,2021,2023]
x_label=['2020年','2021年','2022年','2023年']
y=[1000,3000,4000,5000]
#调用bar函数绘制柱状图
#x的距离要比width设置单位要大(2019-2017)>1
plt.bar(x,y,width=1)#width修改柱的宽度
#修改中文乱码
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#修改x坐标的值
plt.xticks(x,x_label)
#给x坐标y坐标添加名称
plt.xlabel('年份')
plt.ylabel('销量')
#添加标题title
plt.title('这是一个年份销量图表')
plt.show()

03bar和barh函数的使用

04红绿柱子

#导入模块
import matplotlib.pyplot as plt
import numpy as np

#生成x y
np.random.seed(0)
x=np.arange(15)
y=np.random.randint(-20,20,15)
#添加颜色
v_bar=plt.bar(x,y,color='red')

#对y值大于0设置为蓝色  小于0的柱设置为绿色
for bar,height in zip(v_bar,y):
    if height<0:
        bar.set(color='green')

plt.show()

05画多个柱子

#导入模块
import matplotlib.pyplot as plt
import numpy as np
#准备数据
#三部电影的名称
movie_names=['肖申克的救赎','霸王别姬','泰坦尼克号']
#3天内票房数
num1=[7858,5213,6573]
num2=[9453,8040,9080]
num3=[7348,6315,8830]
x=np.arange(len(movie_names))
#绘制柱状图
width=0.3
plt.bar(x,num1,alpha=0.5,width=width,label=movie_names[0])
plt.bar([i+width for i in x],num2,alpha=0.5,width=width,label=movie_names[1])
plt.bar([i+2*width for i in x],num3,alpha=0.5,width=width,label=movie_names[2])
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#设置x坐标的值  第1天   第2天   第3天
x_label=['第{}天'.format(i+1) for i in x]
# print(x_label)
plt.xticks([i+width for i in x],x_label)
#添加ylabel
plt.ylabel('票房数')
#添加图例
plt.legend()
#添加标题
plt.title('3天3部电影票房数')
plt.show()

06饼状图

#导入模块
import matplotlib.pyplot as plt
import numpy as np
#准备男、女的人数及比例
man=74735
woman=62169
man_perc=man/(woman+man)
woman_perc=woman/(woman+man)
#添加名称
labels=['男','女']
#添加颜色
colors=['blue','red']
#绘制饼状图  pie
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# labels 名称 colors:颜色,explode=分裂  autopct显示百分比
paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')

#设置饼状图中的字体颜色
for text in autotexts:
    text.set_color('white')

#设置字体大小
for text in texts+autotexts:
    text.set_fontsize(26)
plt.show()

07直方图

#导入模块
import matplotlib.pyplot as plt
import numpy as np
#使用np.random.normal()指定期望和均值的正太分布
x=np.random.normal(0,0.8,500)
y=np.random.normal(-5,1,500)
z=np.random.normal(3,2,500)
kwargs=dict(bins=100,alpha=0.5) #alpha是透明度
plt.hist(x,**kwargs)
plt.hist(y,**kwargs)
plt.hist(z,**kwargs)
plt.show()

更多Python资料请戳👇

;