颜色渐变的数据密集适用的堆叠图

一般情况会用柱状图去堆叠,但是如果数据量太大了,就可考虑这种方式堆叠。可以呈现时间和数量上不同层次数据的变化。

效果图:

在这里插入图片描述


比较详细的注释一下源码:

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
mpl.use("Agg")

# 页面访问频率随时间的变化

def main():
		# 图片抬头的信息
        abbr_workload_name = "图片标题"
        scanning_interval = 5 # 扫描时间间隔
        thp = "4kB" # 页面大小
        
        # 数据文件路径
        file_path = "./hags_NPB_based.log"
        img_name = "图片名称"
        y_values = []
        x_tmp = []
        # 使用 with 语句打开一个文件。file_path 是文件的路径。使用 with 语句可以确保在处理完文件后,文件会被正确关闭,即使在处理文件过程中发生异常也会被处理。
        with open(file_path) as f:  
            # 它迭代文件f中的每一行。每次迭代时,将当前行的内容赋值给变量line
            for line in f:
            	# 使用 split 方法将 line 字符串按逗号 , 分割成一个列表。split 方法会根据指定的分隔符将字符串分割成多个子字符串,并返回一个包含这些子字符串的列表。在这里,使用逗号作为分隔符将当前行分割成多个字段。
                splitted_line = line.split(",")

				# 数据预处理
                # 将每一行数据的的第一个数据去掉
                x_tmp.append(splitted_line[0])
                # 使用列表推导式,将 splitted_line 列表中的每个元素转换为浮点数,并进行除法计算
                # 根据需求splitted_line[1:]反向迭代的方式,最前面读取到的数据堆叠在最下面
                value_li = [float(n) / 1024 for n in splitted_line[1:]]  
                y_values.append(value_li)
                
        y_tran = np.transpose(y_values)  # 做了一次转置
        x_values = range(len(x_tmp))

		# 作图
        fig, ax = plt.subplots()
        fig.tight_layout()
        # Seaborn 库中用于绘制调色板的函数。它接受一个调色板对象作为参数,并可选地接受其他一些参数来调整绘图效果。
        # sns.palplot(palette="bright", size=1.5, aspect=0.5, show=True)
        # palette:必需参数,要绘制的调色板对象。可以是预定义的调色板名称(字符串),也可以是由颜色值组成的列表或数组。常见的预定义调色板名称包括 "deep"、"bright"、"dark"、"colorblind" 等。
		# size:可选参数,调色板中颜色块的大小。默认值为 1,表示每个颜色块的大小为 1x1。
		# aspect:可选参数,调色板中颜色块的纵横比。默认值为 1,表示每个颜色块的宽度与高度相等。
		# show:可选参数,是否显示调色板。默认为 True,显示调色板;设置为 False,则不显示调色板,仅返回颜色块的坐标和颜色值。
        pal = sns.light_palette("darkblue", n_colors=13, reverse=True)
        # 绘制堆叠区域图ax.stackplot(x, y, *args, **kwargs)
        # x: 作为 x 轴坐标的数组或范围对象;y: 作为 y 轴坐标的多个数组,每个数组代表一个堆叠区域的数据。
        # *args: 可选参数,可以传递额外的参数,如标签、线宽等;**kwargs: 可选关键字参数,可以传递额外的参数,如颜色、透明度等。
        ax.stackplot(x_values, y_tran, colors=pal)
        ax.set_xlabel("Execution Time (epochs)", fontsize=15)
        ax.set_xlim(min(x_values), max(x_values))
        ax.set_ylim(bottom=0)
        start, end = ax.get_ylim()
        ax.tick_params(axis="x", labelsize=15)
        ax.tick_params(axis="y", labelsize=15)
        ax.set_ylabel("Allocated\nMem. Size (MB)", fontsize=15)
        ax.set_title("%s - %s %ds" % (abbr_workload_name, thp, scanning_interval), fontsize=16.5)
        tick_interval = int(end / 5)
        ax.yaxis.set_ticks(np.arange(start, end, tick_interval))
        
        line_plot_data = [0] * len(y_tran[0])
        for y_value_li in y_tran:
                for i in range(len(y_tran[0])):
                        line_plot_data[i] += y_value_li[i]
        ax.plot(x_values, line_plot_data, linewidth=1.7, color="black")

        print(abbr_workload_name)
        filename = "%s_%s_%d" % (abbr_workload_name.replace(".", "_"), thp, scanning_interval)
        filename = filename.replace("_.", ".").replace("__", "_")
        fig.savefig(img_name, bbox_inches="tight")
        plt.show()
        plt.close()

if __name__ == "__main__":
    main()


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值