数据可视化:Python Matplotlib.pyplot 概要


api见:https://matplotlib.org/3.3.2/api/
函数用法见:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.html

零、导包

import matplotlib.pyplot as plt

或者

from matplotlib import pyplot as plt

壹、折线图:plt.plot(x,y)

1. 输入x,y轴数据

x = [0,1,2,3,4]  #  x 轴数据
y = [0,1,2,3,4]  #  y 轴数据

2. 通用:设置标题和坐标,显示网格

plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例 
plt.title('图表标题')
plt.xlabel('x轴名称')
plt.ylabel('y轴名称')
plt.grid() # 按需显示网格

3. 绘制并显示图像

plt.plot(x,y) # 绘制
plt.show() # 显示图像,Jupyter Notebook里面不加这行也会显示!

在这里插入图片描述

----------------------锦上添花分割线----------------------

4. 按需更改线段风格

比如在plot时添加:

plt.plot(x,y,marker='.',markersize=10,color='red',linewidth=4,markeredgecolor='black')

在这里插入图片描述

关键字作用
marker把(x,y)的数据标出来,.代表用实心圆标记,还可以使用+,*,^等。
markersize调整marker的大小。
markeredgecolor给marker加上指定颜色的边框。
color改变线段颜色。
linewidth改变线段粗细。
linestyle-代表实线,--代表虚线。
label给多线图添加图例,详见补充2。

快捷输入:

plt.plot(x,y,'r.-') # 格式color marker linestyle
# 等同于:
plt.plot(x,y,color='red',marker='.',linestyle='-') 

对此感兴趣的同学可以访问 “pythonic生物人” 写的自定义marker/linestyle:https://www.jianshu.com/p/7543b925bdb8

5. 按需把两条/多条线画在同一幅图上并添加图例

# x,y数据同上
new_y = [0,0.5,3,2,6]   #  新的 y 轴数据

# 为了区分两组数据我们需要添加两条线的图例,只需要在plot的时候添加label关键字
plt.plot(x,y,label='original')      # 画原始x,y
plt.plot(x,new_y, label='new')  # 画新的x,y
plt.fill_between(x,new_y,alpha=0.2) #为了区分两条线,可以给其中一条画阴影!
plt.legend() # 显示图例,可以使用plt.legend(loc=(0,0))调整图例位置
plt.show()   # 只要一个show就可以把图画在一起了!

在这里插入图片描述

要显示中文图例可别忘了下面这行噢!

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

对阴影面积进行处理:

plt.fill_between(x,new_y,overall_mid,where=(x <= overall_mid),interpolate=True,alpha = 0.2,color='red')

6. 通用:按需改变图表风格

plt.plot(x,y) 
plt.style.use('seaborn-paper')     # 使用内置风格
plt.show()

在这里插入图片描述
更多风格可供尝试:

'Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10'

动漫风格直接添加下行:(无法显示中文字体)

plt.xkcd()

7. 通用:多图绘制

fig, (ax1,ax2,ax3) = plt.subplots(nrows=3,ncols=1,sharex=True,sharey=True) # nrows=行数,ncols=列数

ax1.plot(x,y)
ax2.plot(x,new_y)
ax3.plot(x,y)

在这里插入图片描述

8. 按需保存图片

plt.savefig('图片名字.png')

贰、散点图

0. 数据

x = [5, 7, 8, 5, 6, 7, 9, 2, 3, 4, 4, 4, 2, 6, 3, 6, 8, 6, 4, 1]
y = [7, 4, 3, 9, 1, 3, 2, 5, 2, 4, 8, 7, 1, 6, 4, 9, 7, 7, 5, 1]

1. 绘制散点图

plt.scatter(x,y,s=100,c='red',edgecolor='black',linewidth=1,alpha=0.25) # s=大小, c=颜色, edgecolor=边框颜色, linewidth=边框粗细, alpha=不透明度
plt.grid()
plt.show()

在这里插入图片描述

2. 改变散点颜色

