头歌Python作业——9.2 能带曲线绘制(project)

第1关 能带曲线绘制一

import matplotlib.pyplot as plt

def read_file(file):
    """参数文件名读文件,根据制表符'\t'将每行数据切分为列表再加入到列表中将数据映射为浮点数类型。  
    返回值为二维列表。 """
    with open(file, 'r', encoding='utf-8') as f:
        res = []
        for line in f.readlines():
            res.append(line.strip().split('\t'))
        return res

def plot_band(band_data):
    """参数数据是二维列表,x值从0-1的变化数据为一组,分组读取数据并绘制全部曲线"""
    x, y = [], []
    for data in band_data:
        x.append(eval(data[0]))
        y.append(eval(data[1]))
        if data[0] == '1':
            plt.plot(x, y)
            x, y = [], []
            
if __name__ == '__main__':
    filename = 'band.txt'
    data = read_file(filename)        # 读文件到二维列表
    plot_band(data)                 # 调用函数绘制曲线
    plt.savefig("result/result.jpg")  # 保存成图片
    plt.show()  


第2关 能带曲线绘制二

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimSun']
plt.rcParams['axes.unicode_minus'] = False

def read_file(file):
    """参数文件名读文件,根据制表符'\t'将每行数据切分为列表再加入到列表中将数据映射为浮点数类型。  
    返回值为二维列表。 """
    with open(file, 'r', encoding='utf-8') as f:
        res = []
        for line in f.readlines():
            res.append(line.strip().split('\t'))
        return res

def plot_band(band_data, m, n):
    """参数数据是二维列表,x值从0-1的变化数据为一组,分组读取数据并绘制全部曲线"""
    x, y = [], []
    for data in band_data:
        x.append(eval(data[0]))
        y.append(eval(data[1]))
        if data[0] == '1':
            if len([i for i in y if not m<=i<=n])==0:
                plt.plot(x, y)
            x, y = [], []
            
def plot_label():
    """绘制坐标标签、图名与x轴"""
    plt.axhline(0, linestyle='--', color='r')
    plt.title('能带曲线图谱')
    plt.xlabel('k')
    plt.ylabel('E(ev)')

if __name__ == '__main__':
    filename = 'band.txt'
    data = read_file(filename)  # 读文件到二维列表
    min_value, max_value = map(float, input().split())  # 输入数据范围
    if min_value > max_value:
        min_value, max_value = max_value, min_value
    plot_band(data, min_value, max_value)  # 调用函数绘制曲线
    plot_label()
    plt.savefig("result/result.jpg")  # 保存成图片
    plt.show()


第3关 能带曲线绘制(拓展)

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimSun']
plt.rcParams['axes.unicode_minus'] = False

def read_file(file):
    """参数文件名读文件,根据制表符'\t'将每行数据切分为列表再加入到列表中将数据映射为浮点数类型。  
    返回值为二维列表。 """
    with open(file, 'r', encoding='utf-8') as f:
        res = []
        for line in f.readlines():
            res.append(line.strip().split('\t'))
        return res

def plot_band(band_data, m, n):
    """参数数据是二维列表,x值从0-1的变化数据为一组,分组读取数据并绘制全部曲线"""
    x, y = [], []
    for data in band_data:
        x.append(eval(data[0]))
        y.append(eval(data[1]))
        if data[0] == '1':
            if len([i for i in y if not m<=i<=n])==0:
                plt.plot(x, y)
            x, y = [], []

def bottom_top_band(data_list):
    """参数是浮点数的二维列表,定位导价底和价带顶的坐标。导带底为纵坐标大于0的部曲线最低点,
    价带顶为纵坐标小于0 的曲线最高点,一般导带底与价带顶相对,即横坐标相同。以元组形式返回导带底坐标和价带顶坐标 """
    Min = (0, 1000)
    for data in data_list:
        d = eval(data[1])
        if 0<d<Min[1]:
            Min = (data[0], d)
            
    Max = max([eval(d[1]) for d in data_list if d[0]==Min[0] and eval(d[1])<0])
    return (eval(Min[0]), Min[1]), (eval(Min[0]), Max)

def gap_of_band(bottom, top):
    """bottom纵坐标大于0的部曲线最低点坐标;top纵坐标小于0 的曲线最高点坐标
    接收导带底和价带顶的数值,带隙为导带底和价带顶纵坐标之差,返回带隙值。 """
    return #该函数在本题中似乎没有用

