使用matplotlib通过面向对象API绘制直方图,饼图,散点图,误差棒图

目录

直方图

代码:

输出:

饼图

代码:

输出:

改为圆环图:

代码1:

输出1:

代码2:

输出2:

​编辑

改为爆炸图:

代码:

输出:

散点图

代码:

输出:

误差棒图

代码:

输出:​



直方图

代码:

#导入 numpy 和 matplotlib.pyplot 两个库
import matplotlib.pyplot as plt
import numpy as np

# 创建随机数生成器和生成数据

# 随机数生成器1
random_state1 = np.random.RandomState(111)
# 生成数据1,正态分布  
random_x1 = random_state1.normal(loc=0.5, scale=0.2, size=10000)  


# 随机数生成器2
random_state2 = np.random.RandomState(222)
# 生成数据2,正态分布  
random_x2 = random_state2.normal(loc=0.7, scale=0.3, size=15000)  


# 随机数生成器3
random_state3 = np.random.RandomState(333)  
# 生成数据3,正态分布
random_x3 = random_state3.normal(loc=0.9, scale=0.1, size=8000)  

# 绘制直方图
# 画出三条直方图
plt.hist([random_x1, random_x2, random_x3], bins=25, label=['Data 1', 'Data 2', 'Data 3'])  
# 添加图例
plt.legend()  
# 设置标题
plt.title("Histogram of Random Data")  
# 设置x轴标签
plt.xlabel("Value")  
# 设置y轴标签
plt.ylabel("Frequency")  
# 显示图形
plt.show() 

输出:

饼图

代码:

# 导入所需库
import matplotlib.pyplot as plt
import matplotlib as mpl

# 配置中文显示
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 定义数据
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
money_scale = [800, 100, 1000, 200, 300, 200, 200, 200]

# 绘制饼图
plt.pie(money_scale,
        labels=kinds,  # 设置饼图各部分对应的标签
        autopct='%3.1f%%',  # 设置百分比标签格式
        startangle=180)  # 设置饼图的起始角度

# 显示饼图
plt.show()

这段代码通过使用matplotlib.pyplotmatplotlib库来创建一个饼图。注释中解释了每个步骤的作用:

  1. 导入所需的库。
  2. 配置中文显示,使得图表中的中文能够正常显示。
  3. 定义了要绘制饼图的数据,kinds表示每个部分的标签,money_scale表示每个部分对应的数值。
  4. 最后通过plt.show()显示饼图。

输出:

改为圆环图:

 代码1:

# 导入所需库
import matplotlib.pyplot as plt
import matplotlib as mpl

# 配置中文显示
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 定义数据
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
money_scale = [800, 100, 1000, 200, 300, 200, 200, 200]

# 绘制饼图
plt.pie(money_scale,
        wedgeprops={'width': 0.5},  # 设置饼图的内外半径比例
        pctdistance=3/4,  # 设置百分比标签距离饼图中心的距离
        labels=kinds,  # 设置饼图各部分对应的标签
        autopct='%3.1f%%',  # 设置百分比标签格式
        startangle=180)  # 设置饼图的起始角度

# 显示饼图
plt.show()

这段代码通过使用matplotlib.pyplotmatplotlib库来创建一个饼图。注释中解释了每个步骤的作用:

  1. 导入所需的库。
  2. 配置中文显示,使得图表中的中文能够正常显示。
  3. 定义了要绘制饼图的数据,kinds表示每个部分的标签,money_scale表示每个部分对应的数值。
  4. 使用plt.pie()函数绘制饼图。其中的参数设置了饼图的属性,如内外半径比例、百分比标签的距离、标签、百分比标签的格式和起始角度等。
  5. 最后通过plt.show()显示饼图。

输出1:

代码2:

# 导入所需库
import matplotlib.pyplot as plt
import matplotlib as mpl

# 配置中文显示
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 定义数据
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
money_scale = [800, 100, 1000, 200, 300, 200, 200, 200]

# 绘制圆环图
plt.pie(money_scale,
        wedgeprops={"width": 0.4},  # 设置圆环宽度
        pctdistance=3/4,
        labels=kinds,
        autopct='%3.1f%%',
        startangle=180)

# 画一个空白的圆形,相当于盖住内部的一部分,形成圆环效果
circle = plt.Circle((0, 0), 0.3, fc='white')
plt.gca().add_artist(circle)

# 显示圆环图
plt.axis('equal')  # 设置坐标轴刻度相等,使圆环图为正圆
plt.show()