# 根据color list大小区分颜色
colors = [7, 5, 9, 7, 5, 7, 2, 5, 3, 7, 1, 2, 8, 1, 9, 2, 5, 6, 7, 5]

# 根据size list区分颜色
sizes = [209, 486, 381, 255, 191, 315, 185, 228, 174, 538, 239, 394, 399, 153, 273, 293, 436, 501, 397, 539]

# 画图
plt.scatter(x,y,s=sizes,c=colors,edgecolor='black',linewidth=1,alpha=0.95)
plt.grid()

# 添加color bar
cbar = plt.colorbar()
cbar.set_label('Label')

在这里插入图片描述

叁、柱状图

标题/坐标轴名称/grid等同理折线图。

1. 定义

柱状图分为:

  • 条形图:各条形之间留有空隙,一般表示离散类型数据,如性别。长度表示频数,宽度表示类别。
  • 直方图:各条形之间无空隙,一般表示连续类型数据,如年龄。长度表示频数,宽度表示数据范围。

2. 绘制纵向条形图:plt.bar(x,y)

plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例 
# 输入数据
menu = ['西湖醋鱼','宫保鸡丁', '松鼠桂鱼', '东坡肉', '酸菜鱼']
popularity = [15,10,13,25,23]
# 绘制图像
plt.bar(menu,popularity)
plt.xticks(rotation=45) # 旋转x轴类名45°,y轴同理
plt.show()

在这里插入图片描述

3. 绘制横向条形图:plt.barh(x,y)

plt.barh(menu,popularity)
plt.show()

4. 绘制直方图:plt.hist(x,y)

ages = [18, 19, 21, 25, 26, 26, 30, 32, 38, 45, 55] # 数据列表
bins=[20,30,40,50,60] # 分类
plt.hist(ages,edgecolor='black',bins=bins)

#添加辅助线
median_age= 29
plt.axvline(median_age,color='red',label = 'Median')
plt.legend()

在这里插入图片描述

肆、饼图:plt.pie(x, label=y)

标题/坐标轴名称/grid等同理折线图。

0. 数据

menu = ['西湖醋鱼','宫保鸡丁', '松鼠桂鱼', '东坡肉', '酸菜鱼']
popularity = [15,10,13,25,23]
plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例 

1. 绘制饼图

plt.pie(popularity,labels=menu)
plt.show()

在这里插入图片描述

----------------------锦上添花分割线----------------------

2. “蛋糕” / 爆炸 效果

# 使第四个菜“东坡肉”显示爆炸效果
explo = [0,0,0,0.1,0] # 数值为远近程度
plt.pie(popularity,labels=menu,explode=explo,shadow=True,startangle=0,autopct='%1.2f%%',wedgeprops={'edgecolor':'black'})
plt.show()

在这里插入图片描述

关键字作用
shadow=True使饼图添加阴影效果,变得立体。
startangle=0调整起始角度,旋转饼图。
autopct='%1.2f%%'使饼图显示两位小数的占比。
wedgeprops={'edgecolor':'black'}设置边框颜色为黑色。

3. 大小自适应

当需要在手机端或者多平台访问则需要:

plt.tight_layout()

伍、堆叠图:plt.bar(x,y)/plt.stackplot(x,y1,y2…)

0. 数据

menu = ['西湖醋鱼','宫保鸡丁', '松鼠桂鱼', '东坡肉', '酸菜鱼']
popularity = [15,10,13,25,23] # 店内点餐人数
take_out_popularity = [0,3,7,35,50] # 外卖点餐人数
plt.rcParams['font.sans-serif'] = ['SimHei'] #使图像能显示中文标题/图例 

1. 柱状堆叠图

plt.bar(menu, popularity, label='店内点餐人数')
plt.bar(menu, take_out_popularity, bottom=popularity, label='外卖点餐人数')

在这里插入图片描述

2. 折线堆叠图

label=['店内点餐人数','外卖点餐人数']
plt.stackplot(menu,popularity,take_out_popularity,labels=label)
plt.legend()

在这里插入图片描述

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失眠软糖12

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值