def mark_peak(bottom_top):
    """绘制注释,在y值大于0的部分找到曲线最低点,标注'bottom of conduction band'
    在y值小于0的部分找到曲线最高点,标注'top of valence band'。 绘制导带底到价带顶连线,灰色破折线 """
    plt.plot([bottom_top[0][0], bottom_top[1][0]], [bottom_top[0][1], bottom_top[1][1]], linestyle='--', color='gray') 
    plt.annotate(r'bottom of conduction band', xy=bottom_top[0], xytext=(-200, -20),
                 textcoords='offset points', fontsize=12,
                 arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
    plt.annotate(r'top of valence band', xy=bottom_top[1], xytext=(0, 15),
                 textcoords='offset points', fontsize=12,
                 arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
            
def plot_label():
    """绘制坐标标签、图名与x轴"""
    plt.axhline(0, linestyle='--', color='r')
    plt.title('能带曲线图谱')
    plt.xlabel('k')
    plt.ylabel('E(ev)')
    
if __name__ == '__main__':
    filename = 'band.txt'
    data = read_file(filename)  # 读文件到二维列表
    min_value, max_value = map(float, input().split())  # 输入数据范围
    if min_value > max_value:
        min_value, max_value = max_value, min_value
    plot_band(data, min_value, max_value)  # 调用函数绘制曲线
    bottom_to_top = bottom_top_band(data)
    mark_peak(bottom_to_top)
    plot_label()
    bottom_top_band(data)
    plt.savefig("result/result.jpg")  # 保存成图片
    plt.show()

如果此文章对你有所帮助,麻烦点个赞,谢谢~~~

点赞加关注,追新不迷路~~~

### 回答1: Python 是一种强大的计算机编程语言,其中一个重要的应用就是数组计算和曲线绘制。常用的库有 Numpy 和 Matplotlib。Numpy 提供了高效的数组操作,可以帮助我们进行矩阵运算、统计分析等。Matplotlib 则提供了丰富的绘工具,可以绘制各种形,如线、散点、直方等。这些工具可以帮助我们对数据进行可视化和分析。 ### 回答2: Python是一种非常优秀的编程语言,尤其是在科学计算和数据处理方面,Python可以帮助我们快速完成许多复杂的计算和分析任务。而在Python编程中,数组计算和曲线绘制也是非常重要的部分,可以帮助程序员更好地进行数据处理和数据可视化。 在Python中,数组计算是一种高效的数据处理方式。Python中的数组可以使用NumPy库来进行操作,NumPy库可以让我们更方便地进行向量和矩阵运算,也可以对整个数组进行快速的计算和处理。基于NumPy库,我们可以快速地进行数组计算,用简短的代码实现各种复杂的数学运算和数据处理任务。 例如,在Python中我们可以使用NumPy库来进行数组的加、减、乘、除等基本运算,也可以进行数组的切片、拼接、排序等操作。比如,对于两个数组a和b,我们可以使用以下代码来进行数组的加法运算: ```python import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([5, 6, 7, 8]) c = a + b print(c) # [ 6 8 10 12] ``` 通过这种方式,我们可以快速地进行数组计算,完成复杂的数据处理和分析工作。 除了数组计算,Python中的曲线绘制也是非常重要的技能。Python可以使用Matplotlib库来进行数据可视化,Matplotlib库可以帮助我们快速地绘制各种类型的表,包括线性、散点、饼、柱状等等。 例如,我们可以使用Matplotlib库来绘制一条简单的折线,代码如下: ```python import matplotlib.pyplot as plt x = np.arange(0, 10, 0.1) y = np.sin(x) plt.plot(x, y) plt.show() ``` 通过这种方式,我们就可以快速地绘制出一条正弦波曲线,这对于数据分析以及数据可视化非常有用。 综上所述,Python的数组计算和曲线绘制是非常重要的计算思维训练,这不仅可以帮助我们快速地完成数据处理和数据分析任务,还可以帮助我们更好地展示和交流计算结果。希望大家在学习Python的过程中,注重这些计算思维的训练,不断提高自己的编程技能和数据处理能力。 ### 回答3: 计算思维是指在计算机问题解决中的思维方式和方法。Python是一个强大的计算机编程语言,其运用广泛,包括数据科学、Web开发、网络安全、人工智能等多个领域。Python的计算思维训练主要围绕数组计算和曲线绘制展开,这些技能在数据分析和可视化中尤为重要。 数组是Python中最基本的数据类型之一,其优点是数据的存储和处理都十分方便。Python中有丰富的数组库,如NumPy、SciPy和pandas等,可以帮助开发者高效地处理大量数据。在数组计算的训练中,开发者需要学会如何使用数组进行各种常见的计算操作,如数组的加减乘除、索引和切片、排序和聚合等,以便在实际工作中可以快速准确地进行数据处理。 曲线绘制Python中常用的数据可视化技术之一。Matplotlib和Seaborn等库可以帮助开发者绘制各种类型的表,如折线、散点、柱状、饼等,这些表能够直观地展示数据分布、趋势和关系。在曲线绘制的训练中,开发者需要学会如何使用不同的绘库及其参数,选择合适的表类型和设置表风格,使其出的表更加美观、直观和有用。 总之,Python的计算思维训练目标在于帮助开发者打造高效处理数据和优秀展示数据的能力。掌握数组计算和曲线绘制的技能不仅可以提高计算机编程的水平,更重要的是可以在数据科学领域中获取更多机会和晋升空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

萌新发文啦~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值