代码中,使用wedgeprops参数的width属性将圆环宽度设置为0.4,即内环和外环之间的距离。然后通过添加一个白色的圆形来盖住内部一部分,形成圆环效果。最后使用plt.axis('equal')来设置坐标轴刻度相等,使圆环图呈现为正圆形。

输出2:

改为爆炸图:

代码:

# 导入所需库
import matplotlib.pyplot as plt
import matplotlib as mpl

# 配置中文显示
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 定义数据
kinds = ['购物', '人情往来', '餐饮美食', '通信物流', '生活日用', '交通出行', '休闲娱乐', '其他']
money_scale = [800, 100, 1000, 200, 300, 200, 200, 200]
explode = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]  # 设置“爆炸”程度

# 绘制爆炸图
plt.pie(money_scale,
        explode=explode,  # 设置“爆炸”程度
        wedgeprops={"width": 0.4},
        pctdistance=3/4,
        labels=kinds,
        autopct='%3.1f%%',
        startangle=180)

# 画一个空白的圆形,相当于盖住内部的一部分,形成圆环效果
circle = plt.Circle((0, 0), 0.3, fc='white')
plt.gca().add_artist(circle)

# 显示图表
plt.axis('equal')
plt.show()

代码中,使用了explode参数来控制每个部分与中心的距离。

输出:

散点图

代码:

# 导入所需库
import numpy as np
import matplotlib.pyplot as plt

# 设置中文显示
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

# 创建数据
x_speed = np.arange(10, 210, 10)  # 速度数据
y_distance = np.array([0.5, 2.0, 4.4, 7.9, 12.3,
                       17.7, 24.1, 31.5, 39.9, 49.2,
                       59.5, 70.8, 83.1, 96.4, 110.7,
                       126.0, 142.2, 159.4, 177.6, 196.8])  # 距离数据
area = np.linspace(20, 300, 20)  # 气泡大小

# 绘制散点图
plt.scatter(x_speed, y_distance,
            s=area,  # 指定气泡大小
            alpha=0.9,  # 设置透明度
            c='orange')  # 将气泡绘制为橙色

# 显示图表
plt.show()

这段代码实现了将速度和距离用散点图展示出来,每个散点代表一个数据点。其中:

  • x_speed表示速度数据,使用np.arange()生成从10到200的等差数列。
  • y_distance表示距离数据,为一组预设的距离数组。
  • area表示气泡的大小,使用np.linspace()生成20个从20到300的等差数列来表示不同的气泡大小。
  • plt.scatter()绘制散点图,通过s参数传入气泡的大小,alpha参数设置透明度,c参数指定气泡的颜色。
  • plt.show()显示图表。

输出:

误差棒图

代码:

# 导入所需库
import numpy as np
import matplotlib.pyplot as plt

# 设置中文字体和正常显示负号
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False

# 定义X轴坐标
x = np.arange(3)

# 定义四组Y轴数据
y1 = np.array([2.04, 1.57, 1.63])
y2 = np.array([1.69, 1.61, 1.64])
y3 = np.array([4.65, 4.99, 4.94])
y4 = np.array([3.39, 2.33, 4.10])

# 定义四组误差数据
error1 = [0.16, 0.08, 0.10]
error2 = [0.27, 0.14, 0.14]
error3 = [0.34, 0.32, 0.29]
error4 = [0.23, 0.23, 0.39]

# 定义每个柱子的宽度
bar_width = 0.2

# 绘制四组柱状图
plt.bar(x, y1, bar_width)  # 绘制第一组柱状图
plt.bar(x + bar_width, y2, bar_width, align="center", tick_label=["春季", "夏季", "秋季"])  # 绘制第二组柱状图,并设置标签
plt.bar(x + 2 * bar_width, y3, bar_width)  # 绘制第三组柱状图
plt.bar(x + 3 * bar_width, y4, bar_width)  # 绘制第四组柱状图

# 绘制误差棒
plt.errorbar(x, y1, yerr=error1, capsize=3, elinewidth=2, fmt='k,')  # 绘制第一组误差棒
plt.errorbar(x + bar_width, y2, yerr=error2, capsize=3, elinewidth=2, fmt='k,')  # 绘制第二组误差棒
plt.errorbar(x + 2 * bar_width, y3, yerr=error3, capsize=3, elinewidth=2, fmt='k,')  # 绘制第三组误差棒
plt.errorbar(x + 3 * bar_width, y4, yerr=error4, capsize=3, elinewidth=2, fmt='k,')  # 绘制第四组误差棒

# 显示图形
plt.show()

输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值