Matplotlib基础02-常用图像绘制(折线图/散点图/柱状图/直方图/饼图/箱线图/热图/极坐标图/雷达图/填充图)

常用图像绘制方法

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

折线图是最常见的图形之一,适用于展示数据随时间或其他变量变化的趋势。

plt.figure(figsize=(8,4))
x=['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
y=[53, 65, 32, 54, 68, 76, 102]
plt.plot(x, y, marker='o')
plt.ylim(0, 500)
plt.title('一周内公园接待人数')
plt.xlabel('星期')
plt.ylabel('人数/个')
for a,b in zip(x, y):
    plt.text(
        x=a,
        y=b+3,
        s=b,
        ha='center'
    )
plt.plot(x, np.cumsum(y), marker='D')
plt.grid()
for a,b in zip(x, np.cumsum(y)):
    plt.text(
        x=a,
        y=b+3,
        s=b,
        ha='center'
    )

image-20250205110428763

2. 散点图:plt.scatter()

散点图用于显示两个变量之间的关系。

# 创建数据
x = np.random.rand(50)
y = np.random.rand(50)

# 绘制散点图
plt.scatter(x, y, color='r', marker='x')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot Example')
plt.show()
3. 柱状图:plt.bar()/plt.hbar()

柱状图适用于显示不同类别数据的比较。

# 创建数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [5, 7, 3, 9, 6]

# 绘制柱状图
plt.bar(categories, values, color='c')
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Chart Example')
plt.show()

image-20250205111800976

  • 簇型柱状图

要绘制簇型柱状图,您需要将两组数据在相同类别下进行并排显示,而不是重叠在一起。为此,您需要设置 bar 的位置,并通过调整宽度来使柱状图并排显示。可以通过 width 参数控制柱体的宽度,并通过调整 x 坐标来实现这一效果。

# 创建数据
categories = ['A', 'B', 'C', 'D', 'E']
values1 = [5, 7, 3, 9, 6]
values2 = [3, 9, 5, 8, 4]
# 设置柱体宽度
width = 0.2
# 设置类别的x轴位置
x = np.arange(len(categories))
# 绘制簇型柱状图
plt.bar(x - width/2, values1, width, color='c', label='Values 1')
plt.bar(x + width/2, values2, width, color='g', label='Values 2')
# 设置标签和标题
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Clustered Bar Chart Example')
# 设置x轴的刻度标签
plt.xticks(x, categories)
# 添加图例
plt.legend()
# 显示图形
plt.show()

image-20250205111750573

  • 堆叠柱状图

通过设置bottom属性,将要堆叠的部分上移动

# 绘制簇型柱状图
plt.bar(categories, values1, width, color='c', label='Values 1')
plt.bar(categories, values2, width, color='g', label='Values 2', bottom=values1)
# 设置标签和标题
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Clustered Bar Chart Example')
plt.grid()
# 添加图例
plt.legend()
# 显示图形
plt.show()

image-20250205112306605

4. 直方图:plt.hist()

直方图用于展示数据的分布情况。

#创建数据
data = np.random.randn(1000)
# 绘制直方图
# 直方图会统计每个数字出现的个数并展示
# bins表示要分的组的范围:((data.max()+1)-data.min())/bins
# edgecolor:边框的颜色
# density=True可以将各个数的此数转换为其占比

plt.hist(data, bins=30, color='g', edgecolor='black', density=True)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram Example')
plt.show()

image-20250205113618425

5. 饼图:plt.pie()

饼图适用于展示各部分占整体的比例。

# 数据:不同水果的销售量
labels = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']
sizes = [25, 40, 20, 10, 5]  # 每种水果的销售数量

plt.pie(
    x=sizes, #数据
    labels=labels,#标签
    autopct='%.1f%%',#显示百分比
    pctdistance=0.8,#百分比位置
    labeldistance=1.2,#标签的位置
    shadow=True,#阴影
    textprops={'fontsize':12, 'color':'black'},#文字大小
    explode=[0,0.1,0,0,0] #将某一部分突出展示
)
plt.show()
image-20250206174112287
  • 环形饼状图
# 数据:不同水果的销售量
labels = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']
sizes = [25, 40, 20, 10, 5]  # 每种水果的销售数量

plt.pie(
    x=sizes, #数据
    labels=labels,#标签
    autopct='%.1f%%',#显示百分比
    pctdistance=0.8,#百分比位置
    labeldistance=1.2,#标签的位置
    textprops={'fontsize':12, 'color':'black'},#文字大小
    
    #用于自定义饼图中各个扇区(楔形区域)外观的属性
    wedgeprops={'width':0.4, 'edgecolor':'white'} 
)
plt.show()
image-20250206173727703
  • 双环形饼状图
import matplotlib.pyplot as plt

# 数据:不同水果的销售量
labels = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']
sizes = [25, 40, 20, 10, 5]  # 每种水果的销售数量
sizes2 = [100, 60, 130, 110, 85]  # 总利润

# 设置每个扇区的颜色
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#ffb3e6']

plt.figure(figsize=(8, 6))

# 外层饼图:显示水果的销售量
plt.pie(
    x=sizes,  # 数据
    labels=labels,  # 标签
    autopct='%.1f%%',  # 显示百分比
    pctdistance=0.8,  # 百分比位置
    labeldistance=1.2,  # 标签的位置
    textprops={'fontsize': 12, 'color': 'black'},  # 文字大小
    wedgeprops={'width': 0.4, 'edgecolor': 'white'},  # 扇区外观
    colors=colors  # 设置颜色
)

# 内层饼图:显示水果的总利润
plt.pie(
    x=sizes2,  # 数据
    autopct='%.1f%%',  # 显示百分比
    pctdistance=0.8,  # 百分比位置
    textprops={'fontsize': 12, 'color': 'black'},  # 文字大小
    radius=0.6,  # 半径
    colors=colors  # 设置与外层相同的颜色
)

plt.show()
image-20250206174659341
6. 箱线图:plt.boxplot()
  1. 箱体(Box):箱体的上、下边分别代表数据的第三四分位数(Q3,75%的数据)和第一四分位数(Q1,25%的数据)。箱体内的中线通常表示数据的中位数(Q2,50%的数据)。
  2. 须(Whiskers):箱体的两侧分别延伸出“须”,这些“须”代表了数据的最大值和最小值,但必须排除异常值。通常,须的长度表示数据范围,但不会超出1.5倍四分位间距(IQR,Interquartile Range)。
  3. 异常值(Outliers):如果数据点超出1.5倍四分位间距(Q3-Q1)的范围,它们就被视为异常值,通常以小圆点或星号的形式标出。

箱线图用于展示数据的分布情况,特别是异常值和中位数。

plt.boxplot(
    x=[-4,1,5,6,7,8,9,15],  # 数据集:这是一组包含8个数值的数据
    notch=True,  # 开启缺口:这会使箱型图的箱体边缘带有缺口,表示中位数的置信区间
    sym='r*'  # 设置异常值的样式:这里使用红色星形(r*)来表示异常值
)
plt.grid()  # 添加网格线:方便查看箱型图和数据的分布
plt.show()  # 显示图形:绘制和展示箱型图

image-20250206170535413

7. 热图:plt.imshow()

热图适用于展示二维数据的强度或密度。

data=df.set_index('姓名')
plt.imshow(
    X=data.values,
    cmap='rainbow'#用于指定 颜色映射(colormap) 的参数
)
plt.xticks(range(len(data.index)), data.index)
plt.yticks(range(len(data.columns)), data.columns)
for i in range(len(data.index)):
    for j in range(len(data.columns)):
        plt.text(
            x=i,
            y=j,
            s=data.values[i][j])
plt.colorbar()
plt.show()
image-20250206181630724
8. 极坐标图:plt.subplot(projection=‘polar’)

极坐标图用于展示极坐标系下的数据。

N = 8  # 设置N值,表示将圆形分成8份
# 使用np.linspace生成一个从0到2π的等间距的数组,共N个点,不包括2π本身
x = np.linspace(0, 2*np.pi, N, endpoint=False)  # 将圆形分成N份

# 生成一个大小为N的随机整数数组,取值范围在1到10之间,用作极坐标的高度
h = np.random.randint(1, 10, size=N)  # 极坐标的高度

# 创建一个极坐标图,'projection'设置为'polar',表示使用极坐标系
axes = plt.subplot(1, 1, 1, projection='polar')  # 生成一个极坐标系

# 绘制极坐标条形图
# x: 条形的角度位置,height: 条形的高度,width: 条形的宽度,color: 条形的颜色
axes.bar(x=x, height=h, width=2*np.pi/N, color=np.random.rand(8, 3))
image-20250206182648671
9.雷达图

注意:雷达图的数据要首位相连

fig=plt.figure(figsize=(6,6))
N = 8
x = np.linspace(0, 2 * np.pi, N, endpoint=False)  # 角度
axes = plt.subplot(1, 1, 1, polar=True)  # 生成一个极坐标系

# 准备数据
data = [85, 90, 80, 80, 60, 38, 93, 77]
labels = ['速度', '中投', '三分', '外防', '内防', '篮板', '突破', '组织']

# 将数据首尾相连
x = np.concatenate((x, [x[0]]))
y = np.concatenate((data, [data[0]]))

# 绘制雷达图
axes.plot(x, y, marker='o')
axes.fill(x, y, alpha=0.3)

# 设置刻度
axes.set_yticklabels([])  # 取消刻度标签
axes.set_xticklabels(labels)  # 设置标签

# 显示数值
for i in range(len(data)):
    axes.text(
        x=x[i],  # 角度位置
        y=y[i] + 3,  # 数值位置略高于数据点
        s=str(data[i]),  # 显示数值
        horizontalalignment='center',  # 水平居中
        size=10  # 字体大小
    )

plt.show()
fig.savefig('1.png')

image-20250206214342905

10. 填充图(Fill Plot)

填充图展示数据之间的区域,常用于展示函数曲线下方的面积。

# 创建数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘制填充图
plt.fill_between(x, y, color='lightblue', alpha=0.5)
plt.plot(x, y, label='y = sin(x)', color='blue')
plt.title('Fill Plot Example')
plt.show()
image-20250206182715012
内容概要:本文详细介绍了如何使用Matlab对地表水源泵系统进行建模,并采用粒子群算法来优化每小时的制冷量和制量。首先,文章解释了地表水源泵的工作原理及其重要性,随后展示了如何设定基本参数并构建泵机组的基础模型。接着,文章深入探讨了粒子群算法的具体实现步骤,包括参数设置、粒子初始化、适应度评估以及粒子位置和速度的更新规则。为了确保优化的有效性和实用性,文中还讨论了如何处理实际应用中的约束条件,如设备的最大能力和制冷/制模式之间的互斥关系。此外,作者分享了一些实用技巧,例如引入混合优化方法以加快收敛速度,以及在目标函数中加入额外的惩罚项来减少不必要的模式切换。最终,通过对优化结果的可视化分析,验证了所提出的方法能够显著降低能耗并提高系统的运行效率。 适用人群:从事暖通空调系统设计、优化及相关领域的工程师和技术人员,尤其是那些希望深入了解地表水源泵系统特性和优化方法的专业人士。 使用场景及目标:适用于需要对地表水源泵系统进行精确建模和优化的情景,旨在找到既满足建筑负荷需求又能使机组运行在最高效率点的制冷/制量组合。主要目标是在保证室内舒适度的前提下,最大限度地节约能源并延长设备使用寿命。 其他说明:文中提供的Matlab代码片段可以帮助读者更好地理解和复现整个建模和优化过程。同时,作者强调了在实际工程项目中灵活调整相关参数的重要性,以便获得更好的优化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值