python折线图绘制——记录

本文分享了一种利用Python快速生成复杂图表的方法,通过`numpy`和`matplotlib`库,实现对圆和曲线数据的多种样式绘制,适用于大量工况分析。代码示例详细展示了如何读取数据、设置样式并保存为高质量图片。
摘要由CSDN通过智能技术生成

最近忙着文章出图,大家都习惯于Excel或者Dplot等等出图,这些工具对于几张图瞬间能搞定的,使用使用倒是很方便,但是我现在遇到了多种工况,还要出很多,所以不得不借助于python实现一键操作。不多说,直接先看下出来的结果图,后面附上代码,方便大家以及自己后面copy,我觉得应该基本上可以满足大部分要求了。

记得也查了不少CSDN的博客和知乎上的一些内容,也直接引用了他们的一些代码,已经不记得有哪些了,在此表示感谢,如果有侵权,请告知!也欢迎大家留言讨论。
在这里插入图片描述

# -*- coding: utf-8 -*-

import numpy as np
import matplotlib.pyplot as plt
from collections import OrderedDict
from matplotlib.pyplot import MultipleLocator

plt.rcParams['font.sans-serif']=['Times New Roman'] # 用来正常显示中文标签,最好设置为微软雅黑
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
plt.rcParams['savefig.dpi'] = 200 #折线图像素一般为600,保存下来太大了(https://authorservices.wiley.com/asset/photos/electronic_artwork_guidelines.pdf)
# plt.rcParams['figure.dpi'] = 300 #分辨率


def readData(path):
    rname=path+r'\1.txt'#圆
    sname=path+r'\2.txt'#曲线
    rlist = np.loadtxt(roundname,dtype=np.float)
    slist = np.loadtxt(scourname,dtype=np.float)
    return rlist,slist
    
def plot(clist,slist,name):
    lineStylesDict = OrderedDict(
        [('solid',               (0, ())),
         ('loosely dotted',      (0, (1, 10))),
         ('dotted',              (0, (1, 5))),
         ('densely dotted',      (0, (1, 1))),

         ('loosely dashed',      (0, (5, 10))),
         ('dashed',              (0, (5, 5))),
         ('densely dashed',      (0, (5, 1))),

         ('loosely dashdotted',  (0, (3, 10, 1, 10))),
         ('dashdotted',          (0, (3, 5, 1, 5))),
         ('densely dashdotted',  (0, (3, 1, 1, 1))),

         ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
         ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
         ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])
    #标签字体
    font1 = {'family': 'Times New Roman',
         'weight': 'bold',#"normal"
		 'style':'italic',
         'size': 26,
         }
    #坐标轴字体,暂时没用上
    # font2 = {'family': 'Times New Roman',
    #      'weight': 'normal',
	# 	 'style':'normal',
    #      'size': 16,
    #      }

    # plt.figure(figsize=(18,3.75),dpi=200)
    plt.figure(figsize=(18,4))
    plt.subplot(111)
    plt.subplots_adjust(left=0.05,bottom=0.2,right=0.90,top=0.95)
#圆
    plt.plot(clist[:,0],clist[:,1],linewidth=2.0,color='black')
    plt.plot(clist[:,2],clist[:,3],linewidth=2.0,color='black')
    plt.plot(clist[:,4],clist[:,5],linewidth=2.0,color='black')
    plt.plot(clist[:,6],clist[:,7],linewidth=2.0,color='black')
#曲线
    plt.plot(slist[:,0],slist[:,2],linewidth=2.0,color='black',linestyle='--',label='1')
    plt.plot(slist[:,0],slist[:,3],linewidth=2.0,color='black',linestyle=linestyles_dict['dashdotted'],label='2')
    plt.plot(slist[:,0],slist[:,4],linewidth=2.0,color='black',linestyle='-.',label='3')
    plt.plot(slist[:,0],slist[:,5],linewidth=2.0,color='black',linestyle=lineStylesDict['densely dashdotdotted'],label='4')
    plt.scatter(slist[:,0],slist[:,7],50,linewidths=1.0,alpha=1,color='black',marker='^',label='5')
    #坐标轴控制
    plt.axis('scaled')  #1:1横纵比,否则圆变椭圆了
    plt.xticks(fontsize=24)       #设置坐标轴刻度字号
    plt.yticks(fontsize=24)
    xlocator=MultipleLocator(1)
    ax=plt.gca()
    ax.xaxis.set_major_locator(xlocator)#设置主坐标轴间距
    plt.xlim((-2,10))
    plt.ylim((-1.0,1.5))
    plt.ylabel("y/D",font1)
    plt.xlabel("x/D",font1)
    ###设置坐标轴的粗细
    ax.spines['bottom'].set_linewidth(2)
    ax.spines['left'].set_linewidth(2)
    ax.spines['right'].set_linewidth(2)
    ax.spines['top'].set_linewidth(2)

    plt.legend(fontsize=21, loc='best',frameon=False,handletextpad=0.1,labelspacing=0.1)#标签横排,加个参数ncol=5
    plt.savefig(name+".tiff")
    # plt.show()


def start():
    path=r'I:\sensibility_analysis\0.5D'
    figname=path[-4:]
    rlist,slist=readData(path)
    plot(rlist,slist,figname)

if __name__=='__main__':
    start()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值