使用matplotlib进行数据可视化——绘制带有中文标题、标签和图例的折线图

任务要求:

某商品进价49元,售价75元,现在商场新品上架搞促销活动,顾客每多买一件就给优惠1%,但是每人最多可以购买30件。对于商场而言,活动越火爆商品单价越低,但总收入和盈利越多。对于用户而言,虽然买的越多单价越低,但是消费总金额却是越来越多的,并且购买太多也会因为用不完而导致过期不得不丢弃造成浪费。现在要求计算并使用折线图可视化顾客购买数量num与商家收益、顾客总消费以及顾客省钱情况的关系,并标记商家收益最大的批发数量和收益。

代码编写:

import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# 进价与零售价
basePrice, salePrice = 49, 75

# 计算买num个时的批发价,买的越多,单价越低
def compute(num):
    return salePrice * (1-0.01*num)

# numbers用来存储顾客购买数量
# earns用来存储商场的盈利情况
# totalConsumption用来存储顾客消费总金额
# saves用来存储顾客节省的总金额
numbers = list(range(1, 31))
earns = []
totalConsumption = []
saves = []
# 根据顾客购买数量计算三组数据
for num in numbers:
    earns.append(round(num*(compute(num)-basePrice), 2))
    totalConsumption.append(round(num*compute(num), 2))
    saves.append(round(num*(salePrice-compute(num)), 2))

# 绘制商家盈利和顾客节省的折线图,系统自动分配线条颜色
plt.plot(numbers, earns, label='商家盈利')
plt.plot(numbers, totalConsumption, label='顾客总消费', ls='-.')
plt.plot(numbers, saves, label='顾客节省', lw=3)

# 设置坐标轴文本
plt.xlabel('顾客购买数量(件)', fontproperties='simhei')
plt.ylabel('金额(元)', fontproperties='simhei')
# 设置图形标题
plt.title('数量-金额关系图', fontproperties='stkaiti')

# 创建字体,设置图例
myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.ttf')
plt.legend(prop=myfont)

# 计算并标记商家盈利最多的批发数量
maxEarn = max(earns)
bestNumber = numbers[earns.index(maxEarn)]
# 散点图,在相应位置绘制一个红色五角星,详见8.3节
plt.scatter([bestNumber], [maxEarn], marker='*', color='red', s=120)
# 使用文本标注标记该位置
plt.annotate(xy=(bestNumber, maxEarn),          # 箭头终点
             xytext=(bestNumber-1, maxEarn+200),# 箭头起点
             s=str(maxEarn),                    # 显示的标注文本
             arrowprops=dict(arrowstyle="->"))  # 箭头样式

# 显示图形
plt.show()

图形展示:

 

`matplotlib` 是 Python 中最常用的数据可视化库之一,提供了丰富的图形绘制功能。以下是如何使用 `matplotlib` 创建常见的数据可视化图形: 1. **安装 matplotlib**(如果你还没有安装): ```bash pip install matplotlib ``` 2. **导入模块**: ```python import matplotlib.pyplot as plt import numpy as np # 用于生成随机数据 ``` ### 1. 创建折线图 要创建一个简单的折线图,你需要先创建 x y 值的数据,然后使用 `plt.plot()` 函数: ```python x = np.linspace(0, 10, 100) # 生成等差数列 y = np.sin(x) # 按正弦规律计算 # 绘制折线图 plt.plot(x, y) plt.xlabel('X-axis') # X轴标签 plt.ylabel('Y-axis') # Y轴标签 plt.title('Sine Wave') # 图形标题 plt.show() # 显示图表 ``` ### 2. 创建散点图 散点图通常用来表示两个变量之间的关系,用 `plt.scatter()` 函数绘制: ```python x = [1, 2, 3, 4, 5] # 第一列数据 y = [10, 20, 30, 40, 50] # 第二列数据 plt.scatter(x, y) plt.xlabel('X values') plt.ylabel('Y values') plt.title('Scatter Plot') plt.show() ``` ### 3. 创建直方图 直方图用于显示数据分布情况,用 `plt.hist()` 函数: ```python data = np.random.randn(1000) # 生成一组正态分布的随机数 plt.hist(data, bins=20) # 分为20个区间 plt.xlabel('Value') plt.ylabel('Frequency') plt.title('Histogram') plt.show() ``` 这些是基础示例,你可以根据实际需求调整数据、添加更素(如网格线、误差条、图例等),以及使用更高级的功能,比如子图颜色映射。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

会的东西有点杂